|
@@ -2652,6 +2652,9 @@ void flush_workqueue(struct workqueue_struct *wq)
|
|
if (WARN_ON(!wq_online))
|
|
if (WARN_ON(!wq_online))
|
|
return;
|
|
return;
|
|
|
|
|
|
|
|
+ lock_map_acquire(&wq->lockdep_map);
|
|
|
|
+ lock_map_release(&wq->lockdep_map);
|
|
|
|
+
|
|
mutex_lock(&wq->mutex);
|
|
mutex_lock(&wq->mutex);
|
|
|
|
|
|
/*
|
|
/*
|
|
@@ -2905,6 +2908,11 @@ static bool __flush_work(struct work_struct *work, bool from_cancel)
|
|
if (WARN_ON(!wq_online))
|
|
if (WARN_ON(!wq_online))
|
|
return false;
|
|
return false;
|
|
|
|
|
|
|
|
+ if (!from_cancel) {
|
|
|
|
+ lock_map_acquire(&work->lockdep_map);
|
|
|
|
+ lock_map_release(&work->lockdep_map);
|
|
|
|
+ }
|
|
|
|
+
|
|
if (start_flush_work(work, &barr, from_cancel)) {
|
|
if (start_flush_work(work, &barr, from_cancel)) {
|
|
wait_for_completion(&barr.done);
|
|
wait_for_completion(&barr.done);
|
|
destroy_work_on_stack(&barr.work);
|
|
destroy_work_on_stack(&barr.work);
|