summaryrefslogtreecommitdiffstats
path: root/block/blk-mq.c
diff options
context:
space:
mode:
authorJens Axboe2017-01-26 20:40:07 +0100
committerJens Axboe2017-01-27 16:20:35 +0100
commitc13660a08c8b3bb49def4374bfd414aaaa564662 (patch)
treec7a61741aba75e320838865f176092c07af37f95 /block/blk-mq.c
parentblk-mq-sched: fix starvation for multiple hardware queues and shared tags (diff)
downloadkernel-qcow2-linux-c13660a08c8b3bb49def4374bfd414aaaa564662.tar.gz
kernel-qcow2-linux-c13660a08c8b3bb49def4374bfd414aaaa564662.tar.xz
kernel-qcow2-linux-c13660a08c8b3bb49def4374bfd414aaaa564662.zip
blk-mq-sched: change ->dispatch_requests() to ->dispatch_request()
When we invoke dispatch_requests(), the scheduler empties everything into the passed in list. This isn't always a good thing, since it means that we remove items that we could have potentially merged with. Change the function to dispatch single requests at the time. If we do that, we can backoff exactly at the point where the device can't consume more IO, and leave the rest with the scheduler for better merging and future dispatch decision making. Signed-off-by: Jens Axboe <axboe@fb.com> Reviewed-by: Omar Sandoval <osandov@fb.com> Tested-by: Hannes Reinecke <hare@suse.com>
Diffstat (limited to 'block/blk-mq.c')
-rw-r--r--block/blk-mq.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/block/blk-mq.c b/block/blk-mq.c
index 21795c6575bc..301ae29fd229 100644
--- a/block/blk-mq.c
+++ b/block/blk-mq.c
@@ -998,7 +998,7 @@ bool blk_mq_dispatch_rq_list(struct blk_mq_hw_ctx *hctx, struct list_head *list)
*/
if (!list_empty(list)) {
spin_lock(&hctx->lock);
- list_splice(list, &hctx->dispatch);
+ list_splice_init(list, &hctx->dispatch);
spin_unlock(&hctx->lock);
/*