diff options
author | Brian Foster <bfoster@redhat.com> | 2020-09-15 20:44:46 -0700 |
---|---|---|
committer | Darrick J. Wong <darrick.wong@oracle.com> | 2020-09-21 09:54:29 -0700 |
commit | 6dd379c7fa81ea08f44a567be79b29af3bc6af78 (patch) | |
tree | da43d41d66d8b74d25c91bb94794c2427a6bbdce /fs | |
parent | b96cb835e37c2ca03aaceef9555ec9047a422d91 (diff) | |
download | linux-stable-6dd379c7fa81ea08f44a567be79b29af3bc6af78.tar.gz linux-stable-6dd379c7fa81ea08f44a567be79b29af3bc6af78.tar.bz2 linux-stable-6dd379c7fa81ea08f44a567be79b29af3bc6af78.zip |
xfs: drop extra transaction roll from inode extent truncate
The inode extent truncate path unmaps extents from the inode block
mapping, finishes deferred ops to free the associated extents and
then explicitly rolls the transaction before processing the next
extent. The latter extent roll is spurious as xfs_defer_finish()
always returns a clean transaction and automatically relogs inodes
attached to the transaction (with lock_flags == 0). This can
unnecessarily increase the number of log ticket regrants that occur
during a long running truncate operation. Remove the explicit
transaction roll.
Signed-off-by: Brian Foster <bfoster@redhat.com>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/xfs/xfs_inode.c | 9 |
1 files changed, 1 insertions, 8 deletions
diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c index 6f66f8818ed0..2bfbcf28b1bd 100644 --- a/fs/xfs/xfs_inode.c +++ b/fs/xfs/xfs_inode.c @@ -1534,17 +1534,10 @@ xfs_itruncate_extents_flags( if (error) goto out; - /* - * Duplicate the transaction that has the permanent - * reservation and commit the old transaction. - */ + /* free the just unmapped extents */ error = xfs_defer_finish(&tp); if (error) goto out; - - error = xfs_trans_roll_inode(&tp, ip); - if (error) - goto out; } if (whichfork == XFS_DATA_FORK) { |