nvmf: properly cleanup when failing to create subsystem

In the case of using CONF file, if two subsystems are assigned
with same subnqn, it fails at the second subsystem creation,
however the state machine is not set correctly.

The fix here is to properly set the state machine to roll back
the operations and destroy the created subsystem and exit the
application cleanly.

Change-Id: I4356802a12f7a2982485f61a69eceeb979033788
Signed-off-by: GangCao <gang.cao@intel.com>
Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/476904
Community-CI: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
This commit is contained in:
GangCao 2019-12-05 22:03:02 -05:00 committed by Tomasz Zawadzki
parent c322751769
commit 5d541746f3

View File

@ -93,12 +93,17 @@ _spdk_nvmf_shutdown_cb(void *arg1)
if (g_tgt_state < NVMF_TGT_RUNNING) { if (g_tgt_state < NVMF_TGT_RUNNING) {
spdk_thread_send_msg(spdk_get_thread(), _spdk_nvmf_shutdown_cb, NULL); spdk_thread_send_msg(spdk_get_thread(), _spdk_nvmf_shutdown_cb, NULL);
return; return;
} else if (g_tgt_state > NVMF_TGT_RUNNING) { } else if (g_tgt_state != NVMF_TGT_RUNNING && g_tgt_state != NVMF_TGT_ERROR) {
/* Already in Shutdown status, ignore the signal */ /* Already in Shutdown status, ignore the signal */
return; return;
} }
g_tgt_state = NVMF_TGT_FINI_STOP_SUBSYSTEMS; if (g_tgt_state == NVMF_TGT_ERROR) {
/* Parse configuration error */
g_tgt_state = NVMF_TGT_FINI_FREE_RESOURCES;
} else {
g_tgt_state = NVMF_TGT_FINI_STOP_SUBSYSTEMS;
}
nvmf_tgt_advance_state(); nvmf_tgt_advance_state();
} }