vfs: decrapify dput(), fix cache behavior under normal load
We do not want to dirty the dentry->d_flags cacheline in dput() just to set the DCACHE_REFERENCED flag when it is already set in the common case anyway. This way the first cacheline of the dentry (which contains the RCU lookup information etc) can stay shared among multiple CPU's. This finishes off some of the details of all the scalability patches merged during the merge window. Also don't mark dentry_kill() for inlining, since it's the uncommon path and inlining it just makes the common path slower due to extra function entry/exit overhead. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
0baab4fd6d
commit
358eec1824
1 changed files with 3 additions and 2 deletions
|
@ -542,7 +542,7 @@ EXPORT_SYMBOL(d_drop);
|
||||||
* If ref is non-zero, then decrement the refcount too.
|
* If ref is non-zero, then decrement the refcount too.
|
||||||
* Returns dentry requiring refcount drop, or NULL if we're done.
|
* Returns dentry requiring refcount drop, or NULL if we're done.
|
||||||
*/
|
*/
|
||||||
static inline struct dentry *
|
static struct dentry *
|
||||||
dentry_kill(struct dentry *dentry, int unlock_on_failure)
|
dentry_kill(struct dentry *dentry, int unlock_on_failure)
|
||||||
__releases(dentry->d_lock)
|
__releases(dentry->d_lock)
|
||||||
{
|
{
|
||||||
|
@ -630,7 +630,8 @@ void dput(struct dentry *dentry)
|
||||||
goto kill_it;
|
goto kill_it;
|
||||||
}
|
}
|
||||||
|
|
||||||
dentry->d_flags |= DCACHE_REFERENCED;
|
if (!(dentry->d_flags & DCACHE_REFERENCED))
|
||||||
|
dentry->d_flags |= DCACHE_REFERENCED;
|
||||||
dentry_lru_add(dentry);
|
dentry_lru_add(dentry);
|
||||||
|
|
||||||
dentry->d_lockref.count--;
|
dentry->d_lockref.count--;
|
||||||
|
|
Loading…
Reference in a new issue