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:
parent
c322751769
commit
5d541746f3
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user