diff options
Diffstat (limited to 'fs/xfs/linux-2.6/xfs_lrw.c')
-rw-r--r-- | fs/xfs/linux-2.6/xfs_lrw.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/fs/xfs/linux-2.6/xfs_lrw.c b/fs/xfs/linux-2.6/xfs_lrw.c index fde63a3c4ecc..49e4a6aea73c 100644 --- a/fs/xfs/linux-2.6/xfs_lrw.c +++ b/fs/xfs/linux-2.6/xfs_lrw.c | |||
@@ -812,19 +812,21 @@ write_retry: | |||
812 | 812 | ||
813 | /* Handle various SYNC-type writes */ | 813 | /* Handle various SYNC-type writes */ |
814 | if ((file->f_flags & O_SYNC) || IS_SYNC(inode)) { | 814 | if ((file->f_flags & O_SYNC) || IS_SYNC(inode)) { |
815 | loff_t end = pos + ret - 1; | ||
815 | int error2; | 816 | int error2; |
816 | 817 | ||
817 | xfs_iunlock(xip, iolock); | 818 | xfs_iunlock(xip, iolock); |
818 | if (need_i_mutex) | 819 | if (need_i_mutex) |
819 | mutex_unlock(&inode->i_mutex); | 820 | mutex_unlock(&inode->i_mutex); |
820 | error2 = filemap_write_and_wait_range(mapping, pos, | 821 | |
821 | pos + ret - 1); | 822 | error2 = filemap_write_and_wait_range(mapping, pos, end); |
822 | if (!error) | 823 | if (!error) |
823 | error = error2; | 824 | error = error2; |
824 | if (need_i_mutex) | 825 | if (need_i_mutex) |
825 | mutex_lock(&inode->i_mutex); | 826 | mutex_lock(&inode->i_mutex); |
826 | xfs_ilock(xip, iolock); | 827 | xfs_ilock(xip, iolock); |
827 | error2 = xfs_write_sync_logforce(mp, xip); | 828 | |
829 | error2 = xfs_fsync(xip); | ||
828 | if (!error) | 830 | if (!error) |
829 | error = error2; | 831 | error = error2; |
830 | } | 832 | } |