diff --git a/lib/nvme/nvme_ctrlr.c b/lib/nvme/nvme_ctrlr.c index 6a85745bf..8f6796b0c 100644 --- a/lib/nvme/nvme_ctrlr.c +++ b/lib/nvme/nvme_ctrlr.c @@ -1694,6 +1694,8 @@ nvme_ctrlr_identify_id_desc_async_done(void *arg, const struct spdk_nvme_cpl *cp return; } + nvme_ns_set_id_desc_list_data(ns); + /* move on to the next active NS */ nsid = spdk_nvme_ctrlr_get_next_active_ns(ctrlr, ns->id); ns = spdk_nvme_ctrlr_get_ns(ctrlr, nsid); diff --git a/lib/nvme/nvme_internal.h b/lib/nvme/nvme_internal.h index 71d5df69b..9f8aa4e1c 100644 --- a/lib/nvme/nvme_internal.h +++ b/lib/nvme/nvme_internal.h @@ -476,6 +476,9 @@ struct spdk_nvme_ns { uint32_t id; uint16_t flags; + /* Command Set Identifier */ + enum spdk_nvme_csi csi; + /* Namespace Identification Descriptor List (CNS = 03h) */ uint8_t id_desc_list[4096]; }; @@ -947,6 +950,7 @@ void nvme_qpair_resubmit_requests(struct spdk_nvme_qpair *qpair, uint32_t num_re int nvme_ctrlr_identify_active_ns(struct spdk_nvme_ctrlr *ctrlr); void nvme_ns_set_identify_data(struct spdk_nvme_ns *ns); +void nvme_ns_set_id_desc_list_data(struct spdk_nvme_ns *ns); int nvme_ns_construct(struct spdk_nvme_ns *ns, uint32_t id, struct spdk_nvme_ctrlr *ctrlr); void nvme_ns_destruct(struct spdk_nvme_ns *ns); diff --git a/lib/nvme/nvme_ns.c b/lib/nvme/nvme_ns.c index 61f500fe2..0d2c3bacf 100644 --- a/lib/nvme/nvme_ns.c +++ b/lib/nvme/nvme_ns.c @@ -189,6 +189,8 @@ nvme_ctrlr_identify_id_desc(struct spdk_nvme_ns *ns) free(status); } + nvme_ns_set_id_desc_list_data(ns); + return rc; } @@ -361,8 +363,8 @@ spdk_nvme_ns_get_uuid(const struct spdk_nvme_ns *ns) return uuid; } -enum spdk_nvme_csi -spdk_nvme_ns_get_csi(const struct spdk_nvme_ns *ns) { +static enum spdk_nvme_csi +nvme_ns_get_csi(const struct spdk_nvme_ns *ns) { const uint8_t *csi; size_t csi_size; @@ -384,6 +386,17 @@ spdk_nvme_ns_get_csi(const struct spdk_nvme_ns *ns) { return *csi; } +void +nvme_ns_set_id_desc_list_data(struct spdk_nvme_ns *ns) +{ + ns->csi = nvme_ns_get_csi(ns); +} + +enum spdk_nvme_csi +spdk_nvme_ns_get_csi(const struct spdk_nvme_ns *ns) { + return ns->csi; +} + int nvme_ns_construct(struct spdk_nvme_ns *ns, uint32_t id, struct spdk_nvme_ctrlr *ctrlr) { @@ -425,6 +438,7 @@ void nvme_ns_destruct(struct spdk_nvme_ns *ns) ns->sectors_per_max_io = 0; ns->sectors_per_stripe = 0; ns->flags = 0; + ns->csi = SPDK_NVME_CSI_NVM; } int nvme_ns_update(struct spdk_nvme_ns *ns) 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 20bd5d440..6264f33dd 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 @@ -67,6 +67,7 @@ DEFINE_STUB(nvme_ctrlr_cmd_set_host_id, int, (struct spdk_nvme_ctrlr *ctrlr, void *host_id, uint32_t host_id_size, spdk_nvme_cmd_cb cb_fn, void *cb_arg), 0); DEFINE_STUB_V(nvme_ns_set_identify_data, (struct spdk_nvme_ns *ns)); +DEFINE_STUB_V(nvme_ns_set_id_desc_list_data, (struct spdk_nvme_ns *ns)); DEFINE_STUB_V(nvme_qpair_abort_reqs, (struct spdk_nvme_qpair *qpair, uint32_t dnr)); DEFINE_STUB(spdk_nvme_poll_group_remove, int, (struct spdk_nvme_poll_group *group, struct spdk_nvme_qpair *qpair), 0); diff --git a/test/unit/lib/nvme/nvme_ns.c/nvme_ns_ut.c b/test/unit/lib/nvme/nvme_ns.c/nvme_ns_ut.c index 7a1b61668..954af366d 100644 --- a/test/unit/lib/nvme/nvme_ns.c/nvme_ns_ut.c +++ b/test/unit/lib/nvme/nvme_ns.c/nvme_ns_ut.c @@ -154,7 +154,7 @@ test_nvme_ns_csi(void) /* Empty list - SPDK_NVME_CSI_NVM should be returned */ nvme_ns_construct(&ns, id, &ctrlr); - csi = spdk_nvme_ns_get_csi(&ns); + csi = nvme_ns_get_csi(&ns); CU_ASSERT(csi == SPDK_NVME_CSI_NVM); nvme_ns_destruct(&ns); @@ -163,7 +163,7 @@ test_nvme_ns_csi(void) ns.id_desc_list[0] = 0x4; /* NIDT == CSI */ ns.id_desc_list[1] = 0x1; /* NIDL */ ns.id_desc_list[4] = 0x0; /* SPDK_NVME_CSI_NVM */ - csi = spdk_nvme_ns_get_csi(&ns); + csi = nvme_ns_get_csi(&ns); CU_ASSERT(csi == SPDK_NVME_CSI_NVM); nvme_ns_destruct(&ns); @@ -175,7 +175,7 @@ test_nvme_ns_csi(void) ns.id_desc_list[20] = 0x4; /* NIDT == CSI */ ns.id_desc_list[21] = 0x1; /* NIDL */ ns.id_desc_list[24] = 0x2; /* SPDK_NVME_CSI_ZNS */ - csi = spdk_nvme_ns_get_csi(&ns); + csi = nvme_ns_get_csi(&ns); CU_ASSERT(csi == SPDK_NVME_CSI_ZNS); nvme_ns_destruct(&ns); @@ -187,7 +187,7 @@ test_nvme_ns_csi(void) ns.id_desc_list[5] = 0x02; /* NIDT == NGUID */ ns.id_desc_list[6] = 0x10; /* NIDL */ memset(&ns.id_desc_list[9], 0xCC, 0x10); - csi = spdk_nvme_ns_get_csi(&ns); + csi = nvme_ns_get_csi(&ns); CU_ASSERT(csi == SPDK_NVME_CSI_KV); nvme_ns_destruct(&ns); }