• Darrick J. Wong's avatar
    xfs: account for the refcount btree in the alloc/free log reservation · f310bd2e
    Darrick J. Wong authored
    Every time we allocate or free a data extent, we might need to split
    the refcount btree.  Reserve some blocks in the transaction to handle
    this possibility.  Even though the deferred refcount code can roll a
    transaction to avoid overloading the transaction, we can still exceed
    the reservation.
    
    Certain pathological workloads (1k blocks, no cowextsize hint, random
    directio writes), cause a perfect storm wherein a refcount adjustment
    of a large range of blocks causes full tree splits in two separate
    extents in two separate refcount tree blocks; allocating new refcount
    tree blocks causes rmap btree splits; and all the allocation activity
    causes the freespace btrees to split, blowing the reservation.
    
    (Reproduced by generic/167 over NFS atop XFS)
    Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
    [darrick.wong@oracle.com: add commit message]
    Signed-off-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
    f310bd2e
xfs_trans_resv.c 29.1 KB