• Al Viro's avatar
    d_prune_alias(): just lock the parent and call __dentry_kill() · 29355c39
    Al Viro authored
    The only reason for games with ->d_prune() was __d_drop(), which
    was needed only to force dput() into killing the sucker off.
    
    Note that lock_parent() can be called under ->i_lock and won't
    drop it, so dentry is safe from somebody managing to kill it
    under us - it won't happen while we are holding ->i_lock.
    
    __dentry_kill() is called only with ->d_lockref.count being 0
    (here and when picked from shrink list) or 1 (dput() and dropping
    the ancestors in shrink_dentry_list()), so it will never be called
    twice - the first thing it's doing is making ->d_lockref.count
    negative and once that happens, nothing will increment it.
    Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
    29355c39
dcache.c 87.8 KB