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:
parent
9d0f9b330d
commit
02385a64b9
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user