Commit 0145acc202ca613b23b5383e55df3c32a92ad1bf

Authored by Linus Torvalds
1 parent 8966be9030

vfs: uninline full_name_hash()

.. and also use it in lookup_one_len() rather than open-coding it.

There aren't any performance-critical users, so inlining it is silly.
But it wouldn't matter if it wasn't for the fact that the word-at-a-time
dentry name patches want to conditionally replace the function, and
uninlining it sets the stage for that.

So again, this is a preparatory patch that doesn't change any semantics,
and only prepares for a much cleaner and testable word-at-a-time dentry
name accessor patch.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

Showing 2 changed files with 10 additions and 12 deletions Side-by-side Diff

... ... @@ -1374,6 +1374,14 @@
1374 1374 return 1;
1375 1375 }
1376 1376  
  1377 +unsigned int full_name_hash(const unsigned char *name, unsigned int len)
  1378 +{
  1379 + unsigned long hash = init_name_hash();
  1380 + while (len--)
  1381 + hash = partial_name_hash(*name++, hash);
  1382 + return end_name_hash(hash);
  1383 +}
  1384 +
1377 1385 /*
1378 1386 * Name resolution.
1379 1387 * This is the basic name resolution function, turning a pathname into
1380 1388  
1381 1389  
1382 1390  
1383 1391  
... ... @@ -1775,24 +1783,21 @@
1775 1783 struct dentry *lookup_one_len(const char *name, struct dentry *base, int len)
1776 1784 {
1777 1785 struct qstr this;
1778   - unsigned long hash;
1779 1786 unsigned int c;
1780 1787  
1781 1788 WARN_ON_ONCE(!mutex_is_locked(&base->d_inode->i_mutex));
1782 1789  
1783 1790 this.name = name;
1784 1791 this.len = len;
  1792 + this.hash = full_name_hash(name, len);
1785 1793 if (!len)
1786 1794 return ERR_PTR(-EACCES);
1787 1795  
1788   - hash = init_name_hash();
1789 1796 while (len--) {
1790 1797 c = *(const unsigned char *)name++;
1791 1798 if (c == '/' || c == '\0')
1792 1799 return ERR_PTR(-EACCES);
1793   - hash = partial_name_hash(c, hash);
1794 1800 }
1795   - this.hash = end_name_hash(hash);
1796 1801 /*
1797 1802 * See if the low-level filesystem might want
1798 1803 * to use its own hash..
include/linux/dcache.h
... ... @@ -89,14 +89,7 @@
89 89 }
90 90  
91 91 /* Compute the hash for a name string. */
92   -static inline unsigned int
93   -full_name_hash(const unsigned char *name, unsigned int len)
94   -{
95   - unsigned long hash = init_name_hash();
96   - while (len--)
97   - hash = partial_name_hash(*name++, hash);
98   - return end_name_hash(hash);
99   -}
  92 +extern unsigned int full_name_hash(const unsigned char *, unsigned int);
100 93  
101 94 /*
102 95 * Try to keep struct dentry aligned on 64 byte cachelines (this will