Commit d89a5c67 authored by Weiwen Hu's avatar Weiwen Hu Committed by Keith Busch

nvme: fix status magic numbers

Replaced some magic numbers about SC and SCT with enum and macro.
Signed-off-by: default avatarWeiwen Hu <huweiwen@linux.alibaba.com>
Reviewed-by: default avatarSagi Grimberg <sagi@grimberg.me>
Reviewed-by: default avatarChaitanya Kulkarni <kch@nvidia.com>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarKeith Busch <kbusch@kernel.org>
parent 22f19a58
...@@ -173,7 +173,7 @@ static const char * const nvme_statuses[] = { ...@@ -173,7 +173,7 @@ static const char * const nvme_statuses[] = {
const char *nvme_get_error_status_str(u16 status) const char *nvme_get_error_status_str(u16 status)
{ {
status &= 0x7ff; status &= NVME_SCT_SC_MASK;
if (status < ARRAY_SIZE(nvme_statuses) && nvme_statuses[status]) if (status < ARRAY_SIZE(nvme_statuses) && nvme_statuses[status])
return nvme_statuses[status]; return nvme_statuses[status];
return "Unknown"; return "Unknown";
......
...@@ -261,7 +261,7 @@ void nvme_delete_ctrl_sync(struct nvme_ctrl *ctrl) ...@@ -261,7 +261,7 @@ void nvme_delete_ctrl_sync(struct nvme_ctrl *ctrl)
static blk_status_t nvme_error_status(u16 status) static blk_status_t nvme_error_status(u16 status)
{ {
switch (status & 0x7ff) { switch (status & NVME_SCT_SC_MASK) {
case NVME_SC_SUCCESS: case NVME_SC_SUCCESS:
return BLK_STS_OK; return BLK_STS_OK;
case NVME_SC_CAP_EXCEEDED: case NVME_SC_CAP_EXCEEDED:
...@@ -329,8 +329,8 @@ static void nvme_log_error(struct request *req) ...@@ -329,8 +329,8 @@ static void nvme_log_error(struct request *req)
nvme_sect_to_lba(ns->head, blk_rq_pos(req)), nvme_sect_to_lba(ns->head, blk_rq_pos(req)),
blk_rq_bytes(req) >> ns->head->lba_shift, blk_rq_bytes(req) >> ns->head->lba_shift,
nvme_get_error_status_str(nr->status), nvme_get_error_status_str(nr->status),
nr->status >> 8 & 7, /* Status Code Type */ NVME_SCT(nr->status), /* Status Code Type */
nr->status & 0xff, /* Status Code */ nr->status & NVME_SC_MASK, /* Status Code */
nr->status & NVME_SC_MORE ? "MORE " : "", nr->status & NVME_SC_MORE ? "MORE " : "",
nr->status & NVME_SC_DNR ? "DNR " : ""); nr->status & NVME_SC_DNR ? "DNR " : "");
return; return;
...@@ -341,8 +341,8 @@ static void nvme_log_error(struct request *req) ...@@ -341,8 +341,8 @@ static void nvme_log_error(struct request *req)
nvme_get_admin_opcode_str(nr->cmd->common.opcode), nvme_get_admin_opcode_str(nr->cmd->common.opcode),
nr->cmd->common.opcode, nr->cmd->common.opcode,
nvme_get_error_status_str(nr->status), nvme_get_error_status_str(nr->status),
nr->status >> 8 & 7, /* Status Code Type */ NVME_SCT(nr->status), /* Status Code Type */
nr->status & 0xff, /* Status Code */ nr->status & NVME_SC_MASK, /* Status Code */
nr->status & NVME_SC_MORE ? "MORE " : "", nr->status & NVME_SC_MORE ? "MORE " : "",
nr->status & NVME_SC_DNR ? "DNR " : ""); nr->status & NVME_SC_DNR ? "DNR " : "");
} }
...@@ -359,8 +359,8 @@ static void nvme_log_err_passthru(struct request *req) ...@@ -359,8 +359,8 @@ static void nvme_log_err_passthru(struct request *req)
nvme_get_admin_opcode_str(nr->cmd->common.opcode), nvme_get_admin_opcode_str(nr->cmd->common.opcode),
nr->cmd->common.opcode, nr->cmd->common.opcode,
nvme_get_error_status_str(nr->status), nvme_get_error_status_str(nr->status),
nr->status >> 8 & 7, /* Status Code Type */ NVME_SCT(nr->status), /* Status Code Type */
nr->status & 0xff, /* Status Code */ nr->status & NVME_SC_MASK, /* Status Code */
nr->status & NVME_SC_MORE ? "MORE " : "", nr->status & NVME_SC_MORE ? "MORE " : "",
nr->status & NVME_SC_DNR ? "DNR " : "", nr->status & NVME_SC_DNR ? "DNR " : "",
nr->cmd->common.cdw10, nr->cmd->common.cdw10,
...@@ -388,7 +388,7 @@ static inline enum nvme_disposition nvme_decide_disposition(struct request *req) ...@@ -388,7 +388,7 @@ static inline enum nvme_disposition nvme_decide_disposition(struct request *req)
nvme_req(req)->retries >= nvme_max_retries) nvme_req(req)->retries >= nvme_max_retries)
return COMPLETE; return COMPLETE;
if ((nvme_req(req)->status & 0x7ff) == NVME_SC_AUTH_REQUIRED) if ((nvme_req(req)->status & NVME_SCT_SC_MASK) == NVME_SC_AUTH_REQUIRED)
return AUTHENTICATE; return AUTHENTICATE;
if (req->cmd_flags & REQ_NVME_MPATH) { if (req->cmd_flags & REQ_NVME_MPATH) {
...@@ -1256,7 +1256,7 @@ EXPORT_SYMBOL_NS_GPL(nvme_passthru_end, NVME_TARGET_PASSTHRU); ...@@ -1256,7 +1256,7 @@ EXPORT_SYMBOL_NS_GPL(nvme_passthru_end, NVME_TARGET_PASSTHRU);
/* /*
* Recommended frequency for KATO commands per NVMe 1.4 section 7.12.1: * Recommended frequency for KATO commands per NVMe 1.4 section 7.12.1:
* *
* The host should send Keep Alive commands at half of the Keep Alive Timeout * The host should send Keep Alive commands at half of the Keep Alive Timeout
* accounting for transport roundtrip times [..]. * accounting for transport roundtrip times [..].
*/ */
......
...@@ -83,7 +83,7 @@ void nvme_mpath_start_freeze(struct nvme_subsystem *subsys) ...@@ -83,7 +83,7 @@ void nvme_mpath_start_freeze(struct nvme_subsystem *subsys)
void nvme_failover_req(struct request *req) void nvme_failover_req(struct request *req)
{ {
struct nvme_ns *ns = req->q->queuedata; struct nvme_ns *ns = req->q->queuedata;
u16 status = nvme_req(req)->status & 0x7ff; u16 status = nvme_req(req)->status & NVME_SCT_SC_MASK;
unsigned long flags; unsigned long flags;
struct bio *bio; struct bio *bio;
......
...@@ -689,7 +689,7 @@ static inline u32 nvme_bytes_to_numd(size_t len) ...@@ -689,7 +689,7 @@ static inline u32 nvme_bytes_to_numd(size_t len)
static inline bool nvme_is_ana_error(u16 status) static inline bool nvme_is_ana_error(u16 status)
{ {
switch (status & 0x7ff) { switch (status & NVME_SCT_SC_MASK) {
case NVME_SC_ANA_TRANSITION: case NVME_SC_ANA_TRANSITION:
case NVME_SC_ANA_INACCESSIBLE: case NVME_SC_ANA_INACCESSIBLE:
case NVME_SC_ANA_PERSISTENT_LOSS: case NVME_SC_ANA_PERSISTENT_LOSS:
...@@ -702,7 +702,7 @@ static inline bool nvme_is_ana_error(u16 status) ...@@ -702,7 +702,7 @@ static inline bool nvme_is_ana_error(u16 status)
static inline bool nvme_is_path_error(u16 status) static inline bool nvme_is_path_error(u16 status)
{ {
/* check for a status code type of 'path related status' */ /* check for a status code type of 'path related status' */
return (status & 0x700) == 0x300; return (status & NVME_SCT_MASK) == NVME_SCT_PATH;
} }
/* /*
......
...@@ -77,7 +77,7 @@ static int nvme_status_to_pr_err(int status) ...@@ -77,7 +77,7 @@ static int nvme_status_to_pr_err(int status)
if (nvme_is_path_error(status)) if (nvme_is_path_error(status))
return PR_STS_PATH_FAILED; return PR_STS_PATH_FAILED;
switch (status & 0x7ff) { switch (status & NVME_SCT_SC_MASK) {
case NVME_SC_SUCCESS: case NVME_SC_SUCCESS:
return PR_STS_SUCCESS; return PR_STS_SUCCESS;
case NVME_SC_RESERVATION_CONFLICT: case NVME_SC_RESERVATION_CONFLICT:
......
...@@ -1846,6 +1846,7 @@ enum { ...@@ -1846,6 +1846,7 @@ enum {
/* /*
* Generic Command Status: * Generic Command Status:
*/ */
NVME_SCT_GENERIC = 0x0,
NVME_SC_SUCCESS = 0x0, NVME_SC_SUCCESS = 0x0,
NVME_SC_INVALID_OPCODE = 0x1, NVME_SC_INVALID_OPCODE = 0x1,
NVME_SC_INVALID_FIELD = 0x2, NVME_SC_INVALID_FIELD = 0x2,
...@@ -1893,6 +1894,7 @@ enum { ...@@ -1893,6 +1894,7 @@ enum {
/* /*
* Command Specific Status: * Command Specific Status:
*/ */
NVME_SCT_COMMAND_SPECIFIC = 0x100,
NVME_SC_CQ_INVALID = 0x100, NVME_SC_CQ_INVALID = 0x100,
NVME_SC_QID_INVALID = 0x101, NVME_SC_QID_INVALID = 0x101,
NVME_SC_QUEUE_SIZE = 0x102, NVME_SC_QUEUE_SIZE = 0x102,
...@@ -1966,6 +1968,7 @@ enum { ...@@ -1966,6 +1968,7 @@ enum {
/* /*
* Media and Data Integrity Errors: * Media and Data Integrity Errors:
*/ */
NVME_SCT_MEDIA_ERROR = 0x200,
NVME_SC_WRITE_FAULT = 0x280, NVME_SC_WRITE_FAULT = 0x280,
NVME_SC_READ_ERROR = 0x281, NVME_SC_READ_ERROR = 0x281,
NVME_SC_GUARD_CHECK = 0x282, NVME_SC_GUARD_CHECK = 0x282,
...@@ -1978,6 +1981,7 @@ enum { ...@@ -1978,6 +1981,7 @@ enum {
/* /*
* Path-related Errors: * Path-related Errors:
*/ */
NVME_SCT_PATH = 0x300,
NVME_SC_INTERNAL_PATH_ERROR = 0x300, NVME_SC_INTERNAL_PATH_ERROR = 0x300,
NVME_SC_ANA_PERSISTENT_LOSS = 0x301, NVME_SC_ANA_PERSISTENT_LOSS = 0x301,
NVME_SC_ANA_INACCESSIBLE = 0x302, NVME_SC_ANA_INACCESSIBLE = 0x302,
...@@ -1986,11 +1990,17 @@ enum { ...@@ -1986,11 +1990,17 @@ enum {
NVME_SC_HOST_PATH_ERROR = 0x370, NVME_SC_HOST_PATH_ERROR = 0x370,
NVME_SC_HOST_ABORTED_CMD = 0x371, NVME_SC_HOST_ABORTED_CMD = 0x371,
NVME_SC_CRD = 0x1800, NVME_SC_MASK = 0x00ff, /* Status Code */
NVME_SCT_MASK = 0x0700, /* Status Code Type */
NVME_SCT_SC_MASK = NVME_SCT_MASK | NVME_SC_MASK,
NVME_SC_CRD = 0x1800, /* Command Retry Delayed */
NVME_SC_MORE = 0x2000, NVME_SC_MORE = 0x2000,
NVME_SC_DNR = 0x4000, NVME_SC_DNR = 0x4000, /* Do Not Retry */
}; };
#define NVME_SCT(status) ((status) >> 8 & 7)
struct nvme_completion { struct nvme_completion {
/* /*
* Used by Admin and Fabrics commands to return data: * Used by Admin and Fabrics commands to return data:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment