summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJens Axboe2017-02-01 07:32:50 +0100
committerJens Axboe2017-02-01 07:32:50 +0100
commit12d70958a2e8d587acaa51dafd5d6620e00b7543 (patch)
treebb5acd14a33deceefe2757d1f6ebfca5371280bd
parentnvme/pci: Don't mark IOD as aborted if abort wasn't sent (diff)
downloadkernel-qcow2-linux-12d70958a2e8d587acaa51dafd5d6620e00b7543.tar.gz
kernel-qcow2-linux-12d70958a2e8d587acaa51dafd5d6620e00b7543.tar.xz
kernel-qcow2-linux-12d70958a2e8d587acaa51dafd5d6620e00b7543.zip
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: Jens Axboe <axboe@fb.com>
-rw-r--r--block/blk-mq.c3
1 files changed, 0 insertions, 3 deletions
diff --git a/block/blk-mq.c b/block/blk-mq.c
index 60dac10228fe..489076e7ae15 100644
--- a/block/blk-mq.c
+++ b/block/blk-mq.c
@@ -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,
};
- if (blk_mq_hctx_stopped(data.hctx))
- return false;
-
if (rq->tag != -1) {
done:
if (hctx)