From 227d83e2fae5327b92a3c826c07d946a8af27f15 Mon Sep 17 00:00:00 2001 From: Shuhei Matsumoto Date: Wed, 10 Aug 2022 15:48:53 +0900 Subject: [PATCH] nvme: Use spdk_nvme_ctrlr_is_fabrics() to update ioccsz ioccsz is specific for fabrics. spdk_nvme_ctrlr_is_fabrics() returns true for custom fabrics transport. Hence we can use spdk_nvme_ctrlr_is_fabrics() safely in nvme_ctrlr_update_nvmf_ioccsz(). Before this change, in the unit tests, ctrlr->trid.trtype was set to zero at initialization. After this change, for most cases, spdk_nvme_ctrlr_is_fabrics() should return false for most cases. SPDK_NVME_TRANSPORT_PCIE did not work. Hence, initialize ctrlr->trid.trtype by SPDK_NVME_TRANSPORT_CUSTOM_FABRICS instead. Signed-off-by: Shuhei Matsumoto Change-Id: I4bedcab4a9f2876c1c9463ff10ad0966754f1713 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/13948 Reviewed-by: Jim Harris Reviewed-by: Ben Walker Reviewed-by: Aleksey Marchuk Community-CI: Mellanox Build Bot Tested-by: SPDK CI Jenkins --- lib/nvme/nvme_ctrlr.c | 4 +-- .../lib/nvme/nvme_ctrlr.c/nvme_ctrlr_ut.c | 28 ++++++++++++++++++- 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/lib/nvme/nvme_ctrlr.c b/lib/nvme/nvme_ctrlr.c index a031c04f3..a091b5d3c 100644 --- a/lib/nvme/nvme_ctrlr.c +++ b/lib/nvme/nvme_ctrlr.c @@ -2720,9 +2720,7 @@ nvme_ctrlr_identify_id_desc_namespaces(struct spdk_nvme_ctrlr *ctrlr) static void nvme_ctrlr_update_nvmf_ioccsz(struct spdk_nvme_ctrlr *ctrlr) { - if (ctrlr->trid.trtype == SPDK_NVME_TRANSPORT_RDMA || - ctrlr->trid.trtype == SPDK_NVME_TRANSPORT_TCP || - ctrlr->trid.trtype == SPDK_NVME_TRANSPORT_FC) { + if (spdk_nvme_ctrlr_is_fabrics(ctrlr)) { if (ctrlr->cdata.nvmf_specific.ioccsz < 4) { NVME_CTRLR_ERRLOG(ctrlr, "Incorrect IOCCSZ %u, the minimum value should be 4\n", ctrlr->cdata.nvmf_specific.ioccsz); diff --git a/test/unit/lib/nvme/nvme_ctrlr.c/nvme_ctrlr_ut.c b/test/unit/lib/nvme/nvme_ctrlr.c/nvme_ctrlr_ut.c index 0e05b62ce..9ba013890 100644 --- a/test/unit/lib/nvme/nvme_ctrlr.c/nvme_ctrlr_ut.c +++ b/test/unit/lib/nvme/nvme_ctrlr.c/nvme_ctrlr_ut.c @@ -679,7 +679,8 @@ spdk_pci_device_detach(struct spdk_pci_device *device) \ STAILQ_INIT(&adminq.free_req); \ STAILQ_INSERT_HEAD(&adminq.free_req, &req, stailq); \ - ctrlr.adminq = &adminq; + ctrlr.adminq = &adminq; \ + ctrlr.trid.trtype = SPDK_NVME_TRANSPORT_CUSTOM; static void test_nvme_ctrlr_init_en_1_rdy_0(void) @@ -2462,6 +2463,31 @@ test_nvme_ctrlr_init_set_nvmf_ioccsz(void) nvme_ctrlr_destruct(&ctrlr); + /* Check CUSTOM_FABRICS trtype, */ + SPDK_CU_ASSERT_FATAL(nvme_ctrlr_construct(&ctrlr) == 0); + ctrlr.trid.trtype = SPDK_NVME_TRANSPORT_CUSTOM_FABRICS; + + ctrlr.state = NVME_CTRLR_STATE_IDENTIFY; + CU_ASSERT(nvme_ctrlr_process_init(&ctrlr) == 0); + CU_ASSERT(ctrlr.state == NVME_CTRLR_STATE_CONFIGURE_AER); + CU_ASSERT(nvme_ctrlr_process_init(&ctrlr) == 0); + CU_ASSERT(ctrlr.state == NVME_CTRLR_STATE_SET_KEEP_ALIVE_TIMEOUT); + CU_ASSERT(nvme_ctrlr_process_init(&ctrlr) == 0); + CU_ASSERT(ctrlr.state == NVME_CTRLR_STATE_IDENTIFY_IOCS_SPECIFIC); + CU_ASSERT(nvme_ctrlr_process_init(&ctrlr) == 0); + CU_ASSERT(ctrlr.state == NVME_CTRLR_STATE_SET_NUM_QUEUES); + CU_ASSERT(nvme_ctrlr_process_init(&ctrlr) == 0); + CU_ASSERT(ctrlr.state == NVME_CTRLR_STATE_IDENTIFY_ACTIVE_NS); + CU_ASSERT(nvme_ctrlr_process_init(&ctrlr) == 0); + CU_ASSERT(ctrlr.state == NVME_CTRLR_STATE_IDENTIFY_NS); + + CU_ASSERT(ctrlr.ioccsz_bytes == 4096); + CU_ASSERT(ctrlr.icdoff == 1); + ctrlr.ioccsz_bytes = 0; + ctrlr.icdoff = 0; + + nvme_ctrlr_destruct(&ctrlr); + g_cdata = NULL; }