[PATCH] cfq-iosched: Do not merge queues of BE and IDLE classes

Previous thread: [RFC,PATCH 2/2] cputimers/proc: do_task_stat()->thread_group_times() is racy and O(n) under ->siglock by Oleg Nesterov on Wednesday, March 24, 2010 - 1:45 pm. (5 messages)

Next thread: Somebody take a look please! (some kind of kernel bug?) by Janos Haar on Wednesday, March 24, 2010 - 1:39 pm. (33 messages)
From: Divyesh Shah
Date: Wednesday, March 24, 2010 - 1:52 pm

even if they are found to be co-operating.

The prio_trees do not have any IDLE cfqqs on them. cfq_close_cooperator()
is called from cfq_select_queue() and cfq_completed_request(). The latter
ensures that the close cooperator code does not get invoked if the current
cfqq is of class IDLE but the former doesn't seem to have any such checks.
So an IDLE cfqq may get merged with a BE cfqq from the same group which
should be avoided.

Signed-off-by: Divyesh Shah<dpshah@google.com>
---

 block/cfq-iosched.c |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/block/cfq-iosched.c b/block/cfq-iosched.c
index dee9d93..e6910dc 100644
--- a/block/cfq-iosched.c
+++ b/block/cfq-iosched.c
@@ -1721,6 +1721,8 @@ static struct cfq_queue *cfq_close_cooperator(struct cfq_data *cfqd,
 {
 	struct cfq_queue *cfqq;
 
+	if (cfq_class_idle(cur_cfqq))
+		return NULL;
 	if (!cfq_cfqq_sync(cur_cfqq))
 		return NULL;
 	if (CFQQ_SEEKY(cur_cfqq))

--

From: Vivek Goyal
Date: Wednesday, March 24, 2010 - 6:08 pm

Looks good to me.

Acked-by: Vivek Goyal <vgoyal@redhat.com>

--

From: Jens Axboe
Date: Thursday, March 25, 2010 - 7:45 am

Thanks, applied.

-- 
Jens Axboe

--

Previous thread: [RFC,PATCH 2/2] cputimers/proc: do_task_stat()->thread_group_times() is racy and O(n) under ->siglock by Oleg Nesterov on Wednesday, March 24, 2010 - 1:45 pm. (5 messages)

Next thread: Somebody take a look please! (some kind of kernel bug?) by Janos Haar on Wednesday, March 24, 2010 - 1:39 pm. (33 messages)