diff --git a/module/bdev/nvme/bdev_nvme.c b/module/bdev/nvme/bdev_nvme.c index e1eb31e8d..06c9dbc41 100644 --- a/module/bdev/nvme/bdev_nvme.c +++ b/module/bdev/nvme/bdev_nvme.c @@ -316,13 +316,11 @@ bdev_nvme_destruct(void *ctx) struct nvme_bdev *nvme_disk = ctx; struct nvme_bdev_ns *nvme_ns = nvme_disk->nvme_ns; - nvme_ns->bdev = NULL; - pthread_mutex_lock(&nvme_ns->ctrlr->mutex); - assert(nvme_ns->ref > 0); - nvme_ns->ref--; - if (nvme_ns->ref == 0) { + nvme_ns->bdev = NULL; + + if (!nvme_ns->populated) { pthread_mutex_unlock(&nvme_ns->ctrlr->mutex); nvme_bdev_ctrlr_destruct(nvme_ns->ctrlr); @@ -1415,7 +1413,6 @@ nvme_bdev_create(struct nvme_bdev_ctrlr *nvme_bdev_ctrlr, struct nvme_bdev_ns *n return rc; } - nvme_ns->ref++; nvme_ns->bdev = bdev; return 0; @@ -1437,7 +1434,6 @@ nvme_ctrlr_populate_standard_namespace(struct nvme_bdev_ctrlr *nvme_bdev_ctrlr, } nvme_ns->ns = ns; - nvme_ns->ref = 1; nvme_ns->populated = true; rc = nvme_bdev_create(nvme_bdev_ctrlr, nvme_ns); diff --git a/module/bdev/nvme/bdev_ocssd.c b/module/bdev/nvme/bdev_ocssd.c index 54952f1d4..c2df83ad6 100644 --- a/module/bdev/nvme/bdev_ocssd.c +++ b/module/bdev/nvme/bdev_ocssd.c @@ -215,13 +215,11 @@ bdev_ocssd_destruct(void *ctx) struct nvme_bdev *nvme_bdev = &ocssd_bdev->nvme_bdev; struct nvme_bdev_ns *nvme_ns = nvme_bdev->nvme_ns; - nvme_ns->bdev = NULL; - pthread_mutex_lock(&nvme_ns->ctrlr->mutex); - assert(nvme_ns->ref > 0); - nvme_ns->ref--; - if (nvme_ns->ref == 0) { + nvme_ns->bdev = NULL; + + if (!nvme_ns->populated) { pthread_mutex_unlock(&nvme_ns->ctrlr->mutex); nvme_bdev_ctrlr_destruct(nvme_ns->ctrlr); @@ -1115,7 +1113,6 @@ bdev_ocssd_register_bdev(void *ctx) rc = spdk_bdev_register(&nvme_bdev->disk); if (spdk_likely(rc == 0)) { - nvme_ns->ref++; nvme_ns->bdev = nvme_bdev; } else { SPDK_ERRLOG("Failed to register bdev %s\n", nvme_bdev->disk.name); @@ -1456,7 +1453,6 @@ bdev_ocssd_populate_namespace(struct nvme_bdev_ctrlr *nvme_bdev_ctrlr, nvme_ns->type_ctx = ocssd_ns; nvme_ns->ns = ns; - nvme_ns->ref = 1; nvme_ns->populated = true; ctx->nvme_ctx = nvme_ctx; ctx->nvme_ns = nvme_ns; diff --git a/module/bdev/nvme/common.c b/module/bdev/nvme/common.c index eceeaa692..db2d95759 100644 --- a/module/bdev/nvme/common.c +++ b/module/bdev/nvme/common.c @@ -197,9 +197,7 @@ nvme_ctrlr_depopulate_namespace_done(struct nvme_bdev_ns *nvme_ns) nvme_ns->populated = false; - assert(nvme_ns->ref > 0); - nvme_ns->ref--; - if (nvme_ns->ref > 0) { + if (nvme_ns->bdev != NULL) { pthread_mutex_unlock(&nvme_bdev_ctrlr->mutex); return; } diff --git a/module/bdev/nvme/common.h b/module/bdev/nvme/common.h index 50784e328..3679e88bd 100644 --- a/module/bdev/nvme/common.h +++ b/module/bdev/nvme/common.h @@ -62,7 +62,6 @@ struct nvme_bdev_ns { * or when a namespace becomes inactive. */ bool populated; - int ref; struct spdk_nvme_ns *ns; struct nvme_bdev_ctrlr *ctrlr; struct nvme_bdev *bdev;