dcache: add missing lockdep annotation
authorLinus Torvalds <torvalds@linux-foundation.org>
Sat, 31 May 2014 16:13:21 +0000 (09:13 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sat, 31 May 2014 16:13:21 +0000 (09:13 -0700)
lock_parent() very much on purpose does nested locking of dentries, and
is careful to maintain the right order (lock parent first).  But because
it didn't annotate the nested locking order, lockdep thought it might be
a deadlock on d_lock, and complained.

Add the proper annotation for the inner locking of the child dentry to
make lockdep happy.

Introduced by commit 046b961b45f9 ("shrink_dentry_list(): take parent's
->d_lock earlier").

Reported-and-tested-by: Josh Boyer <jwboyer@fedoraproject.org>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
fs/dcache.c

index bce851dc03ef96bd18189796c3bb76c0a29901cf..be2bea834bf459563e2d03e1e0fa8dec97b49c70 100644 (file)
@@ -553,7 +553,7 @@ again:
        }
        rcu_read_unlock();
        if (parent != dentry)
-               spin_lock(&dentry->d_lock);
+               spin_lock_nested(&dentry->d_lock, DENTRY_D_LOCK_NESTED);
        else
                parent = NULL;
        return parent;