diff --git a/lib/nvme/nvme_rdma.c b/lib/nvme/nvme_rdma.c index 2062f2a96..6bd7ac696 100644 --- a/lib/nvme/nvme_rdma.c +++ b/lib/nvme/nvme_rdma.c @@ -1428,22 +1428,22 @@ nvme_rdma_ctrlr_scan(struct spdk_nvme_probe_ctx *probe_ctx, return -1; } + /* get the cdata info */ + rc = nvme_ctrlr_cmd_identify(discovery_ctrlr, SPDK_NVME_IDENTIFY_CTRLR, 0, 0, + &discovery_ctrlr->cdata, sizeof(discovery_ctrlr->cdata), + nvme_completion_poll_cb, &status); + if (rc != 0) { + SPDK_ERRLOG("Failed to identify cdata\n"); + return rc; + } + + if (spdk_nvme_wait_for_completion(discovery_ctrlr->adminq, &status)) { + SPDK_ERRLOG("nvme_identify_controller failed!\n"); + return -ENXIO; + } + /* Direct attach through spdk_nvme_connect() API */ if (direct_connect == true) { - /* get the cdata info */ - rc = nvme_ctrlr_cmd_identify(discovery_ctrlr, SPDK_NVME_IDENTIFY_CTRLR, 0, 0, - &discovery_ctrlr->cdata, sizeof(discovery_ctrlr->cdata), - nvme_completion_poll_cb, &status); - if (rc != 0) { - SPDK_ERRLOG("Failed to identify cdata\n"); - return rc; - } - - if (spdk_nvme_wait_for_completion(discovery_ctrlr->adminq, &status)) { - SPDK_ERRLOG("nvme_identify_controller failed!\n"); - return -ENXIO; - } - /* Set the ready state to skip the normal init process */ discovery_ctrlr->state = NVME_CTRLR_STATE_READY; nvme_ctrlr_connected(probe_ctx, discovery_ctrlr); diff --git a/lib/nvme/nvme_tcp.c b/lib/nvme/nvme_tcp.c index a7d7c181e..9ea3e3901 100644 --- a/lib/nvme/nvme_tcp.c +++ b/lib/nvme/nvme_tcp.c @@ -310,22 +310,26 @@ nvme_tcp_ctrlr_scan(struct spdk_nvme_probe_ctx *probe_ctx, return -1; } + /* get the cdata info */ + status.done = false; + rc = nvme_ctrlr_cmd_identify(discovery_ctrlr, SPDK_NVME_IDENTIFY_CTRLR, 0, 0, + &discovery_ctrlr->cdata, sizeof(discovery_ctrlr->cdata), + nvme_completion_poll_cb, &status); + if (rc != 0) { + SPDK_ERRLOG("Failed to identify cdata\n"); + return rc; + } + + while (status.done == false) { + spdk_nvme_qpair_process_completions(discovery_ctrlr->adminq, 0); + } + if (spdk_nvme_cpl_is_error(&status.cpl)) { + SPDK_ERRLOG("nvme_identify_controller failed!\n"); + return -ENXIO; + } + /* Direct attach through spdk_nvme_connect() API */ if (direct_connect == true) { - /* get the cdata info */ - status.done = false; - rc = nvme_ctrlr_cmd_identify(discovery_ctrlr, SPDK_NVME_IDENTIFY_CTRLR, 0, 0, - &discovery_ctrlr->cdata, sizeof(discovery_ctrlr->cdata), - nvme_completion_poll_cb, &status); - if (rc != 0) { - SPDK_ERRLOG("Failed to identify cdata\n"); - return rc; - } - - if (spdk_nvme_wait_for_completion(discovery_ctrlr->adminq, &status)) { - SPDK_ERRLOG("nvme_identify_controller failed!\n"); - return -ENXIO; - } /* Set the ready state to skip the normal init process */ discovery_ctrlr->state = NVME_CTRLR_STATE_READY; nvme_ctrlr_connected(probe_ctx, discovery_ctrlr);