From 583fa214a31e8570236dc52bd29be6e8fbc1b1f2 Mon Sep 17 00:00:00 2001 From: Shuhei Matsumoto Date: Wed, 23 Sep 2020 03:26:26 +0900 Subject: [PATCH] lib/nvme: Add two public APIs to get ANA group ID and ANA state of the namespace Add spdk_nvme_ns_get_ana_group_id() and spdk_nvme_ns_get_ana_state() to getthe ANA group ID and the ANA state of the given namespace, respectively. Signed-off-by: Shuhei Matsumoto Change-Id: Id5f1f7ee488a1eb2a7a77f9986a3bb89146628e0 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/4354 Tested-by: SPDK CI Jenkins Reviewed-by: Aleksey Marchuk Reviewed-by: Monica Kenguva Reviewed-by: Ben Walker --- include/spdk/nvme.h | 30 ++++++++++++++++++++++++++++++ lib/nvme/nvme_ns.c | 11 +++++++++++ lib/nvme/spdk_nvme.map | 2 ++ 3 files changed, 43 insertions(+) diff --git a/include/spdk/nvme.h b/include/spdk/nvme.h index 30d7360e2..f2ed4189c 100644 --- a/include/spdk/nvme.h +++ b/include/spdk/nvme.h @@ -2334,6 +2334,36 @@ enum spdk_nvme_ns_flags { */ uint32_t spdk_nvme_ns_get_flags(struct spdk_nvme_ns *ns); +/** + * Get the ANA group ID for the given namespace. + * + * This function should be called only if spdk_nvme_ctrlr_is_log_page_supported() returns + * true for the controller and log page ID SPDK_NVME_LOG_ASYMMETRIC_NAMESPACE_ACCESS. + * + * This function is thread safe and can be called at any point while the controller + * is attached to the SPDK NVMe driver. + * + * \param ns Namespace to query. + * + * \return the ANA group ID for the given namespace. + */ +uint32_t spdk_nvme_ns_get_ana_group_id(const struct spdk_nvme_ns *ns); + +/** + * Get the ANA state for the given namespace. + * + * This function should be called only if spdk_nvme_ctrlr_is_log_page_supported() returns + * true for the controller and log page ID SPDK_NVME_LOG_ASYMMETRIC_NAMESPACE_ACCESS. + * + * This function is thread safe and can be called at any point while the controller + * is attached to the SPDK NVMe driver. + * + * \param ns Namespace to query. + * + * \return the ANA state for the given namespace. + */ +enum spdk_nvme_ana_state spdk_nvme_ns_get_ana_state(const struct spdk_nvme_ns *ns); + /** * Restart the SGL walk to the specified offset when the command has scattered payloads. * diff --git a/lib/nvme/nvme_ns.c b/lib/nvme/nvme_ns.c index e206b51d5..19008bcff 100644 --- a/lib/nvme/nvme_ns.c +++ b/lib/nvme/nvme_ns.c @@ -397,6 +397,17 @@ spdk_nvme_ns_get_csi(const struct spdk_nvme_ns *ns) { return ns->csi; } +uint32_t +spdk_nvme_ns_get_ana_group_id(const struct spdk_nvme_ns *ns) +{ + return ns->ana_group_id; +} + +enum spdk_nvme_ana_state +spdk_nvme_ns_get_ana_state(const struct spdk_nvme_ns *ns) { + return ns->ana_state; +} + int nvme_ns_construct(struct spdk_nvme_ns *ns, uint32_t id, struct spdk_nvme_ctrlr *ctrlr) { diff --git a/lib/nvme/spdk_nvme.map b/lib/nvme/spdk_nvme.map index b110f7f30..08f98abe9 100644 --- a/lib/nvme/spdk_nvme.map +++ b/lib/nvme/spdk_nvme.map @@ -111,6 +111,8 @@ spdk_nvme_ns_get_uuid; spdk_nvme_ns_get_csi; spdk_nvme_ns_get_flags; + spdk_nvme_ns_get_ana_group_id; + spdk_nvme_ns_get_ana_state; spdk_nvme_ns_cmd_write; spdk_nvme_ns_cmd_writev;