aboutsummaryrefslogtreecommitdiffstats
path: root/block/cfq-iosched.c
diff options
context:
space:
mode:
Diffstat (limited to 'block/cfq-iosched.c')
-rw-r--r--block/cfq-iosched.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/block/cfq-iosched.c b/block/cfq-iosched.c
index cba8a5d91bfa..56e9d8503cf1 100644
--- a/block/cfq-iosched.c
+++ b/block/cfq-iosched.c
@@ -1903,10 +1903,17 @@ cfq_rq_enqueued(struct cfq_data *cfqd, struct cfq_queue *cfqq,
1903 * Remember that we saw a request from this process, but 1903 * Remember that we saw a request from this process, but
1904 * don't start queuing just yet. Otherwise we risk seeing lots 1904 * don't start queuing just yet. Otherwise we risk seeing lots
1905 * of tiny requests, because we disrupt the normal plugging 1905 * of tiny requests, because we disrupt the normal plugging
1906 * and merging. 1906 * and merging. If the request is already larger than a single
1907 * page, let it rip immediately. For that case we assume that
1908 * merging is already done.
1907 */ 1909 */
1908 if (cfq_cfqq_wait_request(cfqq)) 1910 if (cfq_cfqq_wait_request(cfqq)) {
1911 if (blk_rq_bytes(rq) > PAGE_CACHE_SIZE) {
1912 del_timer(&cfqd->idle_slice_timer);
1913 blk_start_queueing(cfqd->queue);
1914 }
1909 cfq_mark_cfqq_must_dispatch(cfqq); 1915 cfq_mark_cfqq_must_dispatch(cfqq);
1916 }
1910 } else if (cfq_should_preempt(cfqd, cfqq, rq)) { 1917 } else if (cfq_should_preempt(cfqd, cfqq, rq)) {
1911 /* 1918 /*
1912 * not the active queue - expire current slice if it is 1919 * not the active queue - expire current slice if it is