diff options
-rw-r--r-- | kernel/workqueue.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/kernel/workqueue.c b/kernel/workqueue.c index 558733801ac0..b59c946433f4 100644 --- a/kernel/workqueue.c +++ b/kernel/workqueue.c | |||
@@ -2138,6 +2138,10 @@ void flush_workqueue(struct workqueue_struct *wq) | |||
2138 | 2138 | ||
2139 | mutex_lock(&wq->flush_mutex); | 2139 | mutex_lock(&wq->flush_mutex); |
2140 | 2140 | ||
2141 | /* we might have raced, check again with mutex held */ | ||
2142 | if (wq->first_flusher != &this_flusher) | ||
2143 | goto out_unlock; | ||
2144 | |||
2141 | wq->first_flusher = NULL; | 2145 | wq->first_flusher = NULL; |
2142 | 2146 | ||
2143 | BUG_ON(!list_empty(&this_flusher.list)); | 2147 | BUG_ON(!list_empty(&this_flusher.list)); |