[PATCH] cfq: fix IOPRIO_CLASS_IDLE delays

From: Oleg Nesterov
Date: Tue Nov 06 2007 - 14:00:09 EST


After the fresh boot:

ionice -c3 -p $$
echo cfq >> /sys/block/XXX/queue/scheduler
dd if=/dev/XXX of=/dev/null bs=512 count=1

Now dd hangs in D state and the queue is completely stalled for approximately
INITIAL_JIFFIES + CFQ_IDLE_GRACE jiffies. This is because cfq_init_queue()
forgets to initialize cfq_data->last_end_request.

(I guess this patch is not complete, overflow is still possible)

Signed-off-by: Oleg Nesterov <oleg@xxxxxxxxxx>

--- cfq/block/cfq-iosched.c~ 2007-08-09 19:59:26.000000000 +0400
+++ cfq/block/cfq-iosched.c 2007-11-06 22:39:08.000000000 +0300
@@ -2122,6 +2122,7 @@ static void *cfq_init_queue(struct reque

INIT_WORK(&cfqd->unplug_work, cfq_kick_queue);

+ cfqd->last_end_request = jiffies;
cfqd->cfq_quantum = cfq_quantum;
cfqd->cfq_fifo_expire[0] = cfq_fifo_expire[0];
cfqd->cfq_fifo_expire[1] = cfq_fifo_expire[1];

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/