From c3ace4f40c0e2f6e2417f4482d646d033095a1d1 Mon Sep 17 00:00:00 2001 From: Changpeng Liu Date: Mon, 22 Jun 2020 17:52:46 +0800 Subject: [PATCH] bdev_nvme/opal: use spdk_bdev_unregister() when deleting a vbdev The base bdev's reference number is maintained in the bdev layer, so we don't need to maintain it in this module. Change-Id: Iffadbde2dbf35d934f273fdcb4b7d19e96394343 Signed-off-by: Changpeng Liu Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/2986 Community-CI: Mellanox Build Bot Community-CI: Broadcom CI Tested-by: SPDK CI Jenkins Reviewed-by: Shuhei Matsumoto Reviewed-by: Jim Harris Reviewed-by: wanghailiang --- module/bdev/nvme/vbdev_opal.c | 27 ++++++++------------------- 1 file changed, 8 insertions(+), 19 deletions(-) diff --git a/module/bdev/nvme/vbdev_opal.c b/module/bdev/nvme/vbdev_opal.c index cdbcc5588..fc4986066 100644 --- a/module/bdev/nvme/vbdev_opal.c +++ b/module/bdev/nvme/vbdev_opal.c @@ -75,7 +75,6 @@ struct vbdev_opal_channel { struct vbdev_opal_part_base { char *nvme_ctrlr_name; struct spdk_bdev_part_base *part_base; - int num_of_part; TAILQ_ENTRY(vbdev_opal_part_base) tailq; }; @@ -151,6 +150,8 @@ vbdev_opal_base_free(void *ctx) { struct vbdev_opal_part_base *base = ctx; + TAILQ_REMOVE(&g_opal_base, base, tailq); + free(base->nvme_ctrlr_name); free(base); } @@ -408,7 +409,6 @@ vbdev_opal_create(const char *nvme_ctrlr_name, uint32_t nsid, uint8_t locking_ra free(opal_part_base); return -ENOMEM; } - opal_part_base->num_of_part = 0; opal_part_base->nvme_ctrlr_name = strdup(cfg->nvme_ctrlr_name); if (opal_part_base->nvme_ctrlr_name == NULL) { vbdev_opal_free_bdev(opal_bdev); @@ -419,6 +419,7 @@ vbdev_opal_create(const char *nvme_ctrlr_name, uint32_t nsid, uint8_t locking_ra cfg->opal_base = opal_part_base; TAILQ_INSERT_TAIL(&g_opal_base, opal_part_base, tailq); } + assert(cfg->opal_base != NULL); part_bdev = calloc(1, sizeof(struct spdk_bdev_part)); if (!part_bdev) { @@ -460,7 +461,6 @@ vbdev_opal_create(const char *nvme_ctrlr_name, uint32_t nsid, uint8_t locking_ra } opal_bdev->bdev_part = part_bdev; - cfg->opal_base->num_of_part++; return 0; err: @@ -472,25 +472,14 @@ err: static void vbdev_opal_destruct_bdev(struct opal_vbdev *opal_bdev) { - SPDK_BDEV_PART_TAILQ *opal_part_tailq; - struct spdk_bdev_part *part; + struct spdk_bdev_part *part = opal_bdev->bdev_part; struct spdk_vbdev_opal_config *cfg = &opal_bdev->cfg; - if (cfg->opal_base != NULL) { - part = opal_bdev->bdev_part; - opal_part_tailq = spdk_bdev_part_base_get_tailq(cfg->opal_base->part_base); - if (cfg->range_start == spdk_bdev_part_get_offset_blocks(part)) { - if (cfg->opal_base->num_of_part <= 1) { - /* if there is only one part for this base, we can remove the base now */ - spdk_bdev_part_base_hotremove(cfg->opal_base->part_base, opal_part_tailq); + assert(cfg->opal_base != NULL); + assert(part != NULL); - /* remove from the tailq vbdev_opal_part_base */ - TAILQ_REMOVE(&g_opal_base, cfg->opal_base, tailq); - } else { - spdk_bdev_unregister(spdk_bdev_part_get_bdev(part), NULL, NULL); - cfg->opal_base->num_of_part--; - } - } + if (cfg->range_start == spdk_bdev_part_get_offset_blocks(part)) { + spdk_bdev_unregister(spdk_bdev_part_get_bdev(part), NULL, NULL); } vbdev_opal_delete(opal_bdev); }