> -----Original Message----- > From: Bart Van Assche [mailto:[email protected]] > Sent: Wednesday, April 5, 2017 5:32 PM > To: [email protected]; [email protected]; Long Li > <[email protected]>; [email protected] > Cc: Stephen Hemminger <[email protected]>; KY Srinivasan > <[email protected]>; Long Li <[email protected]> > 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 <[email protected]> > > --- > > 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.
