mirror of
https://github.com/torvalds/linux.git
synced 2024-12-27 21:33:00 +00:00
[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: Jens Axboe <axboe@suse.de>
This commit is contained in:
parent
25776e3594
commit
ae818a38d4
@ -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);
|
||||||
|
Loading…
Reference in New Issue
Block a user