nvmf/subsystem: find intermediate state in helper function.
This will be used in another place later. This patch is part of a series aimed at improving recovery when we are fail to change the subsystem state. Signed-off-by: Seth Howell <seth.howell@intel.com> Change-Id: I24bfbeb3d006584003164540d6ede540dbcafa86 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/3392 Community-CI: Mellanox Build Bot Community-CI: Broadcom CI Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: <dongx.yi@intel.com> Reviewed-by: Aleksey Marchuk <alexeymar@mellanox.com> Reviewed-by: Paul Luse <paul.e.luse@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Reviewed-by: Michael Haeuptle <michaelhaeuptle@gmail.com>
This commit is contained in:
parent
dca3fdc482
commit
3f190fe170
@ -57,6 +57,7 @@ enum spdk_nvmf_subsystem_state {
|
|||||||
SPDK_NVMF_SUBSYSTEM_PAUSED,
|
SPDK_NVMF_SUBSYSTEM_PAUSED,
|
||||||
SPDK_NVMF_SUBSYSTEM_RESUMING,
|
SPDK_NVMF_SUBSYSTEM_RESUMING,
|
||||||
SPDK_NVMF_SUBSYSTEM_DEACTIVATING,
|
SPDK_NVMF_SUBSYSTEM_DEACTIVATING,
|
||||||
|
SPDK_NVMF_SUBSYSTEM_NUM_STATES,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct spdk_nvmf_tgt {
|
struct spdk_nvmf_tgt {
|
||||||
|
@ -370,6 +370,31 @@ spdk_nvmf_subsystem_destroy(struct spdk_nvmf_subsystem *subsystem)
|
|||||||
free(subsystem);
|
free(subsystem);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* we have to use the typedef in the function declaration to appease astyle. */
|
||||||
|
typedef enum spdk_nvmf_subsystem_state spdk_nvmf_subsystem_state_t;
|
||||||
|
|
||||||
|
static spdk_nvmf_subsystem_state_t
|
||||||
|
nvmf_subsystem_get_intermediate_state(enum spdk_nvmf_subsystem_state current_state,
|
||||||
|
enum spdk_nvmf_subsystem_state requested_state)
|
||||||
|
{
|
||||||
|
switch (requested_state) {
|
||||||
|
case SPDK_NVMF_SUBSYSTEM_INACTIVE:
|
||||||
|
return SPDK_NVMF_SUBSYSTEM_DEACTIVATING;
|
||||||
|
case SPDK_NVMF_SUBSYSTEM_ACTIVE:
|
||||||
|
if (current_state == SPDK_NVMF_SUBSYSTEM_PAUSED) {
|
||||||
|
return SPDK_NVMF_SUBSYSTEM_RESUMING;
|
||||||
|
} else {
|
||||||
|
return SPDK_NVMF_SUBSYSTEM_ACTIVATING;
|
||||||
|
}
|
||||||
|
case SPDK_NVMF_SUBSYSTEM_PAUSED:
|
||||||
|
return SPDK_NVMF_SUBSYSTEM_PAUSING;
|
||||||
|
default:
|
||||||
|
assert(false);
|
||||||
|
return SPDK_NVMF_SUBSYSTEM_NUM_STATES;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
nvmf_subsystem_set_state(struct spdk_nvmf_subsystem *subsystem,
|
nvmf_subsystem_set_state(struct spdk_nvmf_subsystem *subsystem,
|
||||||
enum spdk_nvmf_subsystem_state state)
|
enum spdk_nvmf_subsystem_state state)
|
||||||
@ -500,22 +525,8 @@ nvmf_subsystem_state_change(struct spdk_nvmf_subsystem *subsystem,
|
|||||||
enum spdk_nvmf_subsystem_state intermediate_state;
|
enum spdk_nvmf_subsystem_state intermediate_state;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
switch (requested_state) {
|
intermediate_state = nvmf_subsystem_get_intermediate_state(subsystem->state, requested_state);
|
||||||
case SPDK_NVMF_SUBSYSTEM_INACTIVE:
|
if (intermediate_state == SPDK_NVMF_SUBSYSTEM_NUM_STATES) {
|
||||||
intermediate_state = SPDK_NVMF_SUBSYSTEM_DEACTIVATING;
|
|
||||||
break;
|
|
||||||
case SPDK_NVMF_SUBSYSTEM_ACTIVE:
|
|
||||||
if (subsystem->state == SPDK_NVMF_SUBSYSTEM_PAUSED) {
|
|
||||||
intermediate_state = SPDK_NVMF_SUBSYSTEM_RESUMING;
|
|
||||||
} else {
|
|
||||||
intermediate_state = SPDK_NVMF_SUBSYSTEM_ACTIVATING;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case SPDK_NVMF_SUBSYSTEM_PAUSED:
|
|
||||||
intermediate_state = SPDK_NVMF_SUBSYSTEM_PAUSING;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
assert(false);
|
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user