Browse Source

xfs: remove invalid barrier optimization from xfs_fsync

We always need to flush the disk write cache and can't skip it just because
the no inode attributes have changed.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Dave Chinner <david@fromorbit.com>
Christoph Hellwig 15 years ago
parent
commit
e8b217e753
1 changed files with 2 additions and 10 deletions
  1. 2 10
      fs/xfs/xfs_vnodeops.c

+ 2 - 10
fs/xfs/xfs_vnodeops.c

@@ -597,7 +597,7 @@ xfs_fsync(
 {
 {
 	xfs_trans_t	*tp;
 	xfs_trans_t	*tp;
 	int		error = 0;
 	int		error = 0;
-	int		log_flushed = 0, changed = 1;
+	int		log_flushed = 0;
 
 
 	xfs_itrace_entry(ip);
 	xfs_itrace_entry(ip);
 
 
@@ -627,18 +627,10 @@ xfs_fsync(
 		 * disk yet, the inode will be still be pinned.  If it is,
 		 * disk yet, the inode will be still be pinned.  If it is,
 		 * force the log.
 		 * force the log.
 		 */
 		 */
-
 		xfs_iunlock(ip, XFS_ILOCK_SHARED);
 		xfs_iunlock(ip, XFS_ILOCK_SHARED);
-
 		if (xfs_ipincount(ip)) {
 		if (xfs_ipincount(ip)) {
 			error = _xfs_log_force(ip->i_mount, XFS_LOG_SYNC,
 			error = _xfs_log_force(ip->i_mount, XFS_LOG_SYNC,
 					       &log_flushed);
 					       &log_flushed);
-		} else {
-			/*
-			 * If the inode is not pinned and nothing has changed
-			 * we don't need to flush the cache.
-			 */
-			changed = 0;
 		}
 		}
 	} else	{
 	} else	{
 		/*
 		/*
@@ -673,7 +665,7 @@ xfs_fsync(
 		xfs_iunlock(ip, XFS_ILOCK_EXCL);
 		xfs_iunlock(ip, XFS_ILOCK_EXCL);
 	}
 	}
 
 
-	if ((ip->i_mount->m_flags & XFS_MOUNT_BARRIER) && changed) {
+	if (ip->i_mount->m_flags & XFS_MOUNT_BARRIER) {
 		/*
 		/*
 		 * If the log write didn't issue an ordered tag we need
 		 * If the log write didn't issue an ordered tag we need
 		 * to flush the disk cache for the data device now.
 		 * to flush the disk cache for the data device now.