Tejun Heo 4ce48b37bf workqueue: fix race condition in flush_workqueue()
When one flusher is cascading to the next flusher, it first sets
wq->first_flusher to the next one and sets up the next flush cycle.
If there's nothing to do for the next cycle, it clears
wq->flush_flusher and proceeds to the one after that.

If the woken up flusher checks wq->first_flusher before it gets
cleared, it will incorrectly assume the role of the first flusher,
which triggers BUG_ON() sanity check.

Fix it by checking wq->first_flusher again after grabbing the mutex.

Signed-off-by: Tejun Heo <tj@kernel.org>
2010-07-02 10:03:51 +02:00
..
2009-09-21 14:29:21 +02:00
2010-05-18 08:57:00 +10:00
2010-05-19 11:48:18 -07:00
2009-09-18 09:48:52 -07:00
2010-06-08 21:40:37 +02:00
2010-05-26 16:15:37 +02:00
2010-05-11 17:33:42 -07:00
2010-06-29 10:07:09 +02:00
2010-05-19 08:18:44 +02:00
2010-05-27 09:12:53 -07:00
2010-05-17 00:21:03 +02:00
2010-02-10 17:47:17 -08:00
2010-05-11 12:01:10 -07:00
2010-04-02 20:12:05 +02:00
2010-06-08 21:40:37 +02:00
2010-03-12 15:52:32 -08:00
2010-05-24 11:50:38 +02:00
2010-03-06 11:26:23 -08:00
2009-09-23 18:13:10 -07:00
2010-05-21 09:37:29 -07:00
2010-05-10 08:48:39 +02:00