On Thu, 2017-04-20 at 16:45 -0600, Jens Axboe wrote: > 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; > } Hello Jens, The above patch looks fine to me. But seeing that patch made me wonder whether it would be useful to move that might_sleep_if() call into blk_mq_get_driver_tag() such that if ever an additional call to blk_mq_get_driver_tag() is added that might sleep would also be covered? Bart.