diff --git a/module/bdev/nvme/bdev_nvme.c b/module/bdev/nvme/bdev_nvme.c index 2f8d22e50..f54629cd6 100644 --- a/module/bdev/nvme/bdev_nvme.c +++ b/module/bdev/nvme/bdev_nvme.c @@ -293,8 +293,13 @@ static int bdev_nvme_destruct(void *ctx) { struct nvme_bdev *nvme_disk = ctx; + struct nvme_bdev_ns *nvme_ns = nvme_disk->nvme_ns; - nvme_bdev_detach_bdev_from_ns(nvme_disk); + pthread_mutex_lock(&g_bdev_nvme_mutex); + TAILQ_REMOVE(&nvme_ns->bdevs, nvme_disk, tailq); + pthread_mutex_unlock(&g_bdev_nvme_mutex); + + nvme_bdev_ns_detach(nvme_ns); free(nvme_disk->disk.name); free(nvme_disk); @@ -1198,7 +1203,9 @@ nvme_bdev_create(struct nvme_bdev_ctrlr *nvme_bdev_ctrlr, struct nvme_bdev_ns *n return rc; } - nvme_bdev_attach_bdev_to_ns(nvme_ns, bdev); + nvme_ns->ref++; + TAILQ_INSERT_TAIL(&nvme_ns->bdevs, bdev, tailq); + return 0; } diff --git a/module/bdev/nvme/bdev_ocssd.c b/module/bdev/nvme/bdev_ocssd.c index bba71326c..cf09a0a19 100644 --- a/module/bdev/nvme/bdev_ocssd.c +++ b/module/bdev/nvme/bdev_ocssd.c @@ -235,8 +235,14 @@ bdev_ocssd_destruct(void *ctx) { struct ocssd_bdev *ocssd_bdev = ctx; struct nvme_bdev *nvme_bdev = &ocssd_bdev->nvme_bdev; + struct nvme_bdev_ns *nvme_ns = nvme_bdev->nvme_ns; + + pthread_mutex_lock(&g_bdev_nvme_mutex); + TAILQ_REMOVE(&nvme_ns->bdevs, nvme_bdev, tailq); + pthread_mutex_unlock(&g_bdev_nvme_mutex); + + nvme_bdev_ns_detach(nvme_ns); - nvme_bdev_detach_bdev_from_ns(nvme_bdev); bdev_ocssd_free_bdev(ocssd_bdev); return 0; @@ -1133,11 +1139,13 @@ bdev_ocssd_register_bdev(void *ctx) { struct bdev_ocssd_create_ctx *create_ctx = ctx; struct nvme_bdev *nvme_bdev = &create_ctx->ocssd_bdev->nvme_bdev; + struct nvme_bdev_ns *nvme_ns = create_ctx->nvme_ns; int rc; rc = spdk_bdev_register(&nvme_bdev->disk); if (spdk_likely(rc == 0)) { - nvme_bdev_attach_bdev_to_ns(create_ctx->nvme_ns, nvme_bdev); + nvme_ns->ref++; + TAILQ_INSERT_TAIL(&nvme_ns->bdevs, nvme_bdev, tailq); } else { SPDK_ERRLOG("Failed to register bdev %s\n", nvme_bdev->disk.name); } diff --git a/module/bdev/nvme/common.c b/module/bdev/nvme/common.c index 14e5d1424..d275540ed 100644 --- a/module/bdev/nvme/common.c +++ b/module/bdev/nvme/common.c @@ -198,25 +198,3 @@ nvme_bdev_ns_detach(struct nvme_bdev_ns *nvme_ns) 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) -{ - assert(nvme_disk->nvme_ns == nvme_ns); - - nvme_ns->ref++; - - TAILQ_INSERT_TAIL(&nvme_ns->bdevs, nvme_disk, tailq); -} - -void -nvme_bdev_detach_bdev_from_ns(struct nvme_bdev *nvme_disk) -{ - struct nvme_bdev_ns *nvme_ns = nvme_disk->nvme_ns; - - pthread_mutex_lock(&g_bdev_nvme_mutex); - TAILQ_REMOVE(&nvme_disk->nvme_ns->bdevs, nvme_disk, tailq); - pthread_mutex_unlock(&g_bdev_nvme_mutex); - - nvme_bdev_ns_detach(nvme_ns); -} diff --git a/module/bdev/nvme/common.h b/module/bdev/nvme/common.h index 6567c212e..4bc432a08 100644 --- a/module/bdev/nvme/common.h +++ b/module/bdev/nvme/common.h @@ -168,7 +168,5 @@ 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); #endif /* SPDK_COMMON_BDEV_NVME_H */