diff options
Diffstat (limited to 'block/cfq-iosched.c')
-rw-r--r-- | block/cfq-iosched.c | 11 |
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 |