Messages in this thread | | | Subject | Re: [PATCH 1/3] kernel/workqueue: Remove lockdep annotation from __flush_work() | From | Johannes Berg <> | Date | Thu, 25 Oct 2018 17:31:27 +0200 |
| |
On Thu, 2018-10-25 at 15:05 +0000, Bart Van Assche wrote: > As documented in a comment in start_flush_work(), calling flush_work() > from a multi-threaded workqueue is safe if that workqueue is not > equipped with a rescuer. Avoid that flush_work() calls from inside a > work item executing on such a queue trigger a lockdep complaint.
So ... not sure I understand, do you happen to have an example (at least conceptually) that shows the problem?
Something like
workqueue WQ, works W1, W2
W1 running on WQ -> flush_work(W2) also running on WQ?
I'm willing to believe that this is a corner case I missed with the annotations since the rescuer things are tricky, but I don't think removing them is the right thing to do.
> Remove > the lockdep annotation from __flush_work() because start_flush_work() > already has such an annotation.
This part at least isn't true, there's no annotation on the work *struct*, only one on the work *queue*.
johannes
| |