From db853f051011b8e1ffa1b1bbacf9508cac892045 Mon Sep 17 00:00:00 2001 From: Shuhei Matsumoto Date: Tue, 27 Oct 2020 08:01:21 +0900 Subject: [PATCH] bdev/nvme: Consolidate nvme_ctrlr_populate_namespace_done() calls Signed-off-by: Shuhei Matsumoto Change-Id: I1190740d949eba78e1b9f8915a5b044d0cec1d9e Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/4919 Tested-by: SPDK CI Jenkins Reviewed-by: Paul Luse Reviewed-by: Jim Harris Reviewed-by: Aleksey Marchuk --- module/bdev/nvme/bdev_nvme.c | 19 ++++++++++--------- module/bdev/nvme/bdev_ocssd.c | 25 ++++++++++++++++--------- 2 files changed, 26 insertions(+), 18 deletions(-) diff --git a/module/bdev/nvme/bdev_nvme.c b/module/bdev/nvme/bdev_nvme.c index c6f2dd700..56fcd1311 100644 --- a/module/bdev/nvme/bdev_nvme.c +++ b/module/bdev/nvme/bdev_nvme.c @@ -1031,15 +1031,15 @@ nvme_ctrlr_populate_standard_namespace(struct nvme_bdev_ctrlr *nvme_bdev_ctrlr, ns = spdk_nvme_ctrlr_get_ns(ctrlr, nvme_ns->id); if (!ns) { SPDK_DEBUGLOG(bdev_nvme, "Invalid NS %d\n", nvme_ns->id); - nvme_ctrlr_populate_namespace_done(ctx, nvme_ns, -EINVAL); - return; + rc = -EINVAL; + goto done; } bdev = calloc(1, sizeof(*bdev)); if (!bdev) { SPDK_ERRLOG("bdev calloc() failed\n"); - nvme_ctrlr_populate_namespace_done(ctx, nvme_ns, -ENOMEM); - return; + rc = -ENOMEM; + goto done; } nvme_ns->ns = ns; @@ -1048,8 +1048,8 @@ nvme_ctrlr_populate_standard_namespace(struct nvme_bdev_ctrlr *nvme_bdev_ctrlr, bdev->disk.name = spdk_sprintf_alloc("%sn%d", nvme_bdev_ctrlr->name, spdk_nvme_ns_get_id(ns)); if (!bdev->disk.name) { free(bdev); - nvme_ctrlr_populate_namespace_done(ctx, nvme_ns, -ENOMEM); - return; + rc = -ENOMEM; + goto done; } bdev->disk.product_name = "NVMe disk"; @@ -1094,12 +1094,13 @@ nvme_ctrlr_populate_standard_namespace(struct nvme_bdev_ctrlr *nvme_bdev_ctrlr, if (rc) { free(bdev->disk.name); free(bdev); - nvme_ctrlr_populate_namespace_done(ctx, nvme_ns, rc); - return; + goto done; } nvme_bdev_attach_bdev_to_ns(nvme_ns, bdev); - nvme_ctrlr_populate_namespace_done(ctx, nvme_ns, 0); + +done: + nvme_ctrlr_populate_namespace_done(ctx, nvme_ns, rc); } static bool diff --git a/module/bdev/nvme/bdev_ocssd.c b/module/bdev/nvme/bdev_ocssd.c index 93779e737..c57402fdf 100644 --- a/module/bdev/nvme/bdev_ocssd.c +++ b/module/bdev/nvme/bdev_ocssd.c @@ -1344,10 +1344,13 @@ static void bdev_ocssd_geometry_cb(void *_ctx, const struct spdk_nvme_cpl *cpl) { struct bdev_ocssd_populate_ns_ctx *ctx = _ctx; + struct nvme_async_probe_ctx *nvme_ctx = ctx->nvme_ctx; struct nvme_bdev_ns *nvme_ns = ctx->nvme_ns; struct bdev_ocssd_ns *ocssd_ns = bdev_ocssd_get_ns_from_nvme(nvme_ns); int rc = 0; + free(ctx); + if (spdk_unlikely(spdk_nvme_cpl_is_error(cpl))) { SPDK_ERRLOG("Failed to retrieve geometry for namespace %"PRIu32"\n", nvme_ns->id); free(nvme_ns->type_ctx); @@ -1364,8 +1367,7 @@ bdev_ocssd_geometry_cb(void *_ctx, const struct spdk_nvme_cpl *cpl) ocssd_ns->chunk_notify_pending = true; } - nvme_ctrlr_populate_namespace_done(ctx->nvme_ctx, nvme_ns, rc); - free(ctx); + nvme_ctrlr_populate_namespace_done(nvme_ctx, nvme_ns, rc); } void @@ -1380,21 +1382,21 @@ bdev_ocssd_populate_namespace(struct nvme_bdev_ctrlr *nvme_bdev_ctrlr, ns = spdk_nvme_ctrlr_get_ns(nvme_bdev_ctrlr->ctrlr, nvme_ns->id); if (ns == NULL) { - nvme_ctrlr_populate_namespace_done(nvme_ctx, nvme_ns, -EINVAL); - return; + rc = -EINVAL; + goto error; } ctx = calloc(1, sizeof(*ctx)); if (ctx == NULL) { - nvme_ctrlr_populate_namespace_done(nvme_ctx, nvme_ns, -ENOMEM); - return; + rc = -ENOMEM; + goto error; } ocssd_ns = calloc(1, sizeof(*ocssd_ns)); if (ocssd_ns == NULL) { - nvme_ctrlr_populate_namespace_done(nvme_ctx, nvme_ns, -ENOMEM); free(ctx); - return; + rc = -ENOMEM; + goto error; } nvme_ns->type_ctx = ocssd_ns; @@ -1409,10 +1411,15 @@ bdev_ocssd_populate_namespace(struct nvme_bdev_ctrlr *nvme_bdev_ctrlr, if (spdk_unlikely(rc != 0)) { SPDK_ERRLOG("Failed to retrieve OC geometry: %s\n", spdk_strerror(-rc)); nvme_ns->type_ctx = NULL; - nvme_ctrlr_populate_namespace_done(nvme_ctx, nvme_ns, rc); free(ocssd_ns); free(ctx); + goto error; } + + return; + +error: + nvme_ctrlr_populate_namespace_done(nvme_ctx, nvme_ns, rc); } void