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.

Reply via email to