diff options
Diffstat (limited to 'fs/btrfs/file.c')
| -rw-r--r-- | fs/btrfs/file.c | 8 | 
1 files changed, 8 insertions, 0 deletions
diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c index 9404121fd5f7..5842423f8f47 100644 --- a/fs/btrfs/file.c +++ b/fs/btrfs/file.c @@ -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;  	}  |