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 <changpeng.liu@intel.com> 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 <sys_sgci@intel.com> Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: wanghailiang <hailiangx.e.wang@intel.com>
This commit is contained in:
parent
0a0fe3df5c
commit
c3ace4f40c
@ -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);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user