|
@@ -2033,6 +2033,14 @@ int btrfs_sync_file(struct file *file, loff_t start, loff_t end, int datasync)
|
|
|
*/
|
|
|
clear_bit(BTRFS_INODE_NEEDS_FULL_SYNC,
|
|
|
&BTRFS_I(inode)->runtime_flags);
|
|
|
+ /*
|
|
|
+ * An ordered extent might have started before and completed
|
|
|
+ * already with io errors, in which case the inode was not
|
|
|
+ * updated and we end up here. So check the inode's mapping
|
|
|
+ * flags for any errors that might have happened while doing
|
|
|
+ * writeback of file data.
|
|
|
+ */
|
|
|
+ ret = btrfs_inode_check_errors(inode);
|
|
|
inode_unlock(inode);
|
|
|
goto out;
|
|
|
}
|