From 694a61995ff25f754cd0136474cf519f4e5c1fe1 Mon Sep 17 00:00:00 2001 From: "J. Bruce Fields" Date: Tue, 18 Jan 2011 15:45:09 -0500 Subject: [PATCH] --- yaml --- r: 234041 b: refs/heads/master c: d891eedbc3b1b0fade8a9ce60cc0eba1cccb59e5 h: refs/heads/master i: 234039: 9793d90353bb85a60b04de316f85a70513cf344c v: v3 --- [refs] | 2 +- trunk/fs/dcache.c | 26 ++++++++++++++++++++++++-- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index f7f5aea3efac..4c517ebadf65 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 1ca551c6caae7b52178555cdedea6ca26444be46 +refs/heads/master: d891eedbc3b1b0fade8a9ce60cc0eba1cccb59e5 diff --git a/trunk/fs/dcache.c b/trunk/fs/dcache.c index 2a6bd9a4ae97..611ffe928c03 100644 --- a/trunk/fs/dcache.c +++ b/trunk/fs/dcache.c @@ -1523,6 +1523,28 @@ struct dentry * d_alloc_root(struct inode * root_inode) } EXPORT_SYMBOL(d_alloc_root); +static struct dentry * __d_find_any_alias(struct inode *inode) +{ + struct dentry *alias; + + if (list_empty(&inode->i_dentry)) + return NULL; + alias = list_first_entry(&inode->i_dentry, struct dentry, d_alias); + __dget(alias); + return alias; +} + +static struct dentry * d_find_any_alias(struct inode *inode) +{ + struct dentry *de; + + spin_lock(&inode->i_lock); + de = __d_find_any_alias(inode); + spin_unlock(&inode->i_lock); + return de; +} + + /** * d_obtain_alias - find or allocate a dentry for a given inode * @inode: inode to allocate the dentry for @@ -1552,7 +1574,7 @@ struct dentry *d_obtain_alias(struct inode *inode) if (IS_ERR(inode)) return ERR_CAST(inode); - res = d_find_alias(inode); + res = d_find_any_alias(inode); if (res) goto out_iput; @@ -1565,7 +1587,7 @@ struct dentry *d_obtain_alias(struct inode *inode) spin_lock(&inode->i_lock); - res = __d_find_alias(inode, 0); + res = __d_find_any_alias(inode); if (res) { spin_unlock(&inode->i_lock); dput(tmp);