summaryrefslogtreecommitdiffstats
path: root/block
diff options
context:
space:
mode:
authorJens Axboe <axboe@fb.com>2014-09-19 21:10:29 +0200
committerJens Axboe <axboe@fb.com>2014-09-22 19:55:56 +0200
commit8b95741569eabc5eb17da71d1d3668cdb0bef86c (patch)
tree8bc281e6cce1b179c4274419a4e4d1de0ba5f999 /block
parentblk-mq: fix potential oops on out-of-memory in __blk_mq_alloc_rq_maps() (diff)
downloadlinux-8b95741569eabc5eb17da71d1d3668cdb0bef86c.tar.xz
linux-8b95741569eabc5eb17da71d1d3668cdb0bef86c.zip
blk-mq: use blk_mq_start_hw_queues() when running requeue work
When requests are retried due to hw or sw resource shortages, we often stop the associated hardware queue. So ensure that we restart the queues when running the requeue work, otherwise the queue run will be a no-op. Signed-off-by: Jens Axboe <axboe@fb.com>
Diffstat (limited to 'block')
-rw-r--r--block/blk-mq.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/block/blk-mq.c b/block/blk-mq.c
index e83d306907da..c88e6089746d 100644
--- a/block/blk-mq.c
+++ b/block/blk-mq.c
@@ -479,7 +479,11 @@ static void blk_mq_requeue_work(struct work_struct *work)
blk_mq_insert_request(rq, false, false, false);
}
- blk_mq_run_queues(q, false);
+ /*
+ * Use the start variant of queue running here, so that running
+ * the requeue work will kick stopped queues.
+ */
+ blk_mq_start_hw_queues(q);
}
void blk_mq_add_to_requeue_list(struct request *rq, bool at_head)