blk-mq: use blk_mq_start_hw_queues() when running requeue work
authorJens Axboe <axboe@fb.com>
Fri, 19 Sep 2014 19:10:29 +0000 (13:10 -0600)
committerJens Axboe <axboe@fb.com>
Mon, 22 Sep 2014 17:55:56 +0000 (11:55 -0600)
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>
block/blk-mq.c

index e83d306907dafba44d77e0c0bfa4e9bf877b8bec..c88e6089746d82267c61d572baa25fe855704f22 100644 (file)
@@ -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)