diff options
Diffstat (limited to 'fs/xfs/linux-2.6/xfs_file.c')
| -rw-r--r-- | fs/xfs/linux-2.6/xfs_file.c | 17 | 
1 files changed, 8 insertions, 9 deletions
| diff --git a/fs/xfs/linux-2.6/xfs_file.c b/fs/xfs/linux-2.6/xfs_file.c index 7f782af286bf..fbbf657df0cd 100644 --- a/fs/xfs/linux-2.6/xfs_file.c +++ b/fs/xfs/linux-2.6/xfs_file.c @@ -127,6 +127,8 @@ xfs_iozero(  STATIC int  xfs_file_fsync(  	struct file		*file, +	loff_t			start, +	loff_t			end,  	int			datasync)  {  	struct inode		*inode = file->f_mapping->host; @@ -138,6 +140,10 @@ xfs_file_fsync(  	trace_xfs_file_fsync(ip); +	error = filemap_write_and_wait_range(inode->i_mapping, start, end); +	if (error) +		return error; +  	if (XFS_FORCED_SHUTDOWN(mp))  		return -XFS_ERROR(EIO); @@ -875,18 +881,11 @@ xfs_file_aio_write(  	/* Handle various SYNC-type writes */  	if ((file->f_flags & O_DSYNC) || IS_SYNC(inode)) {  		loff_t end = pos + ret - 1; -		int error, error2;  		xfs_rw_iunlock(ip, iolock); -		error = filemap_write_and_wait_range(mapping, pos, end); +		ret = -xfs_file_fsync(file, pos, end, +				      (file->f_flags & __O_SYNC) ? 0 : 1);  		xfs_rw_ilock(ip, iolock); - -		error2 = -xfs_file_fsync(file, -					 (file->f_flags & __O_SYNC) ? 0 : 1); -		if (error) -			ret = error; -		else if (error2) -			ret = error2;  	}  out_unlock: |