diff --git a/include/spdk/nvme.h b/include/spdk/nvme.h index dce8f96a3..a52596655 100644 --- a/include/spdk/nvme.h +++ b/include/spdk/nvme.h @@ -3750,6 +3750,14 @@ void spdk_nvme_qpair_remove_cmd_error_injection(struct spdk_nvme_ctrlr *ctrlr, */ const char *spdk_nvme_cpl_get_status_string(const struct spdk_nvme_status *status); +/** + * \brief Given NVMe status, return ASCII string for the type of that error. + * + * \param status Status from NVMe completion queue element. + * \return Returns status type as an ASCII string. + */ +const char *spdk_nvme_cpl_get_status_type_string(const struct spdk_nvme_status *status); + /** * \brief Prints (SPDK_NOTICELOG) the contents of an NVMe submission queue entry (command). * diff --git a/lib/nvme/Makefile b/lib/nvme/Makefile index cc8ebe83a..4dca296bb 100644 --- a/lib/nvme/Makefile +++ b/lib/nvme/Makefile @@ -7,7 +7,7 @@ SPDK_ROOT_DIR := $(abspath $(CURDIR)/../..) include $(SPDK_ROOT_DIR)/mk/spdk.common.mk SO_VER := 9 -SO_MINOR := 0 +SO_MINOR := 1 C_SRCS = nvme_ctrlr_cmd.c nvme_ctrlr.c nvme_fabric.c nvme_ns_cmd.c \ nvme_ns.c nvme_pcie_common.c nvme_pcie.c nvme_qpair.c nvme.c \ diff --git a/lib/nvme/nvme_qpair.c b/lib/nvme/nvme_qpair.c index fb549e8bf..d7b4e3cc4 100644 --- a/lib/nvme/nvme_qpair.c +++ b/lib/nvme/nvme_qpair.c @@ -279,6 +279,15 @@ spdk_nvme_qpair_print_command(struct spdk_nvme_qpair *qpair, struct spdk_nvme_cm spdk_nvme_print_command(qpair->id, cmd); } +static const struct nvme_string status_type[] = { + { SPDK_NVME_SCT_GENERIC, "GENERIC" }, + { SPDK_NVME_SCT_COMMAND_SPECIFIC, "COMMAND SPECIFIC" }, + { SPDK_NVME_SCT_MEDIA_ERROR, "MEDIA ERROR" }, + { SPDK_NVME_SCT_PATH, "PATH" }, + { SPDK_NVME_SCT_VENDOR_SPECIFIC, "VENDOR SPECIFIC" }, + { 0xFFFF, "RESERVED" }, +}; + static const struct nvme_string generic_status[] = { { SPDK_NVME_SC_SUCCESS, "SUCCESS" }, { SPDK_NVME_SC_INVALID_OPCODE, "INVALID OPCODE" }, @@ -445,6 +454,12 @@ spdk_nvme_cpl_get_status_string(const struct spdk_nvme_status *status) return nvme_get_string(entry, status->sc); } +const char * +spdk_nvme_cpl_get_status_type_string(const struct spdk_nvme_status *status) +{ + return nvme_get_string(status_type, status->sct); +} + void spdk_nvme_print_completion(uint16_t qid, struct spdk_nvme_cpl *cpl) { diff --git a/lib/nvme/spdk_nvme.map b/lib/nvme/spdk_nvme.map index c4bc133bb..c29ab50e9 100644 --- a/lib/nvme/spdk_nvme.map +++ b/lib/nvme/spdk_nvme.map @@ -183,6 +183,7 @@ spdk_nvme_print_completion; spdk_nvme_cpl_get_status_string; + spdk_nvme_cpl_get_status_type_string; spdk_nvme_rdma_init_hooks;