From e8cde795605107fcd5a43a76a70021e43168396d Mon Sep 17 00:00:00 2001 From: Shuhei Matsumoto Date: Tue, 2 Mar 2021 11:12:18 +0900 Subject: [PATCH] bdev/nvme: Return the created ctrlr directly from nvme_bdev_ctrlr_create() This also simplifies the code. Signed-off-by: Shuhei Matsumoto Change-Id: I32ca5e24779dc60e0ff4cf2610951cce55d06c75 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/6622 Community-CI: Broadcom CI Community-CI: Mellanox Build Bot Tested-by: SPDK CI Jenkins Reviewed-by: Aleksey Marchuk Reviewed-by: Jim Harris --- module/bdev/nvme/bdev_nvme.c | 22 +++++++------- .../lib/bdev/nvme/bdev_nvme.c/bdev_nvme_ut.c | 30 +++++++------------ 2 files changed, 22 insertions(+), 30 deletions(-) diff --git a/module/bdev/nvme/bdev_nvme.c b/module/bdev/nvme/bdev_nvme.c index 8a8afe360..7bfd94c98 100644 --- a/module/bdev/nvme/bdev_nvme.c +++ b/module/bdev/nvme/bdev_nvme.c @@ -1519,7 +1519,8 @@ static int nvme_bdev_ctrlr_create(struct spdk_nvme_ctrlr *ctrlr, const char *name, const struct spdk_nvme_transport_id *trid, - uint32_t prchk_flags) + uint32_t prchk_flags, + struct nvme_bdev_ctrlr **_nvme_bdev_ctrlr) { struct nvme_bdev_ctrlr *nvme_bdev_ctrlr; struct nvme_bdev_ctrlr_trid *trid_entry; @@ -1608,6 +1609,10 @@ nvme_bdev_ctrlr_create(struct spdk_nvme_ctrlr *ctrlr, } TAILQ_INSERT_HEAD(&nvme_bdev_ctrlr->trids, trid_entry, link); + + if (_nvme_bdev_ctrlr != NULL) { + *_nvme_bdev_ctrlr = nvme_bdev_ctrlr; + } return 0; err_init_ocssd: @@ -1634,6 +1639,7 @@ attach_cb(void *cb_ctx, const struct spdk_nvme_transport_id *trid, char *name = NULL; uint32_t prchk_flags = 0; size_t i; + int rc; if (ctx) { for (i = 0; i < ctx->count; i++) { @@ -1653,11 +1659,9 @@ attach_cb(void *cb_ctx, const struct spdk_nvme_transport_id *trid, SPDK_DEBUGLOG(bdev_nvme, "Attached to %s (%s)\n", trid->traddr, name); - nvme_bdev_ctrlr_create(ctrlr, name, trid, prchk_flags); - - nvme_bdev_ctrlr = nvme_bdev_ctrlr_get(trid); - if (!nvme_bdev_ctrlr) { - SPDK_ERRLOG("Failed to find new NVMe controller\n"); + rc = nvme_bdev_ctrlr_create(ctrlr, name, trid, prchk_flags, &nvme_bdev_ctrlr); + if (rc != 0) { + SPDK_ERRLOG("Failed to create new NVMe controller\n"); free(name); return; } @@ -1974,15 +1978,13 @@ connect_attach_cb(void *cb_ctx, const struct spdk_nvme_transport_id *trid, goto exit; } - rc = nvme_bdev_ctrlr_create(ctrlr, ctx->base_name, &ctx->trid, ctx->prchk_flags); + rc = nvme_bdev_ctrlr_create(ctrlr, ctx->base_name, &ctx->trid, ctx->prchk_flags, + &nvme_bdev_ctrlr); if (rc) { SPDK_ERRLOG("Failed to create new device\n"); goto exit; } - nvme_bdev_ctrlr = nvme_bdev_ctrlr_get(&ctx->trid); - assert(nvme_bdev_ctrlr != NULL); - nvme_ctrlr_populate_namespaces(nvme_bdev_ctrlr, ctx); return; diff --git a/test/unit/lib/bdev/nvme/bdev_nvme.c/bdev_nvme_ut.c b/test/unit/lib/bdev/nvme/bdev_nvme.c/bdev_nvme_ut.c index 46a501a1a..0e8874307 100644 --- a/test/unit/lib/bdev/nvme/bdev_nvme.c/bdev_nvme_ut.c +++ b/test/unit/lib/bdev/nvme/bdev_nvme.c/bdev_nvme_ut.c @@ -820,7 +820,7 @@ test_create_ctrlr(void) ut_init_trid(&trid); - rc = nvme_bdev_ctrlr_create(&ctrlr, "nvme0", &trid, 0); + rc = nvme_bdev_ctrlr_create(&ctrlr, "nvme0", &trid, 0, NULL); CU_ASSERT(rc == 0); CU_ASSERT(nvme_bdev_ctrlr_get_by_name("nvme0") != NULL); @@ -840,7 +840,7 @@ test_reset_ctrlr(void) { struct spdk_nvme_transport_id trid = {}; struct spdk_nvme_ctrlr ctrlr = {}; - struct nvme_bdev_ctrlr *nvme_bdev_ctrlr; + struct nvme_bdev_ctrlr *nvme_bdev_ctrlr = NULL; struct nvme_bdev_ctrlr_trid *curr_trid; struct spdk_io_channel *ch1, *ch2; struct nvme_io_channel *nvme_ch1, *nvme_ch2; @@ -851,10 +851,8 @@ test_reset_ctrlr(void) set_thread(0); - rc = nvme_bdev_ctrlr_create(&ctrlr, "nvme0", &trid, 0); + rc = nvme_bdev_ctrlr_create(&ctrlr, "nvme0", &trid, 0, &nvme_bdev_ctrlr); CU_ASSERT(rc == 0); - - nvme_bdev_ctrlr = nvme_bdev_ctrlr_get_by_name("nvme0"); SPDK_CU_ASSERT_FATAL(nvme_bdev_ctrlr != NULL); curr_trid = TAILQ_FIRST(&nvme_bdev_ctrlr->trids); @@ -957,10 +955,8 @@ test_race_between_reset_and_destruct_ctrlr(void) set_thread(0); - rc = nvme_bdev_ctrlr_create(&ctrlr, "nvme0", &trid, 0); + rc = nvme_bdev_ctrlr_create(&ctrlr, "nvme0", &trid, 0, &nvme_bdev_ctrlr); CU_ASSERT(rc == 0); - - nvme_bdev_ctrlr = nvme_bdev_ctrlr_get_by_name("nvme0"); SPDK_CU_ASSERT_FATAL(nvme_bdev_ctrlr != NULL); ch1 = spdk_get_io_channel(nvme_bdev_ctrlr); @@ -1019,7 +1015,7 @@ test_failover_ctrlr(void) { struct spdk_nvme_transport_id trid1 = {}, trid2 = {}; struct spdk_nvme_ctrlr ctrlr = {}; - struct nvme_bdev_ctrlr *nvme_bdev_ctrlr; + struct nvme_bdev_ctrlr *nvme_bdev_ctrlr = NULL; struct nvme_bdev_ctrlr_trid *curr_trid, *next_trid; struct spdk_io_channel *ch1, *ch2; int rc; @@ -1030,10 +1026,8 @@ test_failover_ctrlr(void) set_thread(0); - rc = nvme_bdev_ctrlr_create(&ctrlr, "nvme0", &trid1, 0); + rc = nvme_bdev_ctrlr_create(&ctrlr, "nvme0", &trid1, 0, &nvme_bdev_ctrlr); CU_ASSERT(rc == 0); - - nvme_bdev_ctrlr = nvme_bdev_ctrlr_get_by_name("nvme0"); SPDK_CU_ASSERT_FATAL(nvme_bdev_ctrlr != NULL); ch1 = spdk_get_io_channel(nvme_bdev_ctrlr); @@ -1158,7 +1152,7 @@ test_pending_reset(void) { struct spdk_nvme_transport_id trid = {}; struct spdk_nvme_ctrlr ctrlr = {}; - struct nvme_bdev_ctrlr *nvme_bdev_ctrlr; + struct nvme_bdev_ctrlr *nvme_bdev_ctrlr = NULL; struct spdk_bdev_io *first_bdev_io, *second_bdev_io; struct nvme_bdev_io *first_bio, *second_bio; struct spdk_io_channel *ch1, *ch2; @@ -1180,10 +1174,8 @@ test_pending_reset(void) set_thread(0); - rc = nvme_bdev_ctrlr_create(&ctrlr, "nvme0", &trid, 0); + rc = nvme_bdev_ctrlr_create(&ctrlr, "nvme0", &trid, 0, &nvme_bdev_ctrlr); CU_ASSERT(rc == 0); - - nvme_bdev_ctrlr = nvme_bdev_ctrlr_get_by_name("nvme0"); SPDK_CU_ASSERT_FATAL(nvme_bdev_ctrlr != NULL); ch1 = spdk_get_io_channel(nvme_bdev_ctrlr); @@ -1380,7 +1372,7 @@ test_reconnect_qpair(void) { struct spdk_nvme_transport_id trid = {}; struct spdk_nvme_ctrlr ctrlr = {}; - struct nvme_bdev_ctrlr *nvme_bdev_ctrlr; + struct nvme_bdev_ctrlr *nvme_bdev_ctrlr = NULL; struct spdk_io_channel *ch; struct nvme_io_channel *nvme_ch; int rc; @@ -1390,10 +1382,8 @@ test_reconnect_qpair(void) ut_init_trid(&trid); TAILQ_INIT(&ctrlr.active_io_qpairs); - rc = nvme_bdev_ctrlr_create(&ctrlr, "nvme0", &trid, 0); + rc = nvme_bdev_ctrlr_create(&ctrlr, "nvme0", &trid, 0, &nvme_bdev_ctrlr); CU_ASSERT(rc == 0); - - nvme_bdev_ctrlr = nvme_bdev_ctrlr_get_by_name("nvme0"); SPDK_CU_ASSERT_FATAL(nvme_bdev_ctrlr != NULL); ch = spdk_get_io_channel(nvme_bdev_ctrlr);