unify dentry_iput() and dentry_unlink_inode()
authorAl Viro <viro@zeniv.linux.org.uk>
Mon, 30 May 2016 00:13:30 +0000 (20:13 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Mon, 30 May 2016 00:28:22 +0000 (20:28 -0400)
commit550dce01dd606c88a837138aa448ccd367fb0cbb
treee6cc564fc18e012ed2bdd76ee5e5d0785c310c50
parentea7d4c046ba6e2c6135c98721f4f09efd1adaabc
unify dentry_iput() and dentry_unlink_inode()

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: Al Viro <viro@zeniv.linux.org.uk>
fs/dcache.c