diff --git a/lib/nvmf/nvmf.c b/lib/nvmf/nvmf.c index 49d56192f..02ea956ae 100644 --- a/lib/nvmf/nvmf.c +++ b/lib/nvmf/nvmf.c @@ -134,6 +134,12 @@ spdk_nvmf_listen_addr_destroy(struct spdk_nvmf_listen_addr *addr) assert(transport != NULL); transport->listen_addr_remove(addr); + spdk_nvmf_listen_addr_cleanup(addr); +} + +void +spdk_nvmf_listen_addr_cleanup(struct spdk_nvmf_listen_addr *addr) +{ free(addr->trname); free(addr->trsvcid); free(addr->traddr); diff --git a/lib/nvmf/nvmf_internal.h b/lib/nvmf/nvmf_internal.h index 1fd06a365..191080680 100644 --- a/lib/nvmf/nvmf_internal.h +++ b/lib/nvmf/nvmf_internal.h @@ -62,6 +62,7 @@ extern struct spdk_nvmf_tgt g_nvmf_tgt; struct spdk_nvmf_listen_addr *spdk_nvmf_listen_addr_create(const char *trname, const char *traddr, const char *trsvcid); void spdk_nvmf_listen_addr_destroy(struct spdk_nvmf_listen_addr *addr); +void spdk_nvmf_listen_addr_cleanup(struct spdk_nvmf_listen_addr *addr); #define OBJECT_NVMF_IO 0x30 diff --git a/lib/nvmf/subsystem.c b/lib/nvmf/subsystem.c index 71cb2c9e4..0eafcd58e 100644 --- a/lib/nvmf/subsystem.c +++ b/lib/nvmf/subsystem.c @@ -263,16 +263,17 @@ spdk_nvmf_subsystem_add_listener(struct spdk_nvmf_subsystem *subsystem, return -1; } - TAILQ_INSERT_HEAD(&subsystem->listen_addrs, listen_addr, link); - subsystem->num_listen_addrs++; - g_nvmf_tgt.discovery_genctr++; - rc = transport->listen_addr_add(listen_addr); if (rc < 0) { + spdk_nvmf_listen_addr_cleanup(listen_addr); SPDK_ERRLOG("Unable to listen on address '%s'\n", traddr); return -1; } + TAILQ_INSERT_HEAD(&subsystem->listen_addrs, listen_addr, link); + subsystem->num_listen_addrs++; + g_nvmf_tgt.discovery_genctr++; + return 0; } diff --git a/test/lib/nvmf/subsystem/subsystem_ut.c b/test/lib/nvmf/subsystem/subsystem_ut.c index 1d5dc95b2..883755923 100644 --- a/test/lib/nvmf/subsystem/subsystem_ut.c +++ b/test/lib/nvmf/subsystem/subsystem_ut.c @@ -91,6 +91,12 @@ spdk_nvmf_listen_addr_destroy(struct spdk_nvmf_listen_addr *addr) free(addr); } +void +spdk_nvmf_listen_addr_cleanup(struct spdk_nvmf_listen_addr *addr) +{ + return; +} + static int test_transport1_listen_addr_add(struct spdk_nvmf_listen_addr *listen_addr) {