dm: do not use waitqueue for request-based DM
authorMing Lei <ming.lei@redhat.com>
Wed, 24 Jun 2020 20:00:58 +0000 (16:00 -0400)
committerMike Snitzer <snitzer@redhat.com>
Tue, 7 Jul 2020 16:00:01 +0000 (12:00 -0400)
commit85067747cf9888249fa11fa49ef75af5192d3988
tree4ae28ab98db5eec5c1eae0e14f15a99df4e0604d
parentdcb7fd82c75ee2d6e6f9d8cc71c52519ed52e258
dm: do not use waitqueue for request-based DM

Given request-based DM now uses blk-mq's blk_mq_queue_inflight() to
determine if outstanding IO has completed (and DM has no control over
the blk-mq state machine used to track outstanding IO) it is unsafe to
wakeup waiter (dm_wait_for_completion) before blk-mq has cleared a
request's state bits (e.g. MQ_RQ_IN_FLIGHT or MQ_RQ_COMPLETE).  As
such dm_wait_for_completion() could be left to wait indefinitely if no
other requests complete.

Fix this by eliminating request-based DM's use of waitqueue to wait
for blk-mq requests to complete in dm_wait_for_completion.

Signed-off-by: Ming Lei <ming.lei@redhat.com>
Depends-on: 3c94d83cb3526 ("blk-mq: change blk_mq_queue_busy() to blk_mq_queue_inflight()")
Cc: stable@vger.kernel.org
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
drivers/md/dm-rq.c
drivers/md/dm.c