From f26d6c73e1e076c509e7b4c069f58eeb5a15ba93 Mon Sep 17 00:00:00 2001 From: Shuhei Matsumoto Date: Mon, 29 Mar 2021 23:49:25 +0900 Subject: [PATCH] bdev/nvme: Set nvme_ns->populated to true just after nvme_ns is available A few patches including this patch will remove nvme_ns->ref by nvme_ns->populated and nvme_ns->bdev and remove nvme_ns->ref. In this patch, set nvme_ns->populated to true when nvme_ns->ref is incremented, i.e., nvme_ns is available. nvme_ctrlr_populate_namespace_done() clears nvme_ns->populated if creating bdev failed by memset(). And add assert to nvme_ctrlr_depopulate_namespace_done() to ensure nvme_ns->populated is false when nvme_ctrlr_depopulated_namespace_done() is called. Signed-off-by: Shuhei Matsumoto Change-Id: I536933abb516c0a29231149ab564dc8b84245b10 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/7096 Community-CI: Broadcom CI Community-CI: Mellanox Build Bot Tested-by: SPDK CI Jenkins Reviewed-by: Jim Harris Reviewed-by: Paul Luse Reviewed-by: Ben Walker Reviewed-by: Aleksey Marchuk --- module/bdev/nvme/bdev_nvme.c | 2 +- module/bdev/nvme/bdev_ocssd.c | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/module/bdev/nvme/bdev_nvme.c b/module/bdev/nvme/bdev_nvme.c index 979277a64..4eb949544 100644 --- a/module/bdev/nvme/bdev_nvme.c +++ b/module/bdev/nvme/bdev_nvme.c @@ -1438,6 +1438,7 @@ 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); done: @@ -1565,7 +1566,6 @@ nvme_ctrlr_populate_namespace_done(struct nvme_async_probe_ctx *ctx, assert(nvme_bdev_ctrlr != NULL); if (rc == 0) { - nvme_ns->populated = true; pthread_mutex_lock(&nvme_bdev_ctrlr->mutex); nvme_bdev_ctrlr->ref++; pthread_mutex_unlock(&nvme_bdev_ctrlr->mutex); diff --git a/module/bdev/nvme/bdev_ocssd.c b/module/bdev/nvme/bdev_ocssd.c index e4326dead..70de2fb6f 100644 --- a/module/bdev/nvme/bdev_ocssd.c +++ b/module/bdev/nvme/bdev_ocssd.c @@ -1455,6 +1455,7 @@ 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;