On Fri, Apr 23, 2021 at 03:05:54PM -0700, Keith Busch wrote: > Poll for completions if the request's hctx is a polling type. > > Signed-off-by: Keith Busch <kbusch@xxxxxxxxxx> > --- > block/blk-exec.c | 12 +++++++++++- > 1 file changed, 11 insertions(+), 1 deletion(-) > > diff --git a/block/blk-exec.c b/block/blk-exec.c > index beae70a0e5e5..b960ad187ba5 100644 > --- a/block/blk-exec.c > +++ b/block/blk-exec.c > @@ -63,6 +63,11 @@ void blk_execute_rq_nowait(struct gendisk *bd_disk, struct request *rq, > } > EXPORT_SYMBOL_GPL(blk_execute_rq_nowait); > > +static bool blk_rq_is_poll(struct request *rq) > +{ > + return rq->mq_hctx && rq->mq_hctx->type == HCTX_TYPE_POLL; > +} > + > /** > * blk_execute_rq - insert a request into queue for execution > * @bd_disk: matching gendisk > @@ -83,7 +88,12 @@ void blk_execute_rq(struct gendisk *bd_disk, struct request *rq, int at_head) > > /* Prevent hang_check timer from firing at us during very long I/O */ > hang_check = sysctl_hung_task_timeout_secs; > - if (hang_check) > + if (blk_rq_is_poll(rq)) { > + do { > + blk_poll(rq->q, request_to_qc_t(rq->mq_hctx, rq), true); > + cond_resched(); > + } while (!completion_done(&wait)); > + } else if (hang_check) > while (!wait_for_completion_io_timeout(&wait, hang_check * (HZ/2))); > else > wait_for_completion_io(&wait); > -- > 2.25.4 > Reviewed-by: Ming Lei <ming.lei@xxxxxxxxxx> -- Ming