From d66259e8438fec7c657d80d8532f89d2ad2ec21e Mon Sep 17 00:00:00 2001 From: Shaohua Li Date: Mon, 8 Nov 2010 15:01:04 +0100 Subject: [PATCH] --- yaml --- r: 230578 b: refs/heads/master c: 8e1ac6655104bc6e1e79d67e2df88cc8fa9b6e07 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/block/cfq-iosched.c | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 4c288192f90f..0f57ad144902 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: d2d59e18a1ea8ecdd1c0a52af320e9a7f5391cc4 +refs/heads/master: 8e1ac6655104bc6e1e79d67e2df88cc8fa9b6e07 diff --git a/trunk/block/cfq-iosched.c b/trunk/block/cfq-iosched.c index 986865e3fbc5..ca4d19907243 100644 --- a/trunk/block/cfq-iosched.c +++ b/trunk/block/cfq-iosched.c @@ -2285,6 +2285,17 @@ static struct cfq_queue *cfq_select_queue(struct cfq_data *cfqd) goto keep_queue; } + /* + * This is a deep seek queue, but the device is much faster than + * the queue can deliver, don't idle + **/ + if (CFQQ_SEEKY(cfqq) && cfq_cfqq_idle_window(cfqq) && + (cfq_cfqq_slice_new(cfqq) || + (cfqq->slice_end - jiffies > jiffies - cfqq->slice_start))) { + cfq_clear_cfqq_deep(cfqq); + cfq_clear_cfqq_idle_window(cfqq); + } + if (cfqq->dispatched && cfq_should_idle(cfqd, cfqq)) { cfqq = NULL; goto keep_queue;