xfs: implement optimized fdatasync
Allow us to track the difference between timestamp and size updates by using mark_inode_dirty from the I/O completion code, and checking the VFS inode flags in xfs_file_fsync. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Dave Chinner <david@fromorbit.com> Signed-off-by: Alex Elder <aelder@sgi.com>
This commit is contained in:

committed by
Alex Elder

parent
fd3200bef7
commit
66d834ea60
@@ -187,7 +187,7 @@ xfs_setfilesize(
|
||||
isize = xfs_ioend_new_eof(ioend);
|
||||
if (isize) {
|
||||
ip->i_d.di_size = isize;
|
||||
xfs_mark_inode_dirty_sync(ip);
|
||||
xfs_mark_inode_dirty(ip);
|
||||
}
|
||||
|
||||
xfs_iunlock(ip, XFS_ILOCK_EXCL);
|
||||
@@ -341,7 +341,7 @@ xfs_submit_ioend_bio(
|
||||
* but don't update the inode size until I/O completion.
|
||||
*/
|
||||
if (xfs_ioend_new_eof(ioend))
|
||||
xfs_mark_inode_dirty_sync(XFS_I(ioend->io_inode));
|
||||
xfs_mark_inode_dirty(XFS_I(ioend->io_inode));
|
||||
|
||||
submit_bio(wbc->sync_mode == WB_SYNC_ALL ?
|
||||
WRITE_SYNC_PLUG : WRITE, bio);
|
||||
|
Reference in New Issue
Block a user