> -----Original Message----- > From: Bart Van Assche [mailto:Bart.VanAssche@xxxxxxxxxxx] > Sent: Wednesday, April 5, 2017 5:32 PM > To: linux-kernel@xxxxxxxxxxxxxxx; linux-block@xxxxxxxxxxxxxxx; Long Li > <longli@xxxxxxxxxxxxx>; axboe@xxxxxxxxx > Cc: Stephen Hemminger <sthemmin@xxxxxxxxxxxxx>; KY Srinivasan > <kys@xxxxxxxxxxxxx>; Long Li <longli@xxxxxxxxxxxxx> > Subject: Re: [PATCH] block-mq: set both block queue and hardware queue > restart bit for restart > > On Wed, 2017-04-05 at 17:16 -0700, Long Li wrote: > > Under heavy I/O, one hardware queue may be unable to dispatch any I/O > > to the device layer. This poses a problem with restarting this > > hardware queue on I/O finish in blk_mq_sched_restart_queues(), becaue > > there is nothing pending that will finish in future on this hardware qeueu. > This will result in deadlock. > > > > With this patch, we check for all possible stalled hardware queues > > when I/O finishes on any hardware queues. This prevents this deadlock. > > > > Signed-off-by: Long Li <longli@xxxxxxxxxxxxx> > > --- > > block/blk-mq-sched.c | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > diff --git a/block/blk-mq-sched.c b/block/blk-mq-sched.c index > > 09af8ff..f7f3d44 100644 > > --- a/block/blk-mq-sched.c > > +++ b/block/blk-mq-sched.c > > @@ -202,7 +202,7 @@ void blk_mq_sched_dispatch_requests(struct > blk_mq_hw_ctx *hctx) > > * needing a restart in that case. > > */ > > if (!list_empty(&rq_list)) { > > - blk_mq_sched_mark_restart_hctx(hctx); > > + blk_mq_sched_mark_restart_queue(hctx); > > did_work = blk_mq_dispatch_rq_list(hctx, &rq_list); > > } else if (!has_sched_dispatch) { > > blk_mq_flush_busy_ctxs(hctx, &rq_list); > > Please drop this patch. I'm working on a better solution. Thank you. Looking forward to your patch. > > Thanks, > > Bart.