dm rq: don't call blk_mq_queue_stopped() in dm_stop_queue()
[ Upstream commit5.4-rM2-2.2.x-imx-squashede766668c6c
] 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:7b17c2f729
("dm: Fix a race condition related to stopping and starting queues") Signed-off-by: Ming Lei <ming.lei@redhat.com> Signed-off-by: Mike Snitzer <snitzer@redhat.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
parent
386f82040c
commit
0e0a146f97
|
@ -70,9 +70,6 @@ void dm_start_queue(struct request_queue *q)
|
||||||
|
|
||||||
void dm_stop_queue(struct request_queue *q)
|
void dm_stop_queue(struct request_queue *q)
|
||||||
{
|
{
|
||||||
if (blk_mq_queue_stopped(q))
|
|
||||||
return;
|
|
||||||
|
|
||||||
blk_mq_quiesce_queue(q);
|
blk_mq_quiesce_queue(q);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue