Merge tag 'xfs-for-linus-4.2-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git...
[linux-2.6-microblaze.git] / fs / ext3 / fsync.c
index b31dbd4..1cb9c7e 100644 (file)
@@ -48,9 +48,13 @@ int ext3_sync_file(struct file *file, loff_t start, loff_t end, int datasync)
 
        trace_ext3_sync_file_enter(file, datasync);
 
-       if (inode->i_sb->s_flags & MS_RDONLY)
+       if (inode->i_sb->s_flags & MS_RDONLY) {
+               /* Make sure that we read updated state */
+               smp_rmb();
+               if (EXT3_SB(inode->i_sb)->s_mount_state & EXT3_ERROR_FS)
+                       return -EROFS;
                return 0;
-
+       }
        ret = filemap_write_and_wait_range(inode->i_mapping, start, end);
        if (ret)
                goto out;