split the slow part of lock_parent() off
Turn the "trylock failed" part into uninlined __lock_parent(). Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
65d8eb5a8f
commit
8b987a46a1
18
fs/dcache.c
18
fs/dcache.c
|
@ -588,13 +588,9 @@ static void __dentry_kill(struct dentry *dentry)
|
|||
dentry_free(dentry);
|
||||
}
|
||||
|
||||
static inline struct dentry *lock_parent(struct dentry *dentry)
|
||||
static struct dentry *__lock_parent(struct dentry *dentry)
|
||||
{
|
||||
struct dentry *parent = dentry->d_parent;
|
||||
if (IS_ROOT(dentry))
|
||||
return NULL;
|
||||
if (likely(spin_trylock(&parent->d_lock)))
|
||||
return parent;
|
||||
struct dentry *parent;
|
||||
rcu_read_lock();
|
||||
spin_unlock(&dentry->d_lock);
|
||||
again:
|
||||
|
@ -620,6 +616,16 @@ static inline struct dentry *lock_parent(struct dentry *dentry)
|
|||
return parent;
|
||||
}
|
||||
|
||||
static inline struct dentry *lock_parent(struct dentry *dentry)
|
||||
{
|
||||
struct dentry *parent = dentry->d_parent;
|
||||
if (IS_ROOT(dentry))
|
||||
return NULL;
|
||||
if (likely(spin_trylock(&parent->d_lock)))
|
||||
return parent;
|
||||
return __lock_parent(dentry);
|
||||
}
|
||||
|
||||
/*
|
||||
* Finish off a dentry we've decided to kill.
|
||||
* dentry->d_lock must be held, returns with it unlocked.
|
||||
|
|
Loading…
Reference in New Issue
Block a user