From 8a842de519ca37b650c54d21c74b51ff231860ba Mon Sep 17 00:00:00 2001 From: Changpeng Liu Date: Tue, 7 Sep 2021 20:39:15 +0800 Subject: [PATCH] nvmf: stop paused subsystem correctly For live migration support in vfio-user transport, we need to pause the subsystem when starting migration in source VM, then after migration, the subsystem is in paused state, when exiting the application, we will call spdk_nvmf_subsystem_stop() at last, and existing code will assert this case. Change-Id: If5214c45973b27f6092c4a6d71ede336e54d89e8 Signed-off-by: Changpeng Liu Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/9407 Community-CI: Broadcom CI Tested-by: SPDK CI Jenkins Reviewed-by: Aleksey Marchuk Reviewed-by: Ben Walker Reviewed-by: Shuhei Matsumoto Reviewed-by: Jim Harris Reviewed-by: Dong Yi --- lib/nvmf/subsystem.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/nvmf/subsystem.c b/lib/nvmf/subsystem.c index 873b639b8..a97e3413b 100644 --- a/lib/nvmf/subsystem.c +++ b/lib/nvmf/subsystem.c @@ -539,6 +539,11 @@ nvmf_subsystem_set_state(struct spdk_nvmf_subsystem *subsystem, state == SPDK_NVMF_SUBSYSTEM_PAUSING) { expected_old_state = SPDK_NVMF_SUBSYSTEM_RESUMING; } + /* This is for the case when stopping paused subsystem */ + if (actual_old_state == SPDK_NVMF_SUBSYSTEM_PAUSED && + state == SPDK_NVMF_SUBSYSTEM_DEACTIVATING) { + expected_old_state = SPDK_NVMF_SUBSYSTEM_PAUSED; + } actual_old_state = expected_old_state; __atomic_compare_exchange_n(&subsystem->state, &actual_old_state, state, false, __ATOMIC_RELAXED, __ATOMIC_RELAXED);