mnt_flags fixes in do_remount()
authorAl Viro <viro@zeniv.linux.org.uk>
Sat, 16 Jan 2010 18:01:26 +0000 (13:01 -0500)
committerAl Viro <viro@zeniv.linux.org.uk>
Sat, 16 Jan 2010 18:01:26 +0000 (13:01 -0500)
* need vfsmount_lock over modifying it
* need to preserve MNT_SHARED/MNT_UNBINDABLE

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/namespace.c

index 4de493ea67cfba31a7ca81cfce7ce5818d374e13..779293e29b858f8813c0dcdb89bdba711069aa9a 100644 (file)
@@ -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);