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.

Reply via email to