diff --git a/block/cfq-iosched.c b/block/cfq-iosched.c
index 5d2047b93eb5373294fe5d344703a34a1e8debc8..85d188a30f8219d95e79fff7aa2d13d8b62efc4c 100644
--- a/block/cfq-iosched.c
+++ b/block/cfq-iosched.c
@@ -2193,10 +2193,9 @@ static void cfq_idle_class_timer(unsigned long data)
 	 * race with a non-idle queue, reset timer
 	 */
 	end = cfqd->last_end_request + CFQ_IDLE_GRACE;
-	if (!time_after_eq(jiffies, end)) {
-		cfqd->idle_class_timer.expires = end;
-		add_timer(&cfqd->idle_class_timer);
-	} else
+	if (!time_after_eq(jiffies, end))
+		mod_timer(&cfqd->idle_class_timer, end);
+	else
 		cfq_schedule_dispatch(cfqd);
 
 	spin_unlock_irqrestore(cfqd->queue->queue_lock, flags);