The attached patch optimises d_find_alias() to only take the spinlock if there's anything in the the inode's alias list. If there isn't, it returns NULL immediately. The following changes were made in [try #7]: (*) The memory barrier was removed. Signed-Off-By: David Howells <dhowells@xxxxxxxxxx> --- fs/dcache.c | 10 ++++++---- 1 files changed, 6 insertions(+), 4 deletions(-) diff --git a/fs/dcache.c b/fs/dcache.c index 9eb2698..bb309f5 100644 --- a/fs/dcache.c +++ b/fs/dcache.c @@ -325,10 +325,12 @@ static struct dentry * __d_find_alias(st struct dentry * d_find_alias(struct inode *inode) { - struct dentry *de; - spin_lock(&dcache_lock); - de = __d_find_alias(inode, 0); - spin_unlock(&dcache_lock); + struct dentry *de = NULL; + if (!list_empty(&inode->i_dentry)) { + spin_lock(&dcache_lock); + de = __d_find_alias(inode, 0); + spin_unlock(&dcache_lock); + } return de; }