diff options
author | Nick Piggin <npiggin@kernel.dk> | 2011-01-07 01:49:27 -0500 |
---|---|---|
committer | Nick Piggin <npiggin@kernel.dk> | 2011-01-07 01:50:19 -0500 |
commit | 621e155a3591962420eacdd39f6f0aa29ceb221e (patch) | |
tree | 387a9fb396f1bf24514b712c294182e36ba51076 /fs/cifs/dir.c | |
parent | fb2d5b86aff355a27ebfc132d3c99f4a940cc3fe (diff) |
fs: change d_compare for rcu-walk
Change d_compare so it may be called from lock-free RCU lookups. This
does put significant restrictions on what may be done from the callback,
however there don't seem to have been any problems with in-tree fses.
If some strange use case pops up that _really_ cannot cope with the
rcu-walk rules, we can just add new rcu-unaware callbacks, which would
cause name lookup to drop out of rcu-walk mode.
For in-tree filesystems, this is just a mechanical change.
Signed-off-by: Nick Piggin <npiggin@kernel.dk>
Diffstat (limited to 'fs/cifs/dir.c')
-rw-r--r-- | fs/cifs/dir.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/fs/cifs/dir.c b/fs/cifs/dir.c index 521d841b1fd1..c60133f0d8e4 100644 --- a/fs/cifs/dir.c +++ b/fs/cifs/dir.c | |||
@@ -715,13 +715,15 @@ static int cifs_ci_hash(struct dentry *dentry, struct qstr *q) | |||
715 | return 0; | 715 | return 0; |
716 | } | 716 | } |
717 | 717 | ||
718 | static int cifs_ci_compare(struct dentry *dentry, struct qstr *a, | 718 | static int cifs_ci_compare(const struct dentry *parent, |
719 | struct qstr *b) | 719 | const struct inode *pinode, |
720 | const struct dentry *dentry, const struct inode *inode, | ||
721 | unsigned int len, const char *str, const struct qstr *name) | ||
720 | { | 722 | { |
721 | struct nls_table *codepage = CIFS_SB(dentry->d_inode->i_sb)->local_nls; | 723 | struct nls_table *codepage = CIFS_SB(pinode->i_sb)->local_nls; |
722 | 724 | ||
723 | if ((a->len == b->len) && | 725 | if ((name->len == len) && |
724 | (nls_strnicmp(codepage, a->name, b->name, a->len) == 0)) | 726 | (nls_strnicmp(codepage, name->name, str, len) == 0)) |
725 | return 0; | 727 | return 0; |
726 | return 1; | 728 | return 1; |
727 | } | 729 | } |