diff --git a/mm/vmstat.c b/mm/vmstat.c
index e60b36f5f0a9ee8c0ba577489f3206869f3a64af..74b2c374b86c8a1728a9a7e118af830796ea9691 100644
--- a/mm/vmstat.c
+++ b/mm/vmstat.c
@@ -1980,6 +1980,8 @@ static void vmstat_shepherd(struct work_struct *w)
 
 		if (!delayed_work_pending(dw) && need_update(cpu))
 			queue_delayed_work_on(cpu, mm_percpu_wq, dw, 0);
+
+		cond_resched();
 	}
 	put_online_cpus();