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

