From: Oleg Nesterov Date: Wed, 7 Nov 2007 08:46:13 +0000 (+0100) Subject: cfq: fix IOPRIO_CLASS_IDLE delays X-Git-Tag: v2.6.24-rc3~174^2~6 X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b70c864d3ce706571d2f3cac1d35d4fba01d6072;p=linux-2.6 cfq: fix IOPRIO_CLASS_IDLE delays 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 Signed-off-by: Jens Axboe --- diff --git a/block/cfq-iosched.c b/block/cfq-iosched.c index 61a3f22eee..6831a758d5 100644 --- a/block/cfq-iosched.c +++ b/block/cfq-iosched.c @@ -2126,6 +2126,7 @@ static void *cfq_init_queue(struct request_queue *q) 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];