On Sat, Jan 13 2018 at 10:04am -0500, Ming Lei <ming.lei@xxxxxxxxxx> wrote: > On Fri, Jan 12, 2018 at 05:31:17PM -0500, Mike Snitzer wrote: > > > > Ming or Jens: might you be able to shed some light on how dm-mpath > > would/could set BLK_MQ_S_SCHED_RESTART? A new function added that can > > When BLK_STS_RESOURCE is returned from .queue_rq(), blk_mq_dispatch_rq_list() > will check if BLK_MQ_S_SCHED_RESTART is set. > > If it has been set, the queue won't be rerun for this request, and the queue > will be rerun until one in-flight request is completed, see blk_mq_sched_restart() > which is called from blk_mq_free_request(). > > If BLK_MQ_S_SCHED_RESTART isn't set, queue is rerun in blk_mq_dispatch_rq_list(), > and BLK_MQ_S_SCHED_RESTART is set before calling .queue_rq(), see > blk_mq_sched_mark_restart_hctx() which is called in blk_mq_sched_dispatch_requests(). > > This mechanism can avoid continuous running queue in case of STS_RESOURCE, that > means drivers wouldn't worry about that by adding random delay. Great, thanks for the overview. Really appreciate it. Mike