[dm-devel] [PATCH 8/9] dm: Fix two race conditions related to stopping and starting queues

Mike Snitzer snitzer at redhat.com
Thu Sep 1 15:50:51 UTC 2016


On Thu, Sep 01 2016 at 11:31am -0400,
Bart Van Assche <bart.vanassche at sandisk.com> wrote:

> On 09/01/2016 08:05 AM, Mike Snitzer wrote:
> >I've staged most of your changes (with slight tweaks), see:
> >https://git.kernel.org/cgit/linux/kernel/git/device-mapper/linux-dm.git/log/?h=dm-4.9
> >
> >Only remaining issue is the queue dying race(s) in dm-multipath.
> 
> Thanks Mike! Two minor comments though:
> * In dm_start_queue(), I think that the queue_flag_clear_unlocked()
>   call should be converted into queue_flag_clear() and that it should
>   be protected by the block layer queue lock. Every call of
>   queue_flag_clear_unlocked() after block device initialization has
>   finished is wrong if blk_cleanup_queue() can be called concurrently.

OK, I'll have a look.

> * I think that adding blk_mq_{freeze,unfreeze}_queue() calls in
>   dm_stop_queue() not only allows to remove the "queue stopped" test
>   from dm_mq_queue_rq() but also that it allows to remove that test
>   from dm_mq_requeue_request().

I'm aware you think that but I need to circle back to
dm_mq_requeue_request() vs blk_queue_stopped().  The code as is isn't a
problem, just might be an extra check that isn't needed any more.




More information about the dm-devel mailing list