• Darrick J. Wong's avatar
    xfs: reserve enough blocks to handle btree splits when remapping · fe0be23e
    Darrick J. Wong authored
    In xfs_reflink_end_cow, we erroneously reserve only enough blocks to
    handle adding 1 extent.  This is problematic if we fragment free space,
    have to do CoW, and then have to perform multiple bmap btree expansions.
    Furthermore, the BUI recovery routine doesn't reserve /any/ blocks to
    handle btree splits, so log recovery fails after our first error causes
    the filesystem to go down.
    
    Therefore, refactor the transaction block reservation macros until we
    have a macro that works for our deferred (re)mapping activities, and fix
    both problems by using that macro.
    
    With 1k blocks we can hit this fairly often in g/187 if the scratch fs
    is big enough.
    Signed-off-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
    Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
    fe0be23e
xfs_bmap_item.c 13.2 KB