[PATCH 1/2] block: return errors from blk_execute_rq()
Christoph Hellwig
hch at lst.de
Mon Apr 26 15:31:46 BST 2021
On Fri, Apr 23, 2021 at 02:57:59PM -0700, Keith Busch wrote:
> 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 <yzhong at purestorage.com>
> Signed-off-by: Keith Busch <kbusch at 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.
More information about the Linux-nvme
mailing list