Commit c3ace4f4 authored by Changpeng Liu's avatar Changpeng Liu Committed by Tomasz Zawadzki
Browse files

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: default avatarChangpeng 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: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarShuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Reviewed-by: default avatarwanghailiang <hailiangx.e.wang@intel.com>
parent 0a0fe3df
Loading
Loading
Loading
Loading
+9 −20
Original line number Diff line number Diff line
@@ -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 {
	if (cfg->range_start == spdk_bdev_part_get_offset_blocks(part)) {
		spdk_bdev_unregister(spdk_bdev_part_get_bdev(part), NULL, NULL);
				cfg->opal_base->num_of_part--;
			}
		}
	}
	vbdev_opal_delete(opal_bdev);
}