summaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2010-01-16 19:01:26 +0100
committerAl Viro <viro@zeniv.linux.org.uk>2010-01-16 19:01:26 +0100
commit7b43a79f32c0a05e7562043af98e25c05c89b18e (patch)
tree920010b3bad9bd2cb7b9f4f2a7305a40400758da /fs
parentattach_recursive_mnt() needs to hold vfsmount_lock over set_mnt_shared() (diff)
downloadlinux-7b43a79f32c0a05e7562043af98e25c05c89b18e.tar.xz
linux-7b43a79f32c0a05e7562043af98e25c05c89b18e.zip
mnt_flags fixes in do_remount()
* need vfsmount_lock over modifying it * need to preserve MNT_SHARED/MNT_UNBINDABLE Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs')
-rw-r--r--fs/namespace.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/fs/namespace.c b/fs/namespace.c
index 4de493ea67cf..779293e29b85 100644
--- a/fs/namespace.c
+++ b/fs/namespace.c
@@ -1536,8 +1536,12 @@ static int do_remount(struct path *path, int flags, int mnt_flags,
err = change_mount_flags(path->mnt, flags);
else
err = do_remount_sb(sb, flags, data, 0);
- if (!err)
+ if (!err) {
+ spin_lock(&vfsmount_lock);
+ mnt_flags |= path->mnt->mnt_flags & MNT_PNODE_MASK;
path->mnt->mnt_flags = mnt_flags;
+ spin_unlock(&vfsmount_lock);
+ }
up_write(&sb->s_umount);
if (!err) {
security_sb_post_remount(path->mnt, flags, data);