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 {
|
struct vbdev_opal_part_base {
|
||||||
char *nvme_ctrlr_name;
|
char *nvme_ctrlr_name;
|
||||||
struct spdk_bdev_part_base *part_base;
|
struct spdk_bdev_part_base *part_base;
|
||||||
int num_of_part;
|
|
||||||
TAILQ_ENTRY(vbdev_opal_part_base) tailq;
|
TAILQ_ENTRY(vbdev_opal_part_base) tailq;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -151,6 +150,8 @@ vbdev_opal_base_free(void *ctx)
|
|||||||
{
|
{
|
||||||
struct vbdev_opal_part_base *base = ctx;
|
struct vbdev_opal_part_base *base = ctx;
|
||||||
|
|
||||||
|
TAILQ_REMOVE(&g_opal_base, base, tailq);
|
||||||
|
|
||||||
free(base->nvme_ctrlr_name);
|
free(base->nvme_ctrlr_name);
|
||||||
free(base);
|
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);
|
free(opal_part_base);
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
opal_part_base->num_of_part = 0;
|
|
||||||
opal_part_base->nvme_ctrlr_name = strdup(cfg->nvme_ctrlr_name);
|
opal_part_base->nvme_ctrlr_name = strdup(cfg->nvme_ctrlr_name);
|
||||||
if (opal_part_base->nvme_ctrlr_name == NULL) {
|
if (opal_part_base->nvme_ctrlr_name == NULL) {
|
||||||
vbdev_opal_free_bdev(opal_bdev);
|
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;
|
cfg->opal_base = opal_part_base;
|
||||||
TAILQ_INSERT_TAIL(&g_opal_base, opal_part_base, tailq);
|
TAILQ_INSERT_TAIL(&g_opal_base, opal_part_base, tailq);
|
||||||
}
|
}
|
||||||
|
assert(cfg->opal_base != NULL);
|
||||||
|
|
||||||
part_bdev = calloc(1, sizeof(struct spdk_bdev_part));
|
part_bdev = calloc(1, sizeof(struct spdk_bdev_part));
|
||||||
if (!part_bdev) {
|
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;
|
opal_bdev->bdev_part = part_bdev;
|
||||||
cfg->opal_base->num_of_part++;
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err:
|
err:
|
||||||
@ -472,25 +472,14 @@ err:
|
|||||||
static void
|
static void
|
||||||
vbdev_opal_destruct_bdev(struct opal_vbdev *opal_bdev)
|
vbdev_opal_destruct_bdev(struct opal_vbdev *opal_bdev)
|
||||||
{
|
{
|
||||||
SPDK_BDEV_PART_TAILQ *opal_part_tailq;
|
struct spdk_bdev_part *part = opal_bdev->bdev_part;
|
||||||
struct spdk_bdev_part *part;
|
|
||||||
struct spdk_vbdev_opal_config *cfg = &opal_bdev->cfg;
|
struct spdk_vbdev_opal_config *cfg = &opal_bdev->cfg;
|
||||||
|
|
||||||
if (cfg->opal_base != NULL) {
|
assert(cfg->opal_base != NULL);
|
||||||
part = opal_bdev->bdev_part;
|
assert(part != NULL);
|
||||||
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);
|
|
||||||
|
|
||||||
/* remove from the tailq vbdev_opal_part_base */
|
if (cfg->range_start == spdk_bdev_part_get_offset_blocks(part)) {
|
||||||
TAILQ_REMOVE(&g_opal_base, cfg->opal_base, tailq);
|
spdk_bdev_unregister(spdk_bdev_part_get_bdev(part), NULL, NULL);
|
||||||
} else {
|
|
||||||
spdk_bdev_unregister(spdk_bdev_part_get_bdev(part), NULL, NULL);
|
|
||||||
cfg->opal_base->num_of_part--;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
vbdev_opal_delete(opal_bdev);
|
vbdev_opal_delete(opal_bdev);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user