diff options
author | Thomas Tuttle <[email protected]> | 2011-09-14 16:22:28 -0700 |
---|---|---|
committer | Linus Torvalds <[email protected]> | 2011-09-14 18:09:38 -0700 |
commit | fa2563e41c3d6d6e8af437643981ed28ae0cb56d (patch) | |
tree | 7d0dbcc4214a3bceb4d1dd9251df88752c1313b5 /lib/mpi/mpiutil.c | |
parent | df4e33ad249b7480d6ba5dd11fc1dac5cfaffce1 (diff) |
workqueue: lock cwq access in drain_workqueue
Take cwq->gcwq->lock to avoid racing between drain_workqueue checking to
make sure the workqueues are empty and cwq_dec_nr_in_flight decrementing
and then incrementing nr_active when it activates a delayed work.
We discovered this when a corner case in one of our drivers resulted in
us trying to destroy a workqueue in which the remaining work would
always requeue itself again in the same workqueue. We would hit this
race condition and trip the BUG_ON on workqueue.c:3080.
Signed-off-by: Thomas Tuttle <[email protected]>
Acked-by: Tejun Heo <[email protected]>
Cc: <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
Diffstat (limited to 'lib/mpi/mpiutil.c')
0 files changed, 0 insertions, 0 deletions