diff options
Diffstat (limited to 'fs/namespace.c')
-rw-r--r-- | fs/namespace.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/fs/namespace.c b/fs/namespace.c index 88058de59c7c..2e10cb19c5b0 100644 --- a/fs/namespace.c +++ b/fs/namespace.c | |||
@@ -29,6 +29,7 @@ | |||
29 | #include <linux/log2.h> | 29 | #include <linux/log2.h> |
30 | #include <linux/idr.h> | 30 | #include <linux/idr.h> |
31 | #include <linux/fs_struct.h> | 31 | #include <linux/fs_struct.h> |
32 | #include <linux/fsnotify.h> | ||
32 | #include <asm/uaccess.h> | 33 | #include <asm/uaccess.h> |
33 | #include <asm/unistd.h> | 34 | #include <asm/unistd.h> |
34 | #include "pnode.h" | 35 | #include "pnode.h" |
@@ -150,6 +151,9 @@ struct vfsmount *alloc_vfsmnt(const char *name) | |||
150 | INIT_LIST_HEAD(&mnt->mnt_share); | 151 | INIT_LIST_HEAD(&mnt->mnt_share); |
151 | INIT_LIST_HEAD(&mnt->mnt_slave_list); | 152 | INIT_LIST_HEAD(&mnt->mnt_slave_list); |
152 | INIT_LIST_HEAD(&mnt->mnt_slave); | 153 | INIT_LIST_HEAD(&mnt->mnt_slave); |
154 | #ifdef CONFIG_FSNOTIFY | ||
155 | INIT_HLIST_HEAD(&mnt->mnt_fsnotify_marks); | ||
156 | #endif | ||
153 | #ifdef CONFIG_SMP | 157 | #ifdef CONFIG_SMP |
154 | mnt->mnt_writers = alloc_percpu(int); | 158 | mnt->mnt_writers = alloc_percpu(int); |
155 | if (!mnt->mnt_writers) | 159 | if (!mnt->mnt_writers) |
@@ -610,6 +614,7 @@ static inline void __mntput(struct vfsmount *mnt) | |||
610 | * provides barriers, so count_mnt_writers() below is safe. AV | 614 | * provides barriers, so count_mnt_writers() below is safe. AV |
611 | */ | 615 | */ |
612 | WARN_ON(count_mnt_writers(mnt)); | 616 | WARN_ON(count_mnt_writers(mnt)); |
617 | fsnotify_vfsmount_delete(mnt); | ||
613 | dput(mnt->mnt_root); | 618 | dput(mnt->mnt_root); |
614 | free_vfsmnt(mnt); | 619 | free_vfsmnt(mnt); |
615 | deactivate_super(sb); | 620 | deactivate_super(sb); |
@@ -783,7 +788,6 @@ static void show_mnt_opts(struct seq_file *m, struct vfsmount *mnt) | |||
783 | { MNT_NOATIME, ",noatime" }, | 788 | { MNT_NOATIME, ",noatime" }, |
784 | { MNT_NODIRATIME, ",nodiratime" }, | 789 | { MNT_NODIRATIME, ",nodiratime" }, |
785 | { MNT_RELATIME, ",relatime" }, | 790 | { MNT_RELATIME, ",relatime" }, |
786 | { MNT_STRICTATIME, ",strictatime" }, | ||
787 | { 0, NULL } | 791 | { 0, NULL } |
788 | }; | 792 | }; |
789 | const struct proc_fs_info *fs_infop; | 793 | const struct proc_fs_info *fs_infop; |
@@ -1984,7 +1988,7 @@ long do_mount(char *dev_name, char *dir_name, char *type_page, | |||
1984 | if (flags & MS_RDONLY) | 1988 | if (flags & MS_RDONLY) |
1985 | mnt_flags |= MNT_READONLY; | 1989 | mnt_flags |= MNT_READONLY; |
1986 | 1990 | ||
1987 | flags &= ~(MS_NOSUID | MS_NOEXEC | MS_NODEV | MS_ACTIVE | | 1991 | flags &= ~(MS_NOSUID | MS_NOEXEC | MS_NODEV | MS_ACTIVE | MS_BORN | |
1988 | MS_NOATIME | MS_NODIRATIME | MS_RELATIME| MS_KERNMOUNT | | 1992 | MS_NOATIME | MS_NODIRATIME | MS_RELATIME| MS_KERNMOUNT | |
1989 | MS_STRICTATIME); | 1993 | MS_STRICTATIME); |
1990 | 1994 | ||
@@ -2208,10 +2212,7 @@ SYSCALL_DEFINE2(pivot_root, const char __user *, new_root, | |||
2208 | goto out1; | 2212 | goto out1; |
2209 | } | 2213 | } |
2210 | 2214 | ||
2211 | read_lock(¤t->fs->lock); | 2215 | get_fs_root(current->fs, &root); |
2212 | root = current->fs->root; | ||
2213 | path_get(¤t->fs->root); | ||
2214 | read_unlock(¤t->fs->lock); | ||
2215 | down_write(&namespace_sem); | 2216 | down_write(&namespace_sem); |
2216 | mutex_lock(&old.dentry->d_inode->i_mutex); | 2217 | mutex_lock(&old.dentry->d_inode->i_mutex); |
2217 | error = -EINVAL; | 2218 | error = -EINVAL; |