nvme: make the completion status string accessible from external applications

Signed-off-by: kreuzerkrieg <kreuzerkrieg@gmail.com>
Change-Id: Ifdcf7ab7ce7e7449a33d52f8308f537b0e26a238
Reviewed-on: https://review.gerrithub.io/c/444519
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
kreuzerkrieg 2019-02-14 09:42:45 +02:00 committed by Jim Harris
parent 53e25260df
commit 64faa14d6e
3 changed files with 22 additions and 11 deletions

View File

@ -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);

View File

@ -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);
}

View File

@ -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