diff options
author | Nick Piggin <npiggin@kernel.dk> | 2011-01-07 01:49:57 -0500 |
---|---|---|
committer | Nick Piggin <npiggin@kernel.dk> | 2011-01-07 01:50:29 -0500 |
commit | 34286d6662308d82aed891852d04c7c3a2649b16 (patch) | |
tree | c4b7311404d302e7cb94df7a4690298e1059910a /fs/coda | |
parent | 44a7d7a878c9cbb74f236ea755b25b6b2e26a9a9 (diff) |
fs: rcu-walk aware d_revalidate method
Require filesystems be aware of .d_revalidate being called in rcu-walk
mode (nd->flags & LOOKUP_RCU). For now do a simple push down, returning
-ECHILD from all implementations.
Signed-off-by: Nick Piggin <npiggin@kernel.dk>
Diffstat (limited to 'fs/coda')
-rw-r--r-- | fs/coda/dir.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/fs/coda/dir.c b/fs/coda/dir.c index aa40c811f8d2..619a8303766e 100644 --- a/fs/coda/dir.c +++ b/fs/coda/dir.c | |||
@@ -18,6 +18,7 @@ | |||
18 | #include <linux/errno.h> | 18 | #include <linux/errno.h> |
19 | #include <linux/string.h> | 19 | #include <linux/string.h> |
20 | #include <linux/spinlock.h> | 20 | #include <linux/spinlock.h> |
21 | #include <linux/namei.h> | ||
21 | 22 | ||
22 | #include <asm/uaccess.h> | 23 | #include <asm/uaccess.h> |
23 | 24 | ||
@@ -541,9 +542,13 @@ out: | |||
541 | /* called when a cache lookup succeeds */ | 542 | /* called when a cache lookup succeeds */ |
542 | static int coda_dentry_revalidate(struct dentry *de, struct nameidata *nd) | 543 | static int coda_dentry_revalidate(struct dentry *de, struct nameidata *nd) |
543 | { | 544 | { |
544 | struct inode *inode = de->d_inode; | 545 | struct inode *inode; |
545 | struct coda_inode_info *cii; | 546 | struct coda_inode_info *cii; |
546 | 547 | ||
548 | if (nd->flags & LOOKUP_RCU) | ||
549 | return -ECHILD; | ||
550 | |||
551 | inode = de->d_inode; | ||
547 | if (!inode || coda_isroot(inode)) | 552 | if (!inode || coda_isroot(inode)) |
548 | goto out; | 553 | goto out; |
549 | if (is_bad_inode(inode)) | 554 | if (is_bad_inode(inode)) |