]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
nvme: fix command limits status code
authorKeith Busch <kbusch@kernel.org>
Tue, 20 May 2025 20:20:37 +0000 (13:20 -0700)
committerChristoph Hellwig <hch@lst.de>
Wed, 4 Jun 2025 07:51:10 +0000 (09:51 +0200)
The command specific status code, 0x183, was introduced in the NVMe 2.0
specification defined to "Command Size Limits Exceeded" and only ever
applied to DSM and Copy commands.  Fix the name and, remove the
incorrect translation to error codes and special treatment in the
target code for it.

Fixes: 3b7c33b28a44d4 ("nvme.h: add Write Zeroes definitions")
Cc: Chaitanya Kulkarni <chaitanyak@nvidia.com>
Reviewed-by: Chaitanya Kulkarni <kch@nvidia.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
drivers/nvme/host/constants.c
drivers/nvme/host/core.c
drivers/nvme/host/pr.c
drivers/nvme/target/core.c
drivers/nvme/target/io-cmd-bdev.c
include/linux/nvme.h

index 2b9e6cfaf2a80ab86e7a537e04570d6c81841a6d..1a0058be5821044c9b98d2bcae0c1ad0ed4589ec 100644 (file)
@@ -145,7 +145,7 @@ static const char * const nvme_statuses[] = {
        [NVME_SC_BAD_ATTRIBUTES] = "Conflicting Attributes",
        [NVME_SC_INVALID_PI] = "Invalid Protection Information",
        [NVME_SC_READ_ONLY] = "Attempted Write to Read Only Range",
-       [NVME_SC_ONCS_NOT_SUPPORTED] = "ONCS Not Supported",
+       [NVME_SC_CMD_SIZE_LIM_EXCEEDED  ] = "Command Size Limits Exceeded",
        [NVME_SC_ZONE_BOUNDARY_ERROR] = "Zoned Boundary Error",
        [NVME_SC_ZONE_FULL] = "Zone Is Full",
        [NVME_SC_ZONE_READ_ONLY] = "Zone Is Read Only",
index f69a232a000ac8125788db29f9dd50fdc442c412..7ba35b573335de3f68886d3f062e94b0e64aa4e9 100644 (file)
@@ -290,7 +290,6 @@ static blk_status_t nvme_error_status(u16 status)
        case NVME_SC_NS_NOT_READY:
                return BLK_STS_TARGET;
        case NVME_SC_BAD_ATTRIBUTES:
-       case NVME_SC_ONCS_NOT_SUPPORTED:
        case NVME_SC_INVALID_OPCODE:
        case NVME_SC_INVALID_FIELD:
        case NVME_SC_INVALID_NS:
index cf2d2c5039ddbf411d1515c6c3687d5f3c681695..ca6a74607b139795687217e3827beaf761f62057 100644 (file)
@@ -82,8 +82,6 @@ static int nvme_status_to_pr_err(int status)
                return PR_STS_SUCCESS;
        case NVME_SC_RESERVATION_CONFLICT:
                return PR_STS_RESERVATION_CONFLICT;
-       case NVME_SC_ONCS_NOT_SUPPORTED:
-               return -EOPNOTSUPP;
        case NVME_SC_BAD_ATTRIBUTES:
        case NVME_SC_INVALID_OPCODE:
        case NVME_SC_INVALID_FIELD:
index db7b17d1094e8b4ceb19d81c3ef380f343fb6f0f..e824f149746a7f3d9883cce1ab29571f414b5d61 100644 (file)
@@ -62,14 +62,7 @@ inline u16 errno_to_nvme_status(struct nvmet_req *req, int errno)
                return  NVME_SC_LBA_RANGE | NVME_STATUS_DNR;
        case -EOPNOTSUPP:
                req->error_loc = offsetof(struct nvme_common_command, opcode);
-               switch (req->cmd->common.opcode) {
-               case nvme_cmd_dsm:
-               case nvme_cmd_write_zeroes:
-                       return NVME_SC_ONCS_NOT_SUPPORTED | NVME_STATUS_DNR;
-               default:
-                       return NVME_SC_INVALID_OPCODE | NVME_STATUS_DNR;
-               }
-               break;
+               return NVME_SC_INVALID_OPCODE | NVME_STATUS_DNR;
        case -ENODATA:
                req->error_loc = offsetof(struct nvme_rw_command, nsid);
                return NVME_SC_ACCESS_DENIED;
index 83be0657e6df4ebc2ed6e30c451ad47229c30e0e..1cfa13d029bfa2a2c536a0155294dd2ca78e1d1e 100644 (file)
@@ -145,15 +145,8 @@ u16 blk_to_nvme_status(struct nvmet_req *req, blk_status_t blk_sts)
                req->error_loc = offsetof(struct nvme_rw_command, slba);
                break;
        case BLK_STS_NOTSUPP:
+               status = NVME_SC_INVALID_OPCODE | NVME_STATUS_DNR;
                req->error_loc = offsetof(struct nvme_common_command, opcode);
-               switch (req->cmd->common.opcode) {
-               case nvme_cmd_dsm:
-               case nvme_cmd_write_zeroes:
-                       status = NVME_SC_ONCS_NOT_SUPPORTED | NVME_STATUS_DNR;
-                       break;
-               default:
-                       status = NVME_SC_INVALID_OPCODE | NVME_STATUS_DNR;
-               }
                break;
        case BLK_STS_MEDIUM:
                status = NVME_SC_ACCESS_DENIED;
index 51308f65b72fdd5514c84eac479abbcd0cd138e6..b65a1b9f2116c2a1d5c12bcf737d17965b678179 100644 (file)
@@ -2171,7 +2171,7 @@ enum {
        NVME_SC_BAD_ATTRIBUTES          = 0x180,
        NVME_SC_INVALID_PI              = 0x181,
        NVME_SC_READ_ONLY               = 0x182,
-       NVME_SC_ONCS_NOT_SUPPORTED      = 0x183,
+       NVME_SC_CMD_SIZE_LIM_EXCEEDED   = 0x183,
 
        /*
         * I/O Command Set Specific - Fabrics commands: