aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ncpfs
diff options
context:
space:
mode:
authorNick Piggin <npiggin@kernel.dk>2011-01-07 01:49:28 -0500
committerNick Piggin <npiggin@kernel.dk>2011-01-07 01:50:20 -0500
commitb1e6a015a580ad145689ad1d6b4aa0e03e6c868b (patch)
tree57a10ef164e4d2f798d9b832dbeaf973aca2ab83 /fs/ncpfs
parent621e155a3591962420eacdd39f6f0aa29ceb221e (diff)
fs: change d_hash for rcu-walk
Change d_hash so it may be called from lock-free RCU lookups. See similar patch for d_compare for details. For in-tree filesystems, this is just a mechanical change. Signed-off-by: Nick Piggin <npiggin@kernel.dk>
Diffstat (limited to 'fs/ncpfs')
-rw-r--r--fs/ncpfs/dir.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/fs/ncpfs/dir.c b/fs/ncpfs/dir.c
index 3bcc68aed416..bbbf7922f422 100644
--- a/fs/ncpfs/dir.c
+++ b/fs/ncpfs/dir.c
@@ -74,7 +74,8 @@ const struct inode_operations ncp_dir_inode_operations =
74 * Dentry operations routines 74 * Dentry operations routines
75 */ 75 */
76static int ncp_lookup_validate(struct dentry *, struct nameidata *); 76static int ncp_lookup_validate(struct dentry *, struct nameidata *);
77static int ncp_hash_dentry(struct dentry *, struct qstr *); 77static int ncp_hash_dentry(const struct dentry *, const struct inode *,
78 struct qstr *);
78static int ncp_compare_dentry(const struct dentry *, const struct inode *, 79static int ncp_compare_dentry(const struct dentry *, const struct inode *,
79 const struct dentry *, const struct inode *, 80 const struct dentry *, const struct inode *,
80 unsigned int, const char *, const struct qstr *); 81 unsigned int, const char *, const struct qstr *);
@@ -129,9 +130,10 @@ static inline int ncp_case_sensitive(const struct inode *i)
129 * is case-sensitive. 130 * is case-sensitive.
130 */ 131 */
131static int 132static int
132ncp_hash_dentry(struct dentry *dentry, struct qstr *this) 133ncp_hash_dentry(const struct dentry *dentry, const struct inode *inode,
134 struct qstr *this)
133{ 135{
134 if (!ncp_case_sensitive(dentry->d_inode)) { 136 if (!ncp_case_sensitive(inode)) {
135 struct super_block *sb = dentry->d_sb; 137 struct super_block *sb = dentry->d_sb;
136 struct nls_table *t; 138 struct nls_table *t;
137 unsigned long hash; 139 unsigned long hash;
@@ -597,7 +599,7 @@ ncp_fill_cache(struct file *filp, void *dirent, filldir_t filldir,
597 qname.hash = full_name_hash(qname.name, qname.len); 599 qname.hash = full_name_hash(qname.name, qname.len);
598 600
599 if (dentry->d_op && dentry->d_op->d_hash) 601 if (dentry->d_op && dentry->d_op->d_hash)
600 if (dentry->d_op->d_hash(dentry, &qname) != 0) 602 if (dentry->d_op->d_hash(dentry, dentry->d_inode, &qname) != 0)
601 goto end_advance; 603 goto end_advance;
602 604
603 newdent = d_lookup(dentry, &qname); 605 newdent = d_lookup(dentry, &qname);