Commit ae818a38 authored by Jens Axboe's avatar Jens Axboe

[PATCH] cfq-iosched: fix bug in timer handling for the idle class

There's a small window from when the timer is entered and we grab
the queue lock, where cfq_set_active_queue() could be rearming the
timer for us. Seen in the wild on a 12-way ppc box. Fix this by
just using mod_timer(), which will do the right thing for us.
Signed-off-by: default avatarJens Axboe <axboe@suse.de>
parent 25776e35
...@@ -2193,10 +2193,9 @@ static void cfq_idle_class_timer(unsigned long data) ...@@ -2193,10 +2193,9 @@ static void cfq_idle_class_timer(unsigned long data)
* race with a non-idle queue, reset timer * race with a non-idle queue, reset timer
*/ */
end = cfqd->last_end_request + CFQ_IDLE_GRACE; end = cfqd->last_end_request + CFQ_IDLE_GRACE;
if (!time_after_eq(jiffies, end)) { if (!time_after_eq(jiffies, end))
cfqd->idle_class_timer.expires = end; mod_timer(&cfqd->idle_class_timer, end);
add_timer(&cfqd->idle_class_timer); else
} else
cfq_schedule_dispatch(cfqd); cfq_schedule_dispatch(cfqd);
spin_unlock_irqrestore(cfqd->queue->queue_lock, flags); spin_unlock_irqrestore(cfqd->queue->queue_lock, flags);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment