diff --git a/lib/nvme/nvme_internal.h b/lib/nvme/nvme_internal.h index 7cd7cfa72d..1bdaa86977 100644 --- a/lib/nvme/nvme_internal.h +++ b/lib/nvme/nvme_internal.h @@ -959,6 +959,7 @@ uint64_t nvme_get_quirks(const struct spdk_pci_id *id); int nvme_robust_mutex_init_shared(pthread_mutex_t *mtx); int nvme_robust_mutex_init_recursive_shared(pthread_mutex_t *mtx); +const char *spdk_nvme_cpl_get_status_string(const struct spdk_nvme_status *status); bool nvme_completion_is_retry(const struct spdk_nvme_cpl *cpl); void nvme_qpair_print_command(struct spdk_nvme_qpair *qpair, struct spdk_nvme_cmd *cmd); void nvme_qpair_print_completion(struct spdk_nvme_qpair *qpair, struct spdk_nvme_cpl *cpl); diff --git a/lib/nvme/nvme_qpair.c b/lib/nvme/nvme_qpair.c index 9f585798ea..7475fc2efd 100644 --- a/lib/nvme/nvme_qpair.c +++ b/lib/nvme/nvme_qpair.c @@ -269,12 +269,12 @@ static const struct nvme_string path_status[] = { { 0xFFFF, "PATH ERROR" } }; -static const char * -get_status_string(uint16_t sct, uint16_t sc) +const char * +spdk_nvme_cpl_get_status_string(const struct spdk_nvme_status *status) { const struct nvme_string *entry; - switch (sct) { + switch (status->sct) { case SPDK_NVME_SCT_GENERIC: entry = generic_status; break; @@ -293,7 +293,7 @@ get_status_string(uint16_t sct, uint16_t sc) return "RESERVED"; } - return nvme_get_string(entry, sc); + return nvme_get_string(entry, status->sc); } void @@ -301,7 +301,7 @@ nvme_qpair_print_completion(struct spdk_nvme_qpair *qpair, struct spdk_nvme_cpl *cpl) { SPDK_NOTICELOG("%s (%02x/%02x) sqid:%d cid:%d cdw0:%x sqhd:%04x p:%x m:%x dnr:%x\n", - get_status_string(cpl->status.sct, cpl->status.sc), + spdk_nvme_cpl_get_status_string(&cpl->status), cpl->status.sct, cpl->status.sc, cpl->sqid, cpl->cid, cpl->cdw0, cpl->sqhd, cpl->status.p, cpl->status.m, cpl->status.dnr); } diff --git a/test/unit/lib/nvme/nvme_qpair.c/nvme_qpair_ut.c b/test/unit/lib/nvme/nvme_qpair.c/nvme_qpair_ut.c index c39ae79289..ec44d526b7 100644 --- a/test/unit/lib/nvme/nvme_qpair.c/nvme_qpair_ut.c +++ b/test/unit/lib/nvme/nvme_qpair.c/nvme_qpair_ut.c @@ -300,21 +300,31 @@ static void test_get_status_string(void) { const char *status_string; + struct spdk_nvme_status status; - status_string = get_status_string(SPDK_NVME_SCT_GENERIC, SPDK_NVME_SC_SUCCESS); + status.sct = SPDK_NVME_SCT_GENERIC; + status.sc = SPDK_NVME_SC_SUCCESS; + status_string = spdk_nvme_cpl_get_status_string(&status); CU_ASSERT(strcmp(status_string, "SUCCESS") == 0); - status_string = get_status_string(SPDK_NVME_SCT_COMMAND_SPECIFIC, - SPDK_NVME_SC_COMPLETION_QUEUE_INVALID); + status.sct = SPDK_NVME_SCT_COMMAND_SPECIFIC; + status.sc = SPDK_NVME_SC_COMPLETION_QUEUE_INVALID; + status_string = spdk_nvme_cpl_get_status_string(&status); CU_ASSERT(strcmp(status_string, "INVALID COMPLETION QUEUE") == 0); - status_string = get_status_string(SPDK_NVME_SCT_MEDIA_ERROR, SPDK_NVME_SC_UNRECOVERED_READ_ERROR); + status.sct = SPDK_NVME_SCT_MEDIA_ERROR; + status.sc = SPDK_NVME_SC_UNRECOVERED_READ_ERROR; + status_string = spdk_nvme_cpl_get_status_string(&status); CU_ASSERT(strcmp(status_string, "UNRECOVERED READ ERROR") == 0); - status_string = get_status_string(SPDK_NVME_SCT_VENDOR_SPECIFIC, 0); + status.sct = SPDK_NVME_SCT_VENDOR_SPECIFIC; + status.sc = 0; + status_string = spdk_nvme_cpl_get_status_string(&status); CU_ASSERT(strcmp(status_string, "VENDOR SPECIFIC") == 0); - status_string = get_status_string(100, 0); + status.sct = 0x4; + status.sc = 0; + status_string = spdk_nvme_cpl_get_status_string(&status); CU_ASSERT(strcmp(status_string, "RESERVED") == 0); } #endif