]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
block: introduce BLK_STS_OFFLINE
authorSong Liu <song@kernel.org>
Thu, 3 Feb 2022 19:28:25 +0000 (11:28 -0800)
committerJens Axboe <axboe@kernel.dk>
Fri, 4 Feb 2022 04:10:00 +0000 (21:10 -0700)
Currently, drivers reports BLK_STS_IOERR for devices that are not full
online or being removed. This behavior could cause confusion for users,
as they are not really I/O errors from the device.

Solve this issue with a new state BLK_STS_OFFLINE, which reports "device
offline error" in dmesg instead of "I/O error".

EIO is intentionally kept to not change user visible return value.

Signed-off-by: Song Liu <song@kernel.org>
Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com>
Link: https://lore.kernel.org/r/20220203192827.1370270-2-song@kernel.org
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/blk-core.c
include/linux/blk_types.h

index 61f6a0dc4511a948289c1be8d78843e867b79050..24035dd2eef174d4d806cab5d77d436e38e6dcb4 100644 (file)
@@ -164,6 +164,7 @@ static const struct {
        [BLK_STS_RESOURCE]      = { -ENOMEM,    "kernel resource" },
        [BLK_STS_DEV_RESOURCE]  = { -EBUSY,     "device resource" },
        [BLK_STS_AGAIN]         = { -EAGAIN,    "nonblocking retry" },
+       [BLK_STS_OFFLINE]       = { -EIO,       "device offline" },
 
        /* device mapper special case, should not leak out: */
        [BLK_STS_DM_REQUEUE]    = { -EREMCHG, "dm internal retry" },
index fe065c394fff66f3c72a5ceb88ba802fc157b737..5561e58d158ac85db10604b9d727fd8bcb7101ee 100644 (file)
@@ -153,6 +153,13 @@ typedef u8 __bitwise blk_status_t;
  */
 #define BLK_STS_ZONE_ACTIVE_RESOURCE   ((__force blk_status_t)16)
 
+/*
+ * BLK_STS_OFFLINE is returned from the driver when the target device is offline
+ * or is being taken offline. This could help differentiate the case where a
+ * device is intentionally being shut down from a real I/O error.
+ */
+#define BLK_STS_OFFLINE                ((__force blk_status_t)17)
+
 /**
  * blk_path_error - returns true if error may be path related
  * @error: status the request was completed with