On Thu, 2017-08-10 at 09:14 +0200, Christoph Hellwig wrote: > On Wed, Aug 09, 2017 at 11:28:06AM -0700, Bart Van Assche wrote: > > The blk_mq_delay_kick_requeue_list() function is used by the device > > mapper and only by the device mapper to rerun the queue and requeue > > list after a delay. This function is called once per request that > > gets requeued. Modify this function such that the queue is run once > > per path change event instead of once per request that is requeued. > > Is there a chance we could look into killing this function and moving > dm to run it every time we requeue a request like all the other drivers? Hello Christoph, That's an interesting question. I think it's not possible to remove this function without adding more infrastructure to the block layer. As an example, if the .lld_busy_fn() request queue callback function reports that a request queue is busy the only way for the dm-mpath driver to detect that an underlying request queue is no longer busy is by calling that function again after a certain time (see also multipath_busy() in dm-mpath.c). In other words, if we want to get rid of blk_mq_delay_kick_requeue_list() then notification mechanisms will have to be added for every type of state information that can cause the state of a multipath from "not ready" into "ready". Bart.