diff options
author | Christoph Hellwig <hch@infradead.org> | 2010-02-17 19:34:57 (GMT) |
---|---|---|
committer | Alex Elder <aelder@sgi.com> | 2010-03-01 22:35:10 (GMT) |
commit | 024910cbac323ab2e5ad6d7fa7958799b04b9728 (patch) | |
tree | 6902b06ec9307930e17964192f9e8bfdb750d3bd /fs/xfs | |
parent | 77d7a0c2eeb285c9069e15396703d0cb9690ac50 (diff) | |
download | linux-024910cbac323ab2e5ad6d7fa7958799b04b9728.tar.xz |
xfs: fix inode pincount check in fsync
We need to hold the ilock to check the inode pincount safely. While
we're at it also remove the check for ip->i_itemp->ili_last_lsn, a
pinned inode always has it set.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Dave Chinner <david@fromorbit.com>
Signed-off-by: Alex Elder <aelder@sgi.com>
Diffstat (limited to 'fs/xfs')
-rw-r--r-- | fs/xfs/linux-2.6/xfs_file.c | 13 |
1 files changed, 4 insertions, 9 deletions
diff --git a/fs/xfs/linux-2.6/xfs_file.c b/fs/xfs/linux-2.6/xfs_file.c index 43f9554..42dd3bc 100644 --- a/fs/xfs/linux-2.6/xfs_file.c +++ b/fs/xfs/linux-2.6/xfs_file.c @@ -180,17 +180,12 @@ xfs_file_fsync( * disk yet, the inode will be still be pinned. If it is, * force the log. */ - xfs_iunlock(ip, XFS_ILOCK_SHARED); if (xfs_ipincount(ip)) { - if (ip->i_itemp->ili_last_lsn) { - error = _xfs_log_force_lsn(ip->i_mount, - ip->i_itemp->ili_last_lsn, - XFS_LOG_SYNC, &log_flushed); - } else { - error = _xfs_log_force(ip->i_mount, - XFS_LOG_SYNC, &log_flushed); - } + error = _xfs_log_force_lsn(ip->i_mount, + ip->i_itemp->ili_last_lsn, + XFS_LOG_SYNC, &log_flushed); } + xfs_iunlock(ip, XFS_ILOCK_SHARED); } if (ip->i_mount->m_flags & XFS_MOUNT_BARRIER) { |