vfs: move dentry name length comparison from dentry_cmp() into callers
authorLinus Torvalds <torvalds@linux-foundation.org>
Thu, 10 May 2012 19:37:10 +0000 (12:37 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 11 May 2012 02:54:35 +0000 (19:54 -0700)
All callers do want to check the dentry length, but some of them can
check the length and the hash together, so doing it in dentry_cmp() can
be counter-productive.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
fs/dcache.c

index 5c09ad7..e6707a1 100644 (file)
@@ -192,9 +192,6 @@ static inline int dentry_string_cmp(const unsigned char *cs, const unsigned char
 
 static inline int dentry_cmp(const struct dentry *dentry, const unsigned char *ct, unsigned tcount)
 {
-       if (dentry->d_name.len != tcount)
-               return 1;
-
        /*
         * Be careful about RCU walk racing with rename:
         * use ACCESS_ONCE to fetch the name pointer.
@@ -1464,6 +1461,8 @@ static struct dentry *__d_instantiate_unique(struct dentry *entry,
                        continue;
                if (alias->d_parent != entry->d_parent)
                        continue;
+               if (alias->d_name.len != len)
+                       continue;
                if (dentry_cmp(alias, name, len))
                        continue;
                __dget(alias);
@@ -1882,6 +1881,8 @@ seqretry:
                        }
                }
 
+               if (dentry->d_name.len != len)
+                       continue;
                if (!dentry_cmp(dentry, str, len))
                        return dentry;
        }
@@ -1984,6 +1985,8 @@ struct dentry *__d_lookup(struct dentry *parent, struct qstr *name)
                                                tlen, tname, name))
                                goto next;
                } else {
+                       if (dentry->d_name.len != len)
+                               goto next;
                        if (dentry_cmp(dentry, str, len))
                                goto next;
                }