• Al Viro's avatar
    unify dentry_iput() and dentry_unlink_inode() · 550dce01
    Al Viro authored
    There is a lot of duplication between dentry_unlink_inode() and dentry_iput().
    The only real difference is that dentry_unlink_inode() bumps ->d_seq and
    dentry_iput() doesn't.  The argument of the latter is known to have been
    unhashed, so anybody who might've found it in RCU lookup would already be
    doomed to a ->d_seq mismatch.  And we want to avoid pointless smp_rmb() there.
    This patch makes dentry_unlink_inode() bump ->d_seq only for hashed dentries.
    It's safe (d_delete() calls that sucker only if we are holding the only
    reference to dentry, so rehash is not going to happen) and it allows
    to use dentry_unlink_inode() in __dentry_kill() and get rid of dentry_iput().
    The interesting question here is profiling; it *is* a hot path, and extra
    conditional jumps in there might or might not be painful.
    Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
dcache.c 93.8 KB