]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
s390/dasd: Return BLK_STS_INVAL for EINVAL from do_dasd_request
authorJaehoon Kim <jhkim@linux.ibm.com>
Thu, 25 Sep 2025 15:47:07 +0000 (17:47 +0200)
committerJens Axboe <axboe@kernel.dk>
Thu, 25 Sep 2025 16:34:30 +0000 (10:34 -0600)
Currently, if CCW request creation fails with -EINVAL, the DASD driver
returns BLK_STS_IOERR to the block layer.

This can happen, for example, when a user-space application such as QEMU
passes a misaligned buffer, but the original cause of the error is
masked as a generic I/O error.

This patch changes the behavior so that -EINVAL is returned as
BLK_STS_INVAL, allowing user space to properly detect alignment issues
instead of interpreting them as I/O errors.

Reviewed-by: Stefan Haberland <sth@linux.ibm.com>
Cc: stable@vger.kernel.org #6.11+
Signed-off-by: Jaehoon Kim <jhkim@linux.ibm.com>
Signed-off-by: Stefan Haberland <sth@linux.ibm.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/s390/block/dasd.c

index 582ac7e61b240d76834e4e57701d9eed2048d862..1d624388075ff30a1998d0ecd3441bec49a8de95 100644 (file)
@@ -3114,12 +3114,14 @@ static blk_status_t do_dasd_request(struct blk_mq_hw_ctx *hctx,
                    PTR_ERR(cqr) == -ENOMEM ||
                    PTR_ERR(cqr) == -EAGAIN) {
                        rc = BLK_STS_RESOURCE;
-                       goto out;
+               } else if (PTR_ERR(cqr) == -EINVAL) {
+                       rc = BLK_STS_INVAL;
+               } else {
+                       DBF_DEV_EVENT(DBF_ERR, basedev,
+                                     "CCW creation failed (rc=%ld) on request %p",
+                                     PTR_ERR(cqr), req);
+                       rc = BLK_STS_IOERR;
                }
-               DBF_DEV_EVENT(DBF_ERR, basedev,
-                             "CCW creation failed (rc=%ld) on request %p",
-                             PTR_ERR(cqr), req);
-               rc = BLK_STS_IOERR;
                goto out;
        }
        /*