staging: lustre: llite: simplify ll_find_alias()
authorNeilBrown <neilb@suse.com>
Mon, 12 Feb 2018 21:30:48 +0000 (08:30 +1100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 16 Feb 2018 14:15:08 +0000 (15:15 +0100)
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>
drivers/staging/lustre/lustre/llite/namei.c

index 2322328155d695f146d1a5069f55ee7e78a34735..baf94f4bcee9e00ed33b5714c7d3e354358ed65c 100644 (file)
@@ -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;
 }
 
 /*