diff --git a/app/nvmf_tgt/nvmf_tgt.c b/app/nvmf_tgt/nvmf_tgt.c index 329c591eb..7cdb8a8f8 100644 --- a/app/nvmf_tgt/nvmf_tgt.c +++ b/app/nvmf_tgt/nvmf_tgt.c @@ -64,15 +64,9 @@ static struct spdk_poller *g_acceptor_poller = NULL; static void acceptor_poller_unregistered_event(struct spdk_event *event) { - int rc; - spdk_nvmf_acceptor_fini(); spdk_nvmf_transport_fini(); spdk_shutdown_nvmf_subsystems(); - - rc = spdk_nvmf_check_pools(); - - spdk_app_stop(rc); } static void diff --git a/lib/nvmf/subsystem.c b/lib/nvmf/subsystem.c index 0a78c6ce7..fd087e30f 100644 --- a/lib/nvmf/subsystem.c +++ b/lib/nvmf/subsystem.c @@ -44,6 +44,7 @@ #include "spdk/nvmf_spec.h" static TAILQ_HEAD(, spdk_nvmf_subsystem) g_subsystems = TAILQ_HEAD_INITIALIZER(g_subsystems); +bool g_subsystems_shutdown; struct spdk_nvmf_subsystem * nvmf_find_subsystem(const char *subnqn, const char *hostnqn) @@ -195,6 +196,10 @@ nvmf_delete_subsystem_poller_unreg(struct spdk_event *event) TAILQ_REMOVE(&g_subsystems, subsystem, entries); free(subsystem); + + if (g_subsystems_shutdown && TAILQ_EMPTY(&g_subsystems)) { + spdk_app_stop(spdk_nvmf_check_pools()); + } } int @@ -336,6 +341,7 @@ spdk_shutdown_nvmf_subsystems(void) { struct spdk_nvmf_subsystem *subsystem, *subsys_tmp; + g_subsystems_shutdown = true; TAILQ_FOREACH_SAFE(subsystem, &g_subsystems, entries, subsys_tmp) { nvmf_delete_subsystem(subsystem); } diff --git a/test/lib/nvmf/subsystem/subsystem_ut.c b/test/lib/nvmf/subsystem/subsystem_ut.c index b914fe53f..7a7b904a8 100644 --- a/test/lib/nvmf/subsystem/subsystem_ut.c +++ b/test/lib/nvmf/subsystem/subsystem_ut.c @@ -47,6 +47,17 @@ SPDK_LOG_REGISTER_TRACE_FLAG("nvmf", SPDK_TRACE_NVMF) struct spdk_nvmf_globals g_nvmf_tgt; +void +spdk_app_stop(int rc) +{ +} + +int +spdk_nvmf_check_pools(void) +{ + return 0; +} + uint32_t spdk_app_get_current_core(void) {