|
@@ -2412,8 +2412,13 @@ reflush:
|
|
|
|
|
|
for_each_cwq_cpu(cpu, wq) {
|
|
|
struct cpu_workqueue_struct *cwq = get_cwq(cpu, wq);
|
|
|
+ bool drained;
|
|
|
|
|
|
- if (!cwq->nr_active && list_empty(&cwq->delayed_works))
|
|
|
+ spin_lock_irq(&cwq->gcwq->lock);
|
|
|
+ drained = !cwq->nr_active && list_empty(&cwq->delayed_works);
|
|
|
+ spin_unlock_irq(&cwq->gcwq->lock);
|
|
|
+
|
|
|
+ if (drained)
|
|
|
continue;
|
|
|
|
|
|
if (++flush_cnt == 10 ||
|