Commit 68a8502f authored by Shuhei Matsumoto's avatar Shuhei Matsumoto Committed by Jim Harris
Browse files

bdev/nvme: Remove nvme_ns->ref and use nvme_ns->populated and nvme_ns->bdev instead



As said in the previous patches, nvme_ns->ref is 2 at most, and
first is for populating namespace and second is for nvme_bdev.
On the other hand, nvme_ns->populated is for populating namespace
and nvme_ns->bdev is for nvme_bdev.

Preparation was done by the preceding patches. Let's remove nvme_ns->ref
and use nvme_ns->populated and nvme_ns->bdev instead.

We have unit tests for both normal case and shutdown case now.
So regression will be avoided.

These changes will be helpful for the following patches to support
multipath.

Signed-off-by: default avatarShuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Change-Id: I279ca21a41d6ee2c07bbbeb62866e28423fcc6d0
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/7097


Community-CI: Broadcom CI
Community-CI: Mellanox Build Bot
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Reviewed-by: default avatarPaul Luse <paul.e.luse@intel.com>
Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
Reviewed-by: default avatarAleksey Marchuk <alexeymar@mellanox.com>
parent 2bed9983
Loading
Loading
Loading
Loading
+3 −7
Original line number Diff line number Diff line
@@ -316,13 +316,11 @@ bdev_nvme_destruct(void *ctx)
	struct nvme_bdev *nvme_disk = ctx;
	struct nvme_bdev_ns *nvme_ns = nvme_disk->nvme_ns;

	nvme_ns->bdev = NULL;

	pthread_mutex_lock(&nvme_ns->ctrlr->mutex);

	assert(nvme_ns->ref > 0);
	nvme_ns->ref--;
	if (nvme_ns->ref == 0) {
	nvme_ns->bdev = NULL;

	if (!nvme_ns->populated) {
		pthread_mutex_unlock(&nvme_ns->ctrlr->mutex);

		nvme_bdev_ctrlr_destruct(nvme_ns->ctrlr);
@@ -1415,7 +1413,6 @@ nvme_bdev_create(struct nvme_bdev_ctrlr *nvme_bdev_ctrlr, struct nvme_bdev_ns *n
		return rc;
	}

	nvme_ns->ref++;
	nvme_ns->bdev = bdev;

	return 0;
@@ -1437,7 +1434,6 @@ nvme_ctrlr_populate_standard_namespace(struct nvme_bdev_ctrlr *nvme_bdev_ctrlr,
	}

	nvme_ns->ns = ns;
	nvme_ns->ref = 1;
	nvme_ns->populated = true;

	rc = nvme_bdev_create(nvme_bdev_ctrlr, nvme_ns);
+3 −7
Original line number Diff line number Diff line
@@ -215,13 +215,11 @@ bdev_ocssd_destruct(void *ctx)
	struct nvme_bdev *nvme_bdev = &ocssd_bdev->nvme_bdev;
	struct nvme_bdev_ns *nvme_ns = nvme_bdev->nvme_ns;

	nvme_ns->bdev = NULL;

	pthread_mutex_lock(&nvme_ns->ctrlr->mutex);

	assert(nvme_ns->ref > 0);
	nvme_ns->ref--;
	if (nvme_ns->ref == 0) {
	nvme_ns->bdev = NULL;

	if (!nvme_ns->populated) {
		pthread_mutex_unlock(&nvme_ns->ctrlr->mutex);

		nvme_bdev_ctrlr_destruct(nvme_ns->ctrlr);
@@ -1115,7 +1113,6 @@ bdev_ocssd_register_bdev(void *ctx)

	rc = spdk_bdev_register(&nvme_bdev->disk);
	if (spdk_likely(rc == 0)) {
		nvme_ns->ref++;
		nvme_ns->bdev = nvme_bdev;
	} else {
		SPDK_ERRLOG("Failed to register bdev %s\n", nvme_bdev->disk.name);
@@ -1456,7 +1453,6 @@ bdev_ocssd_populate_namespace(struct nvme_bdev_ctrlr *nvme_bdev_ctrlr,

	nvme_ns->type_ctx = ocssd_ns;
	nvme_ns->ns = ns;
	nvme_ns->ref = 1;
	nvme_ns->populated = true;
	ctx->nvme_ctx = nvme_ctx;
	ctx->nvme_ns = nvme_ns;
+1 −3
Original line number Diff line number Diff line
@@ -197,9 +197,7 @@ nvme_ctrlr_depopulate_namespace_done(struct nvme_bdev_ns *nvme_ns)

	nvme_ns->populated = false;

	assert(nvme_ns->ref > 0);
	nvme_ns->ref--;
	if (nvme_ns->ref > 0) {
	if (nvme_ns->bdev != NULL) {
		pthread_mutex_unlock(&nvme_bdev_ctrlr->mutex);
		return;
	}
+0 −1
Original line number Diff line number Diff line
@@ -62,7 +62,6 @@ struct nvme_bdev_ns {
	 *  or when a namespace becomes inactive.
	 */
	bool			populated;
	int			ref;
	struct spdk_nvme_ns	*ns;
	struct nvme_bdev_ctrlr	*ctrlr;
	struct nvme_bdev	*bdev;