diff options
author | Nick Piggin <npiggin@kernel.dk> | 2011-01-07 01:49:28 -0500 |
---|---|---|
committer | Nick Piggin <npiggin@kernel.dk> | 2011-01-07 01:50:20 -0500 |
commit | b1e6a015a580ad145689ad1d6b4aa0e03e6c868b (patch) | |
tree | 57a10ef164e4d2f798d9b832dbeaf973aca2ab83 /fs/ncpfs | |
parent | 621e155a3591962420eacdd39f6f0aa29ceb221e (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.c | 10 |
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 | */ |
76 | static int ncp_lookup_validate(struct dentry *, struct nameidata *); | 76 | static int ncp_lookup_validate(struct dentry *, struct nameidata *); |
77 | static int ncp_hash_dentry(struct dentry *, struct qstr *); | 77 | static int ncp_hash_dentry(const struct dentry *, const struct inode *, |
78 | struct qstr *); | ||
78 | static int ncp_compare_dentry(const struct dentry *, const struct inode *, | 79 | static 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 | */ |
131 | static int | 132 | static int |
132 | ncp_hash_dentry(struct dentry *dentry, struct qstr *this) | 133 | ncp_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); |