xfs: split xfs_itruncate_finish
Split the guts of xfs_itruncate_finish that loop over the existing extents and calls xfs_bunmapi on them into a new helper, xfs_itruncate_externs. Make xfs_attr_inactive call it directly instead of xfs_itruncate_finish, which allows to simplify the latter a lot, by only letting it deal with the data fork. As a result xfs_itruncate_finish is renamed to xfs_itruncate_data to make its use case more obvious. Also remove the sync parameter from xfs_itruncate_data, which has been unessecary since the introduction of the busy extent list in 2002, and completely dead code since 2003 when the XFS_BMAPI_ASYNC parameter was made a no-op. I can't actually see why the xfs_attr_inactive needs to set the transaction sync, but let's keep this patch simple and without changes in behaviour. Also avoid passing a useless argument to xfs_isize_check, and make it private to xfs_inode.c. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Alex Elder <aelder@sgi.com> Reviewed-by: Dave Chinner <dchinner@redhat.com>
This commit is contained in:
@@ -220,15 +220,12 @@ xfs_free_eofblocks(
|
||||
xfs_ilock(ip, XFS_ILOCK_EXCL);
|
||||
xfs_trans_ijoin(tp, ip);
|
||||
|
||||
error = xfs_itruncate_finish(&tp, ip,
|
||||
ip->i_size,
|
||||
XFS_DATA_FORK,
|
||||
0);
|
||||
/*
|
||||
* If we get an error at this point we
|
||||
* simply don't bother truncating the file.
|
||||
*/
|
||||
error = xfs_itruncate_data(&tp, ip, ip->i_size);
|
||||
if (error) {
|
||||
/*
|
||||
* If we get an error at this point we simply don't
|
||||
* bother truncating the file.
|
||||
*/
|
||||
xfs_trans_cancel(tp,
|
||||
(XFS_TRANS_RELEASE_LOG_RES |
|
||||
XFS_TRANS_ABORT));
|
||||
@@ -665,16 +662,7 @@ xfs_inactive(
|
||||
xfs_ilock(ip, XFS_ILOCK_EXCL);
|
||||
xfs_trans_ijoin(tp, ip);
|
||||
|
||||
/*
|
||||
* normally, we have to run xfs_itruncate_finish sync.
|
||||
* But if filesystem is wsync and we're in the inactive
|
||||
* path, then we know that nlink == 0, and that the
|
||||
* xaction that made nlink == 0 is permanently committed
|
||||
* since xfs_remove runs as a synchronous transaction.
|
||||
*/
|
||||
error = xfs_itruncate_finish(&tp, ip, 0, XFS_DATA_FORK,
|
||||
(!(mp->m_flags & XFS_MOUNT_WSYNC) ? 1 : 0));
|
||||
|
||||
error = xfs_itruncate_data(&tp, ip, 0);
|
||||
if (error) {
|
||||
xfs_trans_cancel(tp,
|
||||
XFS_TRANS_RELEASE_LOG_RES | XFS_TRANS_ABORT);
|
||||
|
||||
Reference in New Issue
Block a user