summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.com>2018-02-13 08:30:48 +1100
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2018-02-16 15:15:08 +0100
commit7e08e9a8942dfc38693edf2e389cde620e918356 (patch)
treebfebad4d652dd55212c133ae95d7e309f9308af2 /drivers
parentac63774689265d50bc1d83ac9b7889ac7e645b5a (diff)
staging: lustre: llite: simplify ll_find_alias()
Now that ll_find_alias is only searching for one type of dentry, we can return as soon as we find it. This allows substantial simplification, and brings the bonus that we don't need to take the d_lock again just to increment the ref-count. We can increment it immediately that the dentry is found. Signed-off-by: NeilBrown <neilb@suse.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/staging/lustre/lustre/llite/namei.c23
1 files changed, 8 insertions, 15 deletions
diff --git a/drivers/staging/lustre/lustre/llite/namei.c b/drivers/staging/lustre/lustre/llite/namei.c
index 2322328155d6..baf94f4bcee9 100644
--- a/drivers/staging/lustre/lustre/llite/namei.c
+++ b/drivers/staging/lustre/lustre/llite/namei.c
@@ -384,13 +384,11 @@ void ll_i2gids(__u32 *suppgids, struct inode *i1, struct inode *i2)
*/
static struct dentry *ll_find_alias(struct inode *inode, struct dentry *dentry)
{
- struct dentry *alias, *invalid_alias;
+ struct dentry *alias;
if (hlist_empty(&inode->i_dentry))
return NULL;
- invalid_alias = NULL;
-
spin_lock(&inode->i_lock);
hlist_for_each_entry(alias, &inode->i_dentry, d_u.d_alias) {
LASSERT(alias != dentry);
@@ -400,22 +398,17 @@ static struct dentry *ll_find_alias(struct inode *inode, struct dentry *dentry)
alias->d_name.hash == dentry->d_name.hash &&
alias->d_name.len == dentry->d_name.len &&
memcmp(alias->d_name.name, dentry->d_name.name,
- dentry->d_name.len) == 0)
- invalid_alias = alias;
- spin_unlock(&alias->d_lock);
-
- if (invalid_alias)
- break;
- }
- alias = invalid_alias ?: NULL;
- if (alias) {
- spin_lock(&alias->d_lock);
- dget_dlock(alias);
+ dentry->d_name.len) == 0) {
+ dget_dlock(alias);
+ spin_unlock(&alias->d_lock);
+ spin_unlock(&inode->i_lock);
+ return alias;
+ }
spin_unlock(&alias->d_lock);
}
spin_unlock(&inode->i_lock);
- return alias;
+ return NULL;
}
/*