workqueue: fix data race with the pwq->stats[] increment
Changes
1 files changed · +1 −1
| File | Status | Add | Del | Content |
|---|---|---|---|---|
| kernel/workqueue.c | modified | +1 | −1 | View file |
kernel/workqueue.c
View filediff --git a/kernel/workqueue.c b/kernel/workqueue.c
index d4364d3..c85825e 100644
--- a/kernel/workqueue.c
+++ b/kernel/workqueue.c
@@ -2599,6 +2599,7 @@ __acquires(&pool->lock)
*/
set_work_pool_and_clear_pending(work, pool->id);
+ pwq->stats[PWQ_STAT_STARTED]++;
raw_spin_unlock_irq(&pool->lock);
lock_map_acquire(&pwq->wq->lockdep_map);
@@ -2625,7 +2626,6 @@ __acquires(&pool->lock)
* workqueues), so hiding them isn't a problem.
*/
lockdep_invariant_state(true);
- pwq->stats[PWQ_STAT_STARTED]++;
trace_workqueue_execute_start(work);
worker->current_func(work);
/*