• Darrick J. Wong's avatar
    xfs: count EFIs when deciding to ask for a continuation of a refcount update · c47260d4
    Darrick J. Wong authored
    A long time ago, I added to XFS the ability to use deferred reference
    count operations as part of a transaction chain.  This enabled us to
    avoid blowing out the transaction reservation when the blocks in a
    physical extent all had different reference counts because we could ask
    the deferred operation manager for a continuation, which would get us a
    clean transaction.
    
    The refcount code asks for a continuation when the number of refcount
    record updates reaches the point where we think that the transaction has
    logged enough full btree blocks due to refcount (and free space) btree
    shape changes and refcount record updates that we're in danger of
    overflowing the transaction.
    
    We did not previously count the EFIs logged to the refcount update
    transaction because the clamps on the length of a bunmap operation were
    sufficient to avoid overflowing the transaction reservation even in the
    worst case situation where every other block of the unmapped extent is
    shared.
    
    Unfortunately, the restrictions on bunmap length avoid failure in the
    worst case by imposing a maximum unmap length of ~3000 blocks, even for
    non-pathological cases.  This seriously limits performance when freeing
    large extents.
    
    Therefore, track EFIs with the same counter as refcount record updates,
    and use that information as input into when we should ask for a
    continuation.  This enables the next patch to drop the clumsy bunmap
    limitation.
    
    Depends: 27dada07 ("xfs: change the order in which child and parent defer ops ar finished")
    Depends: 74f4d6a1 ("xfs: only relog deferred intent items if free space in the log gets low")
    Signed-off-by: default avatarDarrick J. Wong <djwong@kernel.org>
    Reviewed-by: default avatarDave Chinner <dchinner@redhat.com>
    Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
    c47260d4
xfs_refcount.h 3.55 KB