diff options
| -rw-r--r-- | Documentation/filesystems/vfs.txt | 6 | ||||
| -rw-r--r-- | fs/autofs4/root.c | 6 | ||||
| -rw-r--r-- | fs/namei.c | 7 | ||||
| -rw-r--r-- | include/linux/dcache.h | 2 |
4 files changed, 8 insertions, 13 deletions
diff --git a/Documentation/filesystems/vfs.txt b/Documentation/filesystems/vfs.txt index ef0714aa8e40..306f0ae8df09 100644 --- a/Documentation/filesystems/vfs.txt +++ b/Documentation/filesystems/vfs.txt | |||
| @@ -873,7 +873,7 @@ struct dentry_operations { | |||
| 873 | void (*d_iput)(struct dentry *, struct inode *); | 873 | void (*d_iput)(struct dentry *, struct inode *); |
| 874 | char *(*d_dname)(struct dentry *, char *, int); | 874 | char *(*d_dname)(struct dentry *, char *, int); |
| 875 | struct vfsmount *(*d_automount)(struct path *); | 875 | struct vfsmount *(*d_automount)(struct path *); |
| 876 | int (*d_manage)(struct dentry *, bool, bool); | 876 | int (*d_manage)(struct dentry *, bool); |
| 877 | }; | 877 | }; |
| 878 | 878 | ||
| 879 | d_revalidate: called when the VFS needs to revalidate a dentry. This | 879 | d_revalidate: called when the VFS needs to revalidate a dentry. This |
| @@ -969,10 +969,6 @@ struct dentry_operations { | |||
| 969 | mounted on it and not to check the automount flag. Any other error | 969 | mounted on it and not to check the automount flag. Any other error |
| 970 | code will abort pathwalk completely. | 970 | code will abort pathwalk completely. |
| 971 | 971 | ||
| 972 | If the 'mounting_here' parameter is true, then namespace_sem is being | ||
| 973 | held by the caller and the function should not initiate any mounts or | ||
| 974 | unmounts that it will then wait for. | ||
| 975 | |||
| 976 | If the 'rcu_walk' parameter is true, then the caller is doing a | 972 | If the 'rcu_walk' parameter is true, then the caller is doing a |
| 977 | pathwalk in RCU-walk mode. Sleeping is not permitted in this mode, | 973 | pathwalk in RCU-walk mode. Sleeping is not permitted in this mode, |
| 978 | and the caller can be asked to leave it and call again by returing | 974 | and the caller can be asked to leave it and call again by returing |
diff --git a/fs/autofs4/root.c b/fs/autofs4/root.c index 014e7aba3b08..e6f84d26f4cf 100644 --- a/fs/autofs4/root.c +++ b/fs/autofs4/root.c | |||
| @@ -36,7 +36,7 @@ static long autofs4_root_compat_ioctl(struct file *,unsigned int,unsigned long); | |||
| 36 | static int autofs4_dir_open(struct inode *inode, struct file *file); | 36 | static int autofs4_dir_open(struct inode *inode, struct file *file); |
| 37 | static struct dentry *autofs4_lookup(struct inode *,struct dentry *, struct nameidata *); | 37 | static struct dentry *autofs4_lookup(struct inode *,struct dentry *, struct nameidata *); |
| 38 | static struct vfsmount *autofs4_d_automount(struct path *); | 38 | static struct vfsmount *autofs4_d_automount(struct path *); |
| 39 | static int autofs4_d_manage(struct dentry *, bool, bool); | 39 | static int autofs4_d_manage(struct dentry *, bool); |
| 40 | static void autofs4_dentry_release(struct dentry *); | 40 | static void autofs4_dentry_release(struct dentry *); |
| 41 | 41 | ||
| 42 | const struct file_operations autofs4_root_operations = { | 42 | const struct file_operations autofs4_root_operations = { |
| @@ -446,7 +446,7 @@ done: | |||
| 446 | return NULL; | 446 | return NULL; |
| 447 | } | 447 | } |
| 448 | 448 | ||
| 449 | int autofs4_d_manage(struct dentry *dentry, bool mounting_here, bool rcu_walk) | 449 | int autofs4_d_manage(struct dentry *dentry, bool rcu_walk) |
| 450 | { | 450 | { |
| 451 | struct autofs_sb_info *sbi = autofs4_sbi(dentry->d_sb); | 451 | struct autofs_sb_info *sbi = autofs4_sbi(dentry->d_sb); |
| 452 | 452 | ||
| @@ -454,7 +454,7 @@ int autofs4_d_manage(struct dentry *dentry, bool mounting_here, bool rcu_walk) | |||
| 454 | dentry, dentry->d_name.len, dentry->d_name.name); | 454 | dentry, dentry->d_name.len, dentry->d_name.name); |
| 455 | 455 | ||
| 456 | /* The daemon never waits. */ | 456 | /* The daemon never waits. */ |
| 457 | if (autofs4_oz_mode(sbi) || mounting_here) { | 457 | if (autofs4_oz_mode(sbi)) { |
| 458 | if (!d_mountpoint(dentry)) | 458 | if (!d_mountpoint(dentry)) |
| 459 | return -EISDIR; | 459 | return -EISDIR; |
| 460 | return 0; | 460 | return 0; |
diff --git a/fs/namei.c b/fs/namei.c index e092648a068c..5a9a6c3094da 100644 --- a/fs/namei.c +++ b/fs/namei.c | |||
| @@ -933,8 +933,7 @@ static int follow_managed(struct path *path, unsigned flags) | |||
| 933 | if (managed & DCACHE_MANAGE_TRANSIT) { | 933 | if (managed & DCACHE_MANAGE_TRANSIT) { |
| 934 | BUG_ON(!path->dentry->d_op); | 934 | BUG_ON(!path->dentry->d_op); |
| 935 | BUG_ON(!path->dentry->d_op->d_manage); | 935 | BUG_ON(!path->dentry->d_op->d_manage); |
| 936 | ret = path->dentry->d_op->d_manage(path->dentry, | 936 | ret = path->dentry->d_op->d_manage(path->dentry, false); |
| 937 | false, false); | ||
| 938 | if (ret < 0) | 937 | if (ret < 0) |
| 939 | return ret == -EISDIR ? 0 : ret; | 938 | return ret == -EISDIR ? 0 : ret; |
| 940 | } | 939 | } |
| @@ -999,7 +998,7 @@ static bool __follow_mount_rcu(struct nameidata *nd, struct path *path, | |||
| 999 | struct vfsmount *mounted; | 998 | struct vfsmount *mounted; |
| 1000 | if (unlikely(path->dentry->d_flags & DCACHE_MANAGE_TRANSIT) && | 999 | if (unlikely(path->dentry->d_flags & DCACHE_MANAGE_TRANSIT) && |
| 1001 | !reverse_transit && | 1000 | !reverse_transit && |
| 1002 | path->dentry->d_op->d_manage(path->dentry, false, true) < 0) | 1001 | path->dentry->d_op->d_manage(path->dentry, true) < 0) |
| 1003 | return false; | 1002 | return false; |
| 1004 | mounted = __lookup_mnt(path->mnt, path->dentry, 1); | 1003 | mounted = __lookup_mnt(path->mnt, path->dentry, 1); |
| 1005 | if (!mounted) | 1004 | if (!mounted) |
| @@ -1086,7 +1085,7 @@ int follow_down(struct path *path) | |||
| 1086 | BUG_ON(!path->dentry->d_op); | 1085 | BUG_ON(!path->dentry->d_op); |
| 1087 | BUG_ON(!path->dentry->d_op->d_manage); | 1086 | BUG_ON(!path->dentry->d_op->d_manage); |
| 1088 | ret = path->dentry->d_op->d_manage( | 1087 | ret = path->dentry->d_op->d_manage( |
| 1089 | path->dentry, false, false); | 1088 | path->dentry, false); |
| 1090 | if (ret < 0) | 1089 | if (ret < 0) |
| 1091 | return ret == -EISDIR ? 0 : ret; | 1090 | return ret == -EISDIR ? 0 : ret; |
| 1092 | } | 1091 | } |
diff --git a/include/linux/dcache.h b/include/linux/dcache.h index f958c19e3ca5..1a87760d6532 100644 --- a/include/linux/dcache.h +++ b/include/linux/dcache.h | |||
| @@ -168,7 +168,7 @@ struct dentry_operations { | |||
| 168 | void (*d_iput)(struct dentry *, struct inode *); | 168 | void (*d_iput)(struct dentry *, struct inode *); |
| 169 | char *(*d_dname)(struct dentry *, char *, int); | 169 | char *(*d_dname)(struct dentry *, char *, int); |
| 170 | struct vfsmount *(*d_automount)(struct path *); | 170 | struct vfsmount *(*d_automount)(struct path *); |
| 171 | int (*d_manage)(struct dentry *, bool, bool); | 171 | int (*d_manage)(struct dentry *, bool); |
| 172 | } ____cacheline_aligned; | 172 | } ____cacheline_aligned; |
| 173 | 173 | ||
| 174 | /* | 174 | /* |
