xfs: fix inode pincount check in fsync
authorChristoph Hellwig <hch@infradead.org>
Wed, 17 Feb 2010 19:34:57 +0000 (19:34 +0000)
committerAlex Elder <aelder@sgi.com>
Mon, 1 Mar 2010 22:35:10 +0000 (16:35 -0600)
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>
fs/xfs/linux-2.6/xfs_file.c

index 43f9554..42dd3bc 100644 (file)
@@ -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) {