bdev/nvme: asynchronous module_finish

Now that a namespace can be depulated asynchronously now, the NVMe bdev
module should also be finalized asynchronously, after all namespaces and
controllers are deallocated.

Change-Id: Ic082fec8e31e9bd5ee1c698cd8dfca9f248776d3
Signed-off-by: Konrad Sztyber <konrad.sztyber@intel.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/1198
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-by: Aleksey Marchuk <alexeymar@mellanox.com>
This commit is contained in:
Konrad Sztyber 2020-03-05 11:45:00 +01:00 committed by Tomasz Zawadzki
parent 9d0f9b330d
commit 02385a64b9
4 changed files with 21 additions and 0 deletions

View File

@ -212,6 +212,7 @@ bdev_nvme_get_ctx_size(void)
static struct spdk_bdev_module nvme_if = {
.name = "nvme",
.async_fini = true,
.module_init = bdev_nvme_library_init,
.module_fini = bdev_nvme_library_fini,
.config_text = bdev_nvme_get_spdk_running_config,
@ -1949,6 +1950,14 @@ bdev_nvme_library_fini(void)
pthread_mutex_lock(&g_bdev_nvme_mutex);
}
}
g_bdev_nvme_module_finish = true;
if (TAILQ_EMPTY(&g_nvme_bdev_ctrlrs)) {
pthread_mutex_unlock(&g_bdev_nvme_mutex);
spdk_bdev_module_finish_done();
return;
}
pthread_mutex_unlock(&g_bdev_nvme_mutex);
}

View File

@ -37,6 +37,7 @@
struct nvme_bdev_ctrlrs g_nvme_bdev_ctrlrs = TAILQ_HEAD_INITIALIZER(g_nvme_bdev_ctrlrs);
pthread_mutex_t g_bdev_nvme_mutex = PTHREAD_MUTEX_INITIALIZER;
bool g_bdev_nvme_module_finish;
struct nvme_bdev_ctrlr *
nvme_bdev_ctrlr_get(const struct spdk_nvme_transport_id *trid)
@ -128,6 +129,15 @@ nvme_bdev_unregister_cb(void *io_device)
}
free(nvme_bdev_ctrlr->namespaces);
free(nvme_bdev_ctrlr);
pthread_mutex_lock(&g_bdev_nvme_mutex);
if (g_bdev_nvme_module_finish && TAILQ_EMPTY(&g_nvme_bdev_ctrlrs)) {
pthread_mutex_unlock(&g_bdev_nvme_mutex);
spdk_bdev_module_finish_done();
return;
}
pthread_mutex_unlock(&g_bdev_nvme_mutex);
}
void

View File

@ -41,6 +41,7 @@
TAILQ_HEAD(nvme_bdev_ctrlrs, nvme_bdev_ctrlr);
extern struct nvme_bdev_ctrlrs g_nvme_bdev_ctrlrs;
extern pthread_mutex_t g_bdev_nvme_mutex;
extern bool g_bdev_nvme_module_finish;
#define NVME_MAX_CONTROLLERS 1024

View File

@ -60,6 +60,7 @@ DEFINE_STUB(spdk_bdev_push_media_events, int, (struct spdk_bdev *bdev,
size_t num_events), 0);
DEFINE_STUB_V(spdk_bdev_notify_media_management, (struct spdk_bdev *bdev));
DEFINE_STUB_V(nvme_ctrlr_depopulate_namespace_done, (struct nvme_bdev_ctrlr *ctrlr));
DEFINE_STUB_V(spdk_bdev_module_finish_done, (void));
struct nvme_request {
spdk_nvme_cmd_cb cb_fn;