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:
parent
2bed9983e2
commit
68a8502f1c
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user