Commit 12d70958 authored by Jens Axboe's avatar Jens Axboe

blk-mq: don't fail allocating driver tag for stopped hw queue

We rely on blk_mq_get_driver_tag() not failing if 'wait' is true,
but it currently fails in that case if the queue happens to be
stopped at the time of the call.

We don't need to check for stopped here, it's just assigning
the tag. If the queue is stopped, we'll handle it when
attempting to run the queue.

This fixes a stall/crash on flush intensive workloads, where
we proceed to process a flush that doesn't have a valid tag
assigned.
Signed-off-by: default avatarJens Axboe <axboe@fb.com>
parent 7bf7d778
...@@ -856,9 +856,6 @@ bool blk_mq_get_driver_tag(struct request *rq, struct blk_mq_hw_ctx **hctx, ...@@ -856,9 +856,6 @@ bool blk_mq_get_driver_tag(struct request *rq, struct blk_mq_hw_ctx **hctx,
.flags = wait ? 0 : BLK_MQ_REQ_NOWAIT, .flags = wait ? 0 : BLK_MQ_REQ_NOWAIT,
}; };
if (blk_mq_hctx_stopped(data.hctx))
return false;
if (rq->tag != -1) { if (rq->tag != -1) {
done: done:
if (hctx) if (hctx)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment