From 060495b14016868ec2267251833998625b475eba Mon Sep 17 00:00:00 2001 From: Shuhei Matsumoto Date: Mon, 4 Jan 2021 16:28:52 +0900 Subject: [PATCH] bdev/nvme: Factor out decrementing ref. count of nvme_bdev_ns Factor out the common operation of nvme_ctrlr_depopulate_namespace_done() and nvme_bdev_attach_bdev_to_ns() into a helper function nvme_bdev_ns_detach(). Signed-off-by: Shuhei Matsumoto Change-Id: I8efa8bc2c2d455d0fd9e0865ff85fd265d14ee06 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/5613 Community-CI: Broadcom CI Tested-by: SPDK CI Jenkins Reviewed-by: Jim Harris Reviewed-by: Changpeng Liu --- module/bdev/nvme/bdev_nvme.c | 11 +-------- module/bdev/nvme/common.c | 24 ++++++++++++------- module/bdev/nvme/common.h | 1 + .../lib/bdev/bdev_ocssd.c/bdev_ocssd_ut.c | 8 +------ 4 files changed, 19 insertions(+), 25 deletions(-) diff --git a/module/bdev/nvme/bdev_nvme.c b/module/bdev/nvme/bdev_nvme.c index 73209eb37..2f8d22e50 100644 --- a/module/bdev/nvme/bdev_nvme.c +++ b/module/bdev/nvme/bdev_nvme.c @@ -1312,16 +1312,7 @@ timeout_cb(void *cb_arg, struct spdk_nvme_ctrlr *ctrlr, void nvme_ctrlr_depopulate_namespace_done(struct nvme_bdev_ns *nvme_ns) { - pthread_mutex_lock(&g_bdev_nvme_mutex); - assert(nvme_ns->ref > 0); - nvme_ns->ref--; - if (nvme_ns->ref > 0) { - pthread_mutex_unlock(&g_bdev_nvme_mutex); - return; - } - pthread_mutex_unlock(&g_bdev_nvme_mutex); - - nvme_bdev_ctrlr_destruct(nvme_ns->ctrlr); + nvme_bdev_ns_detach(nvme_ns); } static void diff --git a/module/bdev/nvme/common.c b/module/bdev/nvme/common.c index 28aef1740..14e5d1424 100644 --- a/module/bdev/nvme/common.c +++ b/module/bdev/nvme/common.c @@ -184,6 +184,21 @@ nvme_bdev_ctrlr_destruct(struct nvme_bdev_ctrlr *nvme_bdev_ctrlr) nvme_bdev_ctrlr_do_destruct(nvme_bdev_ctrlr); } +void +nvme_bdev_ns_detach(struct nvme_bdev_ns *nvme_ns) +{ + pthread_mutex_lock(&g_bdev_nvme_mutex); + assert(nvme_ns->ref > 0); + nvme_ns->ref--; + if (nvme_ns->ref > 0) { + pthread_mutex_unlock(&g_bdev_nvme_mutex); + return; + } + pthread_mutex_unlock(&g_bdev_nvme_mutex); + + nvme_bdev_ctrlr_destruct(nvme_ns->ctrlr); +} + void nvme_bdev_attach_bdev_to_ns(struct nvme_bdev_ns *nvme_ns, struct nvme_bdev *nvme_disk) { @@ -201,14 +216,7 @@ nvme_bdev_detach_bdev_from_ns(struct nvme_bdev *nvme_disk) pthread_mutex_lock(&g_bdev_nvme_mutex); TAILQ_REMOVE(&nvme_disk->nvme_ns->bdevs, nvme_disk, tailq); - - assert(nvme_ns->ref > 0); - nvme_ns->ref--; - if (nvme_ns->ref > 0) { - pthread_mutex_unlock(&g_bdev_nvme_mutex); - return; - } pthread_mutex_unlock(&g_bdev_nvme_mutex); - nvme_bdev_ctrlr_destruct(nvme_ns->ctrlr); + nvme_bdev_ns_detach(nvme_ns); } diff --git a/module/bdev/nvme/common.h b/module/bdev/nvme/common.h index 83bd30247..6567c212e 100644 --- a/module/bdev/nvme/common.h +++ b/module/bdev/nvme/common.h @@ -167,6 +167,7 @@ void nvme_bdev_dump_trid_json(const struct spdk_nvme_transport_id *trid, void nvme_bdev_ctrlr_destruct(struct nvme_bdev_ctrlr *nvme_bdev_ctrlr); void nvme_bdev_ctrlr_do_destruct(void *ctx); +void nvme_bdev_ns_detach(struct nvme_bdev_ns *nvme_ns); void nvme_bdev_attach_bdev_to_ns(struct nvme_bdev_ns *nvme_ns, struct nvme_bdev *nvme_disk); void nvme_bdev_detach_bdev_from_ns(struct nvme_bdev *nvme_disk); diff --git a/test/unit/lib/bdev/bdev_ocssd.c/bdev_ocssd_ut.c b/test/unit/lib/bdev/bdev_ocssd.c/bdev_ocssd_ut.c index 6f76a614c..6b511a5ee 100644 --- a/test/unit/lib/bdev/bdev_ocssd.c/bdev_ocssd_ut.c +++ b/test/unit/lib/bdev/bdev_ocssd.c/bdev_ocssd_ut.c @@ -197,13 +197,7 @@ nvme_ctrlr_populate_namespace_done(struct nvme_async_probe_ctx *ctx, void nvme_ctrlr_depopulate_namespace_done(struct nvme_bdev_ns *ns) { - CU_ASSERT(ns->ref > 0); - ns->ref--; - if (ns->ref > 0) { - return; - } - - nvme_bdev_ctrlr_destruct(ns->ctrlr); + nvme_bdev_ns_detach(ns); } static struct nvme_bdev_ctrlr *