]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commit
xfs: defer agfl block frees from deferred ops processing context
authorBrian Foster <bfoster@redhat.com>
Thu, 28 Jun 2018 20:11:55 +0000 (15:11 -0500)
committerEric Sandeen <sandeen@redhat.com>
Thu, 28 Jun 2018 20:11:55 +0000 (15:11 -0500)
commiteb94763b39f030b2703a138eac5a4f60d1f2f885
tree6e7089dd4cf1b8ca28fd81280261cbb99e6b96f5
parentd5c1b46223285beaafa6af9bcb3c6e56e218b12e
xfs: defer agfl block frees from deferred ops processing context

Source kernel commit: 2bc5eba8b6957824631205aeffc75db8dbb5426a

Now that AGFL block frees are deferred when dfops is set in the
transaction, start deferring AGFL block frees from contexts that are
known to push the limits of existing log reservations.

The first such context is deferred operation processing itself. This
primarily targets deferred extent frees (such as file extents and
inode chunks), but in doing so covers all allocation operations that
occur in deferred operation processing context.

Update xfs_defer_finish() to set and reset ->t_agfl_dfops across the
processing sequence. This means that any AGFL block frees due to
allocation events result in the addition of new EFIs to the dfops
rather than being processed immediately. xfs_defer_finish() rolls
the transaction at least once more to process the frees of the AGFL
blocks back to the allocation btrees and returns once the AGFL is
rectified.

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>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
libxfs/xfs_defer.c