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:
parent
53e25260df
commit
64faa14d6e
@ -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);
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user