summaryrefslogtreecommitdiff
path: root/block/cfq-iosched.c
diff options
context:
space:
mode:
authorJens Axboe <axboe@suse.de>2006-06-01 08:07:26 (GMT)
committerJens Axboe <axboe@suse.de>2006-06-01 08:07:26 (GMT)
commite0de0206a2a37cd3e0ba9954d9f863e11d6d1782 (patch)
tree58ba74a2f8e0edce59c770c74d019d4e1e3c98fd /block/cfq-iosched.c
parentba8f5baba79da8eb502f8534c3a8ecb64aceb790 (diff)
downloadlinux-fsl-qoriq-e0de0206a2a37cd3e0ba9954d9f863e11d6d1782.tar.xz
[PATCH] cfq-iosched: check busy queues before deciding we are idle
For just one busy queue (like async write out), we often overlooked that we could queue more io and decided we were idle instead. This causes us quite a bit of performance loss. Signed-off-by: Jens Axboe <axboe@suse.de>
Diffstat (limited to 'block/cfq-iosched.c')
-rw-r--r--block/cfq-iosched.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/block/cfq-iosched.c b/block/cfq-iosched.c
index 11ce6aa..d582433 100644
--- a/block/cfq-iosched.c
+++ b/block/cfq-iosched.c
@@ -879,6 +879,13 @@ static struct cfq_queue *cfq_set_active_queue(struct cfq_data *cfqd)
cfqq = list_entry_cfqq(cfqd->cur_rr.next);
/*
+ * If no new queues are available, check if the busy list has some
+ * before falling back to idle io.
+ */
+ if (!cfqq && !list_empty(&cfqd->busy_rr))
+ cfqq = list_entry_cfqq(cfqd->busy_rr.next);
+
+ /*
* if we have idle queues and no rt or be queues had pending
* requests, either allow immediate service if the grace period
* has passed or arm the idle grace timer