[PATCH 3/5] block: allow end_io based requests in the completion batch handling
Anuj gupta
anuj1072538 at gmail.com
Wed Sep 28 06:42:34 PDT 2022
On Tue, Sep 27, 2022 at 7:20 AM Jens Axboe <axboe at kernel.dk> wrote:
>
> With end_io handlers now being able to potentially pass ownership of
> the request upon completion, we can allow requests with end_io handlers
> in the batch completion handling.
>
> Co-developed-by: Stefan Roesch <shr at fb.com>
> Signed-off-by: Jens Axboe <axboe at kernel.dk>
> ---
> block/blk-mq.c | 13 +++++++++++--
> include/linux/blk-mq.h | 3 ++-
> 2 files changed, 13 insertions(+), 3 deletions(-)
>
> diff --git a/block/blk-mq.c b/block/blk-mq.c
> index a4e018c82b7c..a7dfe7a898a4 100644
> --- a/block/blk-mq.c
> +++ b/block/blk-mq.c
> @@ -823,8 +823,10 @@ static void blk_complete_request(struct request *req)
> * can find how many bytes remain in the request
> * later.
> */
> - req->bio = NULL;
> - req->__data_len = 0;
> + if (!req->end_io) {
> + req->bio = NULL;
> + req->__data_len = 0;
> + }
> }
>
> /**
> @@ -1055,6 +1057,13 @@ void blk_mq_end_request_batch(struct io_comp_batch *iob)
>
> rq_qos_done(rq->q, rq);
>
> + /*
> + * If end_io handler returns NONE, then it still has
> + * ownership of the request.
> + */
> + if (rq->end_io && rq->end_io(rq, 0) == RQ_END_IO_NONE)
> + continue;
> +
> WRITE_ONCE(rq->state, MQ_RQ_IDLE);
> if (!req_ref_put_and_test(rq))
> continue;
> diff --git a/include/linux/blk-mq.h b/include/linux/blk-mq.h
> index e6fa49dd6196..50811d0fb143 100644
> --- a/include/linux/blk-mq.h
> +++ b/include/linux/blk-mq.h
> @@ -853,8 +853,9 @@ static inline bool blk_mq_add_to_batch(struct request *req,
> struct io_comp_batch *iob, int ioerror,
> void (*complete)(struct io_comp_batch *))
> {
> - if (!iob || (req->rq_flags & RQF_ELV) || req->end_io || ioerror)
> + if (!iob || (req->rq_flags & RQF_ELV) || ioerror)
> return false;
> +
> if (!iob->complete)
> iob->complete = complete;
> else if (iob->complete != complete)
> --
> 2.35.1
>
Looks good.
Reviewed-by: Anuj Gupta <anuj20.g at samsung.com>
--
Anuj Gupta
More information about the Linux-nvme
mailing list