diff --git a/module/bdev/nvme/bdev_nvme.c b/module/bdev/nvme/bdev_nvme.c index 67115a029..cc8c0ed28 100644 --- a/module/bdev/nvme/bdev_nvme.c +++ b/module/bdev/nvme/bdev_nvme.c @@ -1716,11 +1716,11 @@ populate_namespaces_cb(struct nvme_async_probe_ctx *ctx, size_t count, int rc) } 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, - struct nvme_bdev_ctrlr **_nvme_bdev_ctrlr) +_nvme_bdev_ctrlr_create(struct spdk_nvme_ctrlr *ctrlr, + const char *name, + const struct spdk_nvme_transport_id *trid, + 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; @@ -1837,16 +1837,39 @@ err_init_mutex: return rc; } +static void +nvme_bdev_ctrlr_create(struct spdk_nvme_ctrlr *ctrlr, + const char *name, + const struct spdk_nvme_transport_id *trid, + uint32_t prchk_flags, + struct nvme_async_probe_ctx *ctx) +{ + struct nvme_bdev_ctrlr *nvme_bdev_ctrlr = NULL; + int rc; + + 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"); + goto err; + } + + nvme_ctrlr_populate_namespaces(nvme_bdev_ctrlr, ctx); + return; + +err: + if (ctx != NULL) { + populate_namespaces_cb(ctx, 0, rc); + } +} + static void attach_cb(void *cb_ctx, const struct spdk_nvme_transport_id *trid, struct spdk_nvme_ctrlr *ctrlr, const struct spdk_nvme_ctrlr_opts *opts) { - struct nvme_bdev_ctrlr *nvme_bdev_ctrlr; struct nvme_probe_ctx *ctx = cb_ctx; char *name = NULL; uint32_t prchk_flags = 0; size_t i; - int rc; if (ctx) { for (i = 0; i < ctx->count; i++) { @@ -1866,14 +1889,7 @@ attach_cb(void *cb_ctx, const struct spdk_nvme_transport_id *trid, SPDK_DEBUGLOG(bdev_nvme, "Attached to %s (%s)\n", trid->traddr, name); - 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; - } - - nvme_ctrlr_populate_namespaces(nvme_bdev_ctrlr, NULL); + nvme_bdev_ctrlr_create(ctrlr, name, trid, prchk_flags, NULL); free(name); } @@ -2193,21 +2209,12 @@ connect_attach_cb(void *cb_ctx, const struct spdk_nvme_transport_id *trid, rc = bdev_nvme_add_trid(nvme_bdev_ctrlr, ctrlr, &ctx->trid); spdk_nvme_detach(ctrlr); - goto exit; + + populate_namespaces_cb(ctx, 0, rc); + return; } - 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_ctrlr_populate_namespaces(nvme_bdev_ctrlr, ctx); - return; - -exit: - populate_namespaces_cb(ctx, 0, rc); + nvme_bdev_ctrlr_create(ctrlr, ctx->base_name, &ctx->trid, ctx->prchk_flags, ctx); } static int 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 3d2a7386a..d8ffd83ea 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 @@ -962,8 +962,7 @@ test_create_ctrlr(void) ut_init_trid(&trid); - rc = nvme_bdev_ctrlr_create(&ctrlr, "nvme0", &trid, 0, NULL); - CU_ASSERT(rc == 0); + nvme_bdev_ctrlr_create(&ctrlr, "nvme0", &trid, 0, NULL); CU_ASSERT(nvme_bdev_ctrlr_get_by_name("nvme0") != NULL); @@ -993,8 +992,9 @@ test_reset_ctrlr(void) set_thread(0); - rc = nvme_bdev_ctrlr_create(&ctrlr, "nvme0", &trid, 0, &nvme_bdev_ctrlr); - CU_ASSERT(rc == 0); + nvme_bdev_ctrlr_create(&ctrlr, "nvme0", &trid, 0, NULL); + + 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); @@ -1097,8 +1097,9 @@ test_race_between_reset_and_destruct_ctrlr(void) set_thread(0); - rc = nvme_bdev_ctrlr_create(&ctrlr, "nvme0", &trid, 0, &nvme_bdev_ctrlr); - CU_ASSERT(rc == 0); + nvme_bdev_ctrlr_create(&ctrlr, "nvme0", &trid, 0, NULL); + + 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); @@ -1172,8 +1173,9 @@ test_failover_ctrlr(void) set_thread(0); - rc = nvme_bdev_ctrlr_create(&ctrlr, "nvme0", &trid1, 0, &nvme_bdev_ctrlr); - CU_ASSERT(rc == 0); + nvme_bdev_ctrlr_create(&ctrlr, "nvme0", &trid1, 0, NULL); + + 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); @@ -1320,8 +1322,9 @@ test_pending_reset(void) set_thread(0); - rc = nvme_bdev_ctrlr_create(&ctrlr, "nvme0", &trid, 0, &nvme_bdev_ctrlr); - CU_ASSERT(rc == 0); + nvme_bdev_ctrlr_create(&ctrlr, "nvme0", &trid, 0, NULL); + + 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); @@ -1560,8 +1563,9 @@ test_reconnect_qpair(void) ut_init_trid(&trid); TAILQ_INIT(&ctrlr.active_io_qpairs); - rc = nvme_bdev_ctrlr_create(&ctrlr, "nvme0", &trid, 0, &nvme_bdev_ctrlr); - CU_ASSERT(rc == 0); + nvme_bdev_ctrlr_create(&ctrlr, "nvme0", &trid, 0, NULL); + + 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); @@ -1870,8 +1874,9 @@ test_remove_trid(void) set_thread(0); - rc = nvme_bdev_ctrlr_create(&ctrlr, "nvme0", &trid1, 0, &nvme_bdev_ctrlr); - CU_ASSERT(rc == 0); + nvme_bdev_ctrlr_create(&ctrlr, "nvme0", &trid1, 0, NULL); + + nvme_bdev_ctrlr = nvme_bdev_ctrlr_get_by_name("nvme0"); SPDK_CU_ASSERT_FATAL(nvme_bdev_ctrlr != NULL); rc = bdev_nvme_add_trid(nvme_bdev_ctrlr, &ctrlr, &trid2); @@ -1919,8 +1924,10 @@ test_remove_trid(void) CU_ASSERT(nvme_bdev_ctrlr_get_by_name("nvme0") == NULL); - rc = nvme_bdev_ctrlr_create(&ctrlr, "nvme0", &trid1, 0, &nvme_bdev_ctrlr); - CU_ASSERT(rc == 0); + nvme_bdev_ctrlr_create(&ctrlr, "nvme0", &trid1, 0, NULL); + + nvme_bdev_ctrlr = nvme_bdev_ctrlr_get_by_name("nvme0"); + SPDK_CU_ASSERT_FATAL(nvme_bdev_ctrlr != NULL); rc = bdev_nvme_add_trid(nvme_bdev_ctrlr, &ctrlr, &trid2); CU_ASSERT(rc == 0); @@ -2121,8 +2128,9 @@ test_get_io_qpair(void) set_thread(0); - rc = nvme_bdev_ctrlr_create(&ctrlr, "nvme0", &trid, 0, &nvme_bdev_ctrlr); - CU_ASSERT(rc == 0); + nvme_bdev_ctrlr_create(&ctrlr, "nvme0", &trid, 0, NULL); + + 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);