• Ming Lei's avatar
    dm rq: don't call blk_mq_queue_stopped() in dm_stop_queue() · a24e10ab
    Ming Lei authored
    [ Upstream commit e766668c ]
    
    dm_stop_queue() only uses blk_mq_quiesce_queue() so it doesn't
    formally stop the blk-mq queue; therefore there is no point making the
    blk_mq_queue_stopped() check -- it will never be stopped.
    
    In addition, even though dm_stop_queue() actually tries to quiesce hw
    queues via blk_mq_quiesce_queue(), checking with blk_queue_quiesced()
    to avoid unnecessary queue quiesce isn't reliable because: the
    QUEUE_FLAG_QUIESCED flag is set before synchronize_rcu() and
    dm_stop_queue() may be called when synchronize_rcu() from another
    blk_mq_quiesce_queue() is in-progress.
    
    Fixes: 7b17c2f7 ("dm: Fix a race condition related to stopping and starting queues")
    Signed-off-by: default avatarMing Lei <ming.lei@redhat.com>
    Signed-off-by: default avatarMike Snitzer <snitzer@redhat.com>
    Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
    a24e10ab
dm-rq.c 21.7 KB