nvme: fix status magic numbers
authorWeiwen Hu <huweiwen@linux.alibaba.com>
Mon, 3 Jun 2024 12:57:00 +0000 (20:57 +0800)
committerKeith Busch <kbusch@kernel.org>
Mon, 24 Jun 2024 19:53:42 +0000 (12:53 -0700)
Replaced some magic numbers about SC and SCT with enum and macro.

Signed-off-by: Weiwen Hu <huweiwen@linux.alibaba.com>
Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
Reviewed-by: Chaitanya Kulkarni <kch@nvidia.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Keith Busch <kbusch@kernel.org>
drivers/nvme/host/constants.c
drivers/nvme/host/core.c
drivers/nvme/host/multipath.c
drivers/nvme/host/nvme.h
drivers/nvme/host/pr.c
include/linux/nvme.h

index 6f2ebb5..2b9e6cf 100644 (file)
@@ -173,7 +173,7 @@ static const char * const nvme_statuses[] = {
 
 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])
                return nvme_statuses[status];
        return "Unknown";
index 80d8460..744403b 100644 (file)
@@ -261,7 +261,7 @@ void nvme_delete_ctrl_sync(struct nvme_ctrl *ctrl)
 
 static blk_status_t nvme_error_status(u16 status)
 {
-       switch (status & 0x7ff) {
+       switch (status & NVME_SCT_SC_MASK) {
        case NVME_SC_SUCCESS:
                return BLK_STS_OK;
        case NVME_SC_CAP_EXCEEDED:
@@ -329,8 +329,8 @@ static void nvme_log_error(struct request *req)
                       nvme_sect_to_lba(ns->head, blk_rq_pos(req)),
                       blk_rq_bytes(req) >> ns->head->lba_shift,
                       nvme_get_error_status_str(nr->status),
-                      nr->status >> 8 & 7,     /* Status Code Type */
-                      nr->status & 0xff,       /* Status Code */
+                      NVME_SCT(nr->status),            /* Status Code Type */
+                      nr->status & NVME_SC_MASK,       /* Status Code */
                       nr->status & NVME_SC_MORE ? "MORE " : "",
                       nr->status & NVME_SC_DNR  ? "DNR "  : "");
                return;
@@ -341,8 +341,8 @@ static void nvme_log_error(struct request *req)
                           nvme_get_admin_opcode_str(nr->cmd->common.opcode),
                           nr->cmd->common.opcode,
                           nvme_get_error_status_str(nr->status),
-                          nr->status >> 8 & 7, /* Status Code Type */
-                          nr->status & 0xff,   /* Status Code */
+                          NVME_SCT(nr->status),        /* Status Code Type */
+                          nr->status & NVME_SC_MASK,   /* Status Code */
                           nr->status & NVME_SC_MORE ? "MORE " : "",
                           nr->status & NVME_SC_DNR  ? "DNR "  : "");
 }
@@ -359,8 +359,8 @@ static void nvme_log_err_passthru(struct request *req)
                     nvme_get_admin_opcode_str(nr->cmd->common.opcode),
                nr->cmd->common.opcode,
                nvme_get_error_status_str(nr->status),
-               nr->status >> 8 & 7,    /* Status Code Type */
-               nr->status & 0xff,      /* Status Code */
+               NVME_SCT(nr->status),           /* Status Code Type */
+               nr->status & NVME_SC_MASK,      /* Status Code */
                nr->status & NVME_SC_MORE ? "MORE " : "",
                nr->status & NVME_SC_DNR  ? "DNR "  : "",
                nr->cmd->common.cdw10,
@@ -388,7 +388,7 @@ static inline enum nvme_disposition nvme_decide_disposition(struct request *req)
            nvme_req(req)->retries >= nvme_max_retries)
                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;
 
        if (req->cmd_flags & REQ_NVME_MPATH) {
@@ -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:
- * 
+ *
  *   The host should send Keep Alive commands at half of the Keep Alive Timeout
  *   accounting for transport roundtrip times [..].
  */
index 4933194..8a4d0e3 100644 (file)
@@ -83,7 +83,7 @@ void nvme_mpath_start_freeze(struct nvme_subsystem *subsys)
 void nvme_failover_req(struct request *req)
 {
        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;
        struct bio *bio;
 
index 9693490..f3a7be4 100644 (file)
@@ -689,7 +689,7 @@ static inline u32 nvme_bytes_to_numd(size_t len)
 
 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_INACCESSIBLE:
        case NVME_SC_ANA_PERSISTENT_LOSS:
@@ -702,7 +702,7 @@ static inline bool nvme_is_ana_error(u16 status)
 static inline bool nvme_is_path_error(u16 status)
 {
        /* check for a status code type of 'path related status' */
-       return (status & 0x700) == 0x300;
+       return (status & NVME_SCT_MASK) == NVME_SCT_PATH;
 }
 
 /*
index a6db5ed..7347ddf 100644 (file)
@@ -77,7 +77,7 @@ static int nvme_status_to_pr_err(int status)
        if (nvme_is_path_error(status))
                return PR_STS_PATH_FAILED;
 
-       switch (status & 0x7ff) {
+       switch (status & NVME_SCT_SC_MASK) {
        case NVME_SC_SUCCESS:
                return PR_STS_SUCCESS;
        case NVME_SC_RESERVATION_CONFLICT:
index 4255732..c8d7fdd 100644 (file)
@@ -1846,6 +1846,7 @@ enum {
        /*
         * Generic Command Status:
         */
+       NVME_SCT_GENERIC                = 0x0,
        NVME_SC_SUCCESS                 = 0x0,
        NVME_SC_INVALID_OPCODE          = 0x1,
        NVME_SC_INVALID_FIELD           = 0x2,
@@ -1893,6 +1894,7 @@ enum {
        /*
         * Command Specific Status:
         */
+       NVME_SCT_COMMAND_SPECIFIC       = 0x100,
        NVME_SC_CQ_INVALID              = 0x100,
        NVME_SC_QID_INVALID             = 0x101,
        NVME_SC_QUEUE_SIZE              = 0x102,
@@ -1966,6 +1968,7 @@ enum {
        /*
         * Media and Data Integrity Errors:
         */
+       NVME_SCT_MEDIA_ERROR            = 0x200,
        NVME_SC_WRITE_FAULT             = 0x280,
        NVME_SC_READ_ERROR              = 0x281,
        NVME_SC_GUARD_CHECK             = 0x282,
@@ -1978,6 +1981,7 @@ enum {
        /*
         * Path-related Errors:
         */
+       NVME_SCT_PATH                   = 0x300,
        NVME_SC_INTERNAL_PATH_ERROR     = 0x300,
        NVME_SC_ANA_PERSISTENT_LOSS     = 0x301,
        NVME_SC_ANA_INACCESSIBLE        = 0x302,
@@ -1986,11 +1990,17 @@ enum {
        NVME_SC_HOST_PATH_ERROR         = 0x370,
        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_DNR                     = 0x4000,
+       NVME_SC_DNR                     = 0x4000, /* Do Not Retry */
 };
 
+#define NVME_SCT(status) ((status) >> 8 & 7)
+
 struct nvme_completion {
        /*
         * Used by Admin and Fabrics commands to return data: