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>
This commit is contained in:
committed by
Alex Elder
parent
77d7a0c2ee
commit
024910cbac
@@ -180,17 +180,12 @@ xfs_file_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);
|
|
||||||
if (xfs_ipincount(ip)) {
|
if (xfs_ipincount(ip)) {
|
||||||
if (ip->i_itemp->ili_last_lsn) {
|
|
||||||
error = _xfs_log_force_lsn(ip->i_mount,
|
error = _xfs_log_force_lsn(ip->i_mount,
|
||||||
ip->i_itemp->ili_last_lsn,
|
ip->i_itemp->ili_last_lsn,
|
||||||
XFS_LOG_SYNC, &log_flushed);
|
XFS_LOG_SYNC, &log_flushed);
|
||||||
} else {
|
|
||||||
error = _xfs_log_force(ip->i_mount,
|
|
||||||
XFS_LOG_SYNC, &log_flushed);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
xfs_iunlock(ip, XFS_ILOCK_SHARED);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ip->i_mount->m_flags & XFS_MOUNT_BARRIER) {
|
if (ip->i_mount->m_flags & XFS_MOUNT_BARRIER) {
|
||||||
|
Reference in New Issue
Block a user