From a410fb443878edacecf275ab79c0d536f34481c1 Mon Sep 17 00:00:00 2001 From: Jacek Kalwas Date: Fri, 2 Jul 2021 08:04:35 -0400 Subject: [PATCH] nvme: introduce function to get nguid Signed-off-by: Jacek Kalwas Change-Id: Ida07eca2e3cbc390d8ee481f63b20f5715a53631 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/8626 Community-CI: Mellanox Build Bot Community-CI: Broadcom CI Tested-by: SPDK CI Jenkins Reviewed-by: Ben Walker Reviewed-by: Shuhei Matsumoto --- include/spdk/nvme.h | 9 +++++++++ lib/nvme/nvme_ns.c | 16 ++++++++++++++++ lib/nvme/spdk_nvme.map | 1 + 3 files changed, 26 insertions(+) diff --git a/include/spdk/nvme.h b/include/spdk/nvme.h index 1f4e0c6fe..db9797d1b 100644 --- a/include/spdk/nvme.h +++ b/include/spdk/nvme.h @@ -2639,6 +2639,15 @@ enum spdk_nvme_dealloc_logical_block_read_value spdk_nvme_ns_get_dealloc_logical */ uint32_t spdk_nvme_ns_get_optimal_io_boundary(struct spdk_nvme_ns *ns); +/** + * Get the NGUID for the given namespace. + * + * \param ns Namespace to query. + * + * \return a pointer to namespace NGUID, or NULL if ns does not have a NGUID. + */ +const uint8_t *spdk_nvme_ns_get_nguid(const struct spdk_nvme_ns *ns); + /** * Get the UUID for the given namespace. * diff --git a/lib/nvme/nvme_ns.c b/lib/nvme/nvme_ns.c index 21bab4b74..c4dd2b279 100644 --- a/lib/nvme/nvme_ns.c +++ b/lib/nvme/nvme_ns.c @@ -406,6 +406,22 @@ nvme_ns_find_id_desc(const struct spdk_nvme_ns *ns, enum spdk_nvme_nidt type, si return NULL; } +const uint8_t * +spdk_nvme_ns_get_nguid(const struct spdk_nvme_ns *ns) +{ + const uint8_t *nguid; + size_t size; + + nguid = nvme_ns_find_id_desc(ns, SPDK_NVME_NIDT_NGUID, &size); + if (nguid && size != sizeof(((struct spdk_nvme_ns_data *)0)->nguid)) { + SPDK_WARNLOG("Invalid NIDT_NGUID descriptor length reported: %zu (expected: %zu)\n", + size, sizeof(((struct spdk_nvme_ns_data *)0)->nguid)); + return NULL; + } + + return nguid; +} + const struct spdk_uuid * spdk_nvme_ns_get_uuid(const struct spdk_nvme_ns *ns) { diff --git a/lib/nvme/spdk_nvme.map b/lib/nvme/spdk_nvme.map index eb4feddbd..0b5bc5cb0 100644 --- a/lib/nvme/spdk_nvme.map +++ b/lib/nvme/spdk_nvme.map @@ -124,6 +124,7 @@ spdk_nvme_ns_supports_compare; spdk_nvme_ns_get_dealloc_logical_block_read_value; spdk_nvme_ns_get_optimal_io_boundary; + spdk_nvme_ns_get_nguid; spdk_nvme_ns_get_uuid; spdk_nvme_ns_get_csi; spdk_nvme_ns_get_flags;