[dm-devel] BFQ + dm-mpath

Paolo Valente paolo.valente at linaro.org
Fri Sep 8 09:13:27 UTC 2017


> Il giorno 07 set 2017, alle ore 17:52, Mike Snitzer <snitzer at redhat.com> ha scritto:
> 
> On Tue, Sep 05 2017 at 10:15am -0400,
> Bart Van Assche <Bart.VanAssche at wdc.com> wrote:
> 
>> On Tue, 2017-09-05 at 09:56 +0200, Paolo Valente wrote:
>>> Ok, my suspects seem confirmed: the path dm_mq_queue_rq -> map_request
>>> -> setup_clone -> blk_rq_prep_clone creates a cloned request without
>>> invoking e->type->ops.mq.prepare_request for the target elevator e.
>>> The cloned request is therefore not initialized for the scheduler, but
>>> it is however inserted into the scheduler by
>>> blk_mq_sched_insert_request.  This seems an error for any scheduler
>>> that needs to initialize fields in the incoming request, or in general
>>> to take some preliminary action.
>>> 
>>> Am I missing something here?
>> 
>> (+Mike Snitzer)
>> 
>> Mike, do you perhaps have the time to look into this memory leak?
> 
> It isn't a memory leak, it is missing initialization in the case of
> cloned requests (if I'm understanding Paolo correctly).
> 

Exactly!

> But cloned requests shouldn't be going through the scheduler.  Only the
> original requests should.
> 
> Commit bd166ef18 ("blk-mq-sched: add framework for MQ capable IO
> schedulers") switched from blk_mq_insert_request() to
> blk_mq_sched_insert_request() and in doing so it opened dm-mpath up to
> this bug.
> 
> Could be we need to take steps to ensure the block layer still
> supports bypassing the elevator by using direct insertion?
> 
> Or blk_mq_sched_insert_request() needs updating to check if
> e->type->ops.mq.prepare_request were actually performed and to fallback
> to the !elevator case if not..
> 
> Not sure on the fix, but I can look closer if others (like Jens or
> Paolo) don't have quicker suggestions.
> 

No quick suggestion from me :(

Thanks for analyzing this bug,
Paolo

> Mike





More information about the dm-devel mailing list