vfs, freeze: use ACCESS_ONCE() to guard access to ->mnt_flags
authorMiao Xie <miaox@cn.fujitsu.com>
Fri, 16 Nov 2012 09:23:50 +0000 (17:23 +0800)
committerAl Viro <viro@zeniv.linux.org.uk>
Thu, 20 Dec 2012 18:36:18 +0000 (13:36 -0500)
The compiler may optimize the while loop and make the check just be done once,
so we should use ACCESS_ONCE() to guard access to ->mnt_flags

Signed-off-by: Miao Xie <miaox@cn.fujitsu.com>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/namespace.c

index 398a50ff243848fae1145c695d6decc801d80f7d..55605c552787cae1188ef93ee522ddd958e8cd83 100644 (file)
@@ -313,7 +313,7 @@ int __mnt_want_write(struct vfsmount *m)
         * incremented count after it has set MNT_WRITE_HOLD.
         */
        smp_mb();
-       while (mnt->mnt.mnt_flags & MNT_WRITE_HOLD)
+       while (ACCESS_ONCE(mnt->mnt.mnt_flags) & MNT_WRITE_HOLD)
                cpu_relax();
        /*
         * After the slowpath clears MNT_WRITE_HOLD, mnt_is_readonly will