diff options
Diffstat (limited to 'fs/afs/dir.c')
-rw-r--r-- | fs/afs/dir.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/fs/afs/dir.c b/fs/afs/dir.c index 5439e1bc9a86..34a3263d60a4 100644 --- a/fs/afs/dir.c +++ b/fs/afs/dir.c | |||
@@ -13,6 +13,7 @@ | |||
13 | #include <linux/module.h> | 13 | #include <linux/module.h> |
14 | #include <linux/init.h> | 14 | #include <linux/init.h> |
15 | #include <linux/fs.h> | 15 | #include <linux/fs.h> |
16 | #include <linux/namei.h> | ||
16 | #include <linux/pagemap.h> | 17 | #include <linux/pagemap.h> |
17 | #include <linux/ctype.h> | 18 | #include <linux/ctype.h> |
18 | #include <linux/sched.h> | 19 | #include <linux/sched.h> |
@@ -23,7 +24,7 @@ static struct dentry *afs_lookup(struct inode *dir, struct dentry *dentry, | |||
23 | static int afs_dir_open(struct inode *inode, struct file *file); | 24 | static int afs_dir_open(struct inode *inode, struct file *file); |
24 | static int afs_readdir(struct file *file, void *dirent, filldir_t filldir); | 25 | static int afs_readdir(struct file *file, void *dirent, filldir_t filldir); |
25 | static int afs_d_revalidate(struct dentry *dentry, struct nameidata *nd); | 26 | static int afs_d_revalidate(struct dentry *dentry, struct nameidata *nd); |
26 | static int afs_d_delete(struct dentry *dentry); | 27 | static int afs_d_delete(const struct dentry *dentry); |
27 | static void afs_d_release(struct dentry *dentry); | 28 | static void afs_d_release(struct dentry *dentry); |
28 | static int afs_lookup_filldir(void *_cookie, const char *name, int nlen, | 29 | static int afs_lookup_filldir(void *_cookie, const char *name, int nlen, |
29 | loff_t fpos, u64 ino, unsigned dtype); | 30 | loff_t fpos, u64 ino, unsigned dtype); |
@@ -581,7 +582,7 @@ static struct dentry *afs_lookup(struct inode *dir, struct dentry *dentry, | |||
581 | } | 582 | } |
582 | 583 | ||
583 | success: | 584 | success: |
584 | dentry->d_op = &afs_fs_dentry_operations; | 585 | d_set_d_op(dentry, &afs_fs_dentry_operations); |
585 | 586 | ||
586 | d_add(dentry, inode); | 587 | d_add(dentry, inode); |
587 | _leave(" = 0 { vn=%u u=%u } -> { ino=%lu v=%llu }", | 588 | _leave(" = 0 { vn=%u u=%u } -> { ino=%lu v=%llu }", |
@@ -607,6 +608,9 @@ static int afs_d_revalidate(struct dentry *dentry, struct nameidata *nd) | |||
607 | void *dir_version; | 608 | void *dir_version; |
608 | int ret; | 609 | int ret; |
609 | 610 | ||
611 | if (nd->flags & LOOKUP_RCU) | ||
612 | return -ECHILD; | ||
613 | |||
610 | vnode = AFS_FS_I(dentry->d_inode); | 614 | vnode = AFS_FS_I(dentry->d_inode); |
611 | 615 | ||
612 | if (dentry->d_inode) | 616 | if (dentry->d_inode) |
@@ -730,7 +734,7 @@ out_bad: | |||
730 | * - called from dput() when d_count is going to 0. | 734 | * - called from dput() when d_count is going to 0. |
731 | * - return 1 to request dentry be unhashed, 0 otherwise | 735 | * - return 1 to request dentry be unhashed, 0 otherwise |
732 | */ | 736 | */ |
733 | static int afs_d_delete(struct dentry *dentry) | 737 | static int afs_d_delete(const struct dentry *dentry) |
734 | { | 738 | { |
735 | _enter("%s", dentry->d_name.name); | 739 | _enter("%s", dentry->d_name.name); |
736 | 740 | ||