Re: [PATCH 1/2] block: return errors from blk_execute_rq()
From: Christoph Hellwig <hch@lst.de>
Date: 2021-04-26 14:31:51
Also in:
linux-nvme
On Fri, Apr 23, 2021 at 02:57:59PM -0700, Keith Busch wrote:
quoted hunk ↗ jump to hunk
The synchronous blk_execute_rq() had not provided a way for its callers to know if its request was successful or not. Return the errno from the completion status. Reported-by: Yuanyuan Zhong <redacted> Signed-off-by: Keith Busch <kbusch@kernel.org> --- block/blk-exec.c | 6 ++++-- include/linux/blkdev.h | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-)diff --git a/block/blk-exec.c b/block/blk-exec.c index beae70a0e5e5..3877a2677dd4 100644 --- a/block/blk-exec.c +++ b/block/blk-exec.c@@ -21,7 +21,7 @@ static void blk_end_sync_rq(struct request *rq, blk_status_t error) { struct completion *waiting = rq->end_io_data; - rq->end_io_data = NULL; + rq->end_io_data = ERR_PTR(blk_status_to_errno(error));
I think we should propagate the blk_status_t here as we're entirely inside the block layer. I.e. declare a blk_status_t on-stack in blk_execute_rq and pass a pointer to it in ->end_io_data.
-extern void blk_execute_rq(struct gendisk *, struct request *, int); +extern int blk_execute_rq(struct gendisk *, struct request *, int);
It would be nice to drop the extern here and spell out the argument names.