On Tue, Aug 22, 2017 at 09:52:38AM +0200, Peter Zijlstra wrote: > That wouldn't work. That annotation is to help find deadlocks like: > > > mutex_lock(&A) > <work> > mutex_lock(&A) > > flush_work(&work) >
I meant: mutex_lock(&A) <work> lockdep_map_acquire_read(&work) mutex_lock(&A) lockdep_map_acquire(&work) flush_work(&work) I mean it can still be detected with a read acquisition in work. Am I wrong? > The 'fake' lock connects the lock chain inside the work to the > lock-chain at flush_work() and thus detects these. That's perfectly > fine. > > It just seems to confuse the completions stuff... Let me go read Dave's > email and see if I can come up with something.