If we're doing a flush/fua insert, insertion might block on getting
a driver tag, if can_block == true. Add a might_sleep check for that,
since we just had a bug like that. This will help us catch a similar
issue quicker in the future.

diff --git a/block/blk-mq-sched.c b/block/blk-mq-sched.c
index 9e3c0f92851b..57aec8462e93 100644
--- a/block/blk-mq-sched.c
+++ b/block/blk-mq-sched.c
@@ -372,6 +372,7 @@ void blk_mq_sched_insert_request(struct request *rq, bool 
at_head,
        struct blk_mq_hw_ctx *hctx = blk_mq_map_queue(q, ctx->cpu);
 
        if (rq->tag == -1 && op_is_flush(rq->cmd_flags)) {
+               might_sleep_if(can_block);
                blk_mq_sched_insert_flush(hctx, rq, can_block);
                return;
        }

Signed-off-by: Jens Axboe <[email protected]>

Reply via email to