Initial commit
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
From 2e864386e62e702a343be2507062ee08d5dfc810 Mon Sep 17 00:00:00 2001
|
||||
From: Evan Green <evgreen@chromium.org>
|
||||
Date: Thu, 14 Nov 2019 15:50:07 -0800
|
||||
Subject: loop: Report EOPNOTSUPP properly
|
||||
|
||||
Properly plumb out EOPNOTSUPP from loop driver operations, which may
|
||||
get returned when for instance a discard operation is attempted but not
|
||||
supported by the underlying block device. Before this change, everything
|
||||
was reported in the log as an I/O error, which is scary and not
|
||||
helpful in debugging.
|
||||
|
||||
Signed-off-by: Evan Green <evgreen@chromium.org>
|
||||
Reviewed-by: Gwendal Grignou <gwendal@chromium.org>
|
||||
Reviewed-by: Bart Van Assche <bvanassche@acm.org>
|
||||
---
|
||||
drivers/block/loop.c | 7 +++++--
|
||||
1 file changed, 5 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/drivers/block/loop.c
|
||||
+++ b/drivers/block/loop.c
|
||||
@@ -462,7 +462,7 @@ static void lo_complete_rq(struct reques
|
||||
if (!cmd->use_aio || cmd->ret < 0 || cmd->ret == blk_rq_bytes(rq) ||
|
||||
req_op(rq) != REQ_OP_READ) {
|
||||
if (cmd->ret < 0)
|
||||
- ret = BLK_STS_IOERR;
|
||||
+ ret = errno_to_blk_status(cmd->ret);
|
||||
goto end_io;
|
||||
}
|
||||
|
||||
@@ -1973,7 +1973,10 @@ static void loop_handle_cmd(struct loop_
|
||||
failed:
|
||||
/* complete non-aio request */
|
||||
if (!cmd->use_aio || ret) {
|
||||
- cmd->ret = ret ? -EIO : 0;
|
||||
+ if (ret == -EOPNOTSUPP)
|
||||
+ cmd->ret = ret;
|
||||
+ else
|
||||
+ cmd->ret = ret ? -EIO : 0;
|
||||
blk_mq_complete_request(rq);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user