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: Shuhei 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: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Paul Luse <paul.e.luse@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-by: Aleksey Marchuk <alexeymar@mellanox.com>
This commit is contained in:
Shuhei Matsumoto 2021-03-30 00:02:59 +09:00 committed by Jim Harris
parent 2bed9983e2
commit 68a8502f1c
4 changed files with 7 additions and 18 deletions

View File

@ -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);

View File

@ -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;

View File

@ -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;
}

View File

@ -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;