Skip to content

Commit

Permalink
vfs: move dentry name length comparison from dentry_cmp() into callers
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Linus Torvalds committed May 11, 2012
1 parent 94753db commit ee983e8
Showing 1 changed file with 6 additions and 3 deletions.
9 changes: 6 additions & 3 deletions fs/dcache.c
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -1882,6 +1881,8 @@ struct dentry *__d_lookup_rcu(const struct dentry *parent,
}
}

if (dentry->d_name.len != len)
continue;
if (!dentry_cmp(dentry, str, len))
return dentry;
}
Expand Down Expand Up @@ -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;
}
Expand Down

0 comments on commit ee983e8

Please sign in to comment.