nvmf_tgt: reverse states during shutdown

Now that the acceptor poller is also checking for asynchronous rdma
events at the transport layer, we need to make sure that this is running
until all of the poll groups are deleted.

Change-Id: I34973047fcb247b8a5a36cc7db681ab0b3cb0779
Signed-off-by: Seth Howell <seth.howell@intel.com>
Reviewed-on: https://review.gerrithub.io/420680
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-by: Ziye Yang <optimistyzy@gmail.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Chandler-Test-Pool: SPDK Automated Test System <sys_sgsw@intel.com>
This commit is contained in:
Seth Howell 2018-07-27 11:38:38 -07:00 committed by Ben Walker
parent e5a6540777
commit 3f6041bce4

View File

@ -47,9 +47,9 @@ enum nvmf_tgt_state {
NVMF_TGT_INIT_START_SUBSYSTEMS,
NVMF_TGT_INIT_START_ACCEPTOR,
NVMF_TGT_RUNNING,
NVMF_TGT_FINI_STOP_ACCEPTOR,
NVMF_TGT_FINI_DESTROY_POLL_GROUPS,
NVMF_TGT_FINI_STOP_SUBSYSTEMS,
NVMF_TGT_FINI_DESTROY_POLL_GROUPS,
NVMF_TGT_FINI_STOP_ACCEPTOR,
NVMF_TGT_FINI_FREE_RESOURCES,
NVMF_TGT_STOPPED,
NVMF_TGT_ERROR,
@ -86,7 +86,7 @@ _spdk_nvmf_shutdown_cb(void *arg1, void *arg2)
return;
}
g_tgt_state = NVMF_TGT_FINI_STOP_ACCEPTOR;
g_tgt_state = NVMF_TGT_FINI_STOP_SUBSYSTEMS;
nvmf_tgt_advance_state();
}
@ -144,7 +144,7 @@ acceptor_poll(void *arg)
static void
nvmf_tgt_destroy_poll_group_done(void *ctx)
{
g_tgt_state = NVMF_TGT_FINI_FREE_RESOURCES;
g_tgt_state = NVMF_TGT_FINI_STOP_ACCEPTOR;
nvmf_tgt_advance_state();
}
@ -286,10 +286,6 @@ nvmf_tgt_advance_state(void)
case NVMF_TGT_RUNNING:
spdk_subsystem_init_next(0);
break;
case NVMF_TGT_FINI_STOP_ACCEPTOR:
spdk_poller_unregister(&g_acceptor_poller);
g_tgt_state = NVMF_TGT_FINI_STOP_SUBSYSTEMS;
break;
case NVMF_TGT_FINI_STOP_SUBSYSTEMS: {
struct spdk_nvmf_subsystem *subsystem;
@ -308,6 +304,10 @@ nvmf_tgt_advance_state(void)
NULL,
nvmf_tgt_destroy_poll_group_done);
break;
case NVMF_TGT_FINI_STOP_ACCEPTOR:
spdk_poller_unregister(&g_acceptor_poller);
g_tgt_state = NVMF_TGT_FINI_FREE_RESOURCES;
break;
case NVMF_TGT_FINI_FREE_RESOURCES:
spdk_nvmf_tgt_destroy(g_spdk_nvmf_tgt, nvmf_tgt_destroy_done, NULL);
break;