aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOleg Nesterov <oleg@tv-sign.ru>2007-11-07 03:46:13 -0500
committerJens Axboe <jens.axboe@oracle.com>2007-11-07 03:46:13 -0500
commitb70c864d3ce706571d2f3cac1d35d4fba01d6072 (patch)
treefbdab2c4ddf484e5344b8cc00e4bc24b6e443191
parent2389d1ef172fc9df01f58265a436919d233fbc27 (diff)
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 <oleg@tv-sign.ru> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
-rw-r--r--block/cfq-iosched.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/block/cfq-iosched.c b/block/cfq-iosched.c
index 61a3f22eee29..6831a758d541 100644
--- a/block/cfq-iosched.c
+++ b/block/cfq-iosched.c
@@ -2126,6 +2126,7 @@ static void *cfq_init_queue(struct request_queue *q)
2126 2126
2127 INIT_WORK(&cfqd->unplug_work, cfq_kick_queue); 2127 INIT_WORK(&cfqd->unplug_work, cfq_kick_queue);
2128 2128
2129 cfqd->last_end_request = jiffies;
2129 cfqd->cfq_quantum = cfq_quantum; 2130 cfqd->cfq_quantum = cfq_quantum;
2130 cfqd->cfq_fifo_expire[0] = cfq_fifo_expire[0]; 2131 cfqd->cfq_fifo_expire[0] = cfq_fifo_expire[0];
2131 cfqd->cfq_fifo_expire[1] = cfq_fifo_expire[1]; 2132 cfqd->cfq_fifo_expire[1] = cfq_fifo_expire[1];