• B
    xfs: defer agfl frees from inode inactivation · 658f8f95
    Brian Foster 提交于
    XFS inode chunks are already freed via deferred operations (which
    now also defer AGFL block frees), but inode btree blocks are freed
    directly in the associated context. This has been known to lead to
    log reservation overruns in particular workloads where an inobt
    block free may require several AGFL block frees (and thus several
    allocation btree modifications) before the inobt block itself is
    actually freed.
    
    To avoid this problem, defer the frees of any AGFL blocks before the
    inobt block free takes place. This requires passing the dfops from
    xfs_inactive_ifree() down through the inobt ->[alloc|free]_block()
    callouts, which essentially only requires to attach the dfops to the
    transaction since it is already carried all the way through to the
    inobt update and allocation.
    Signed-off-by: NBrian Foster <bfoster@redhat.com>
    Reviewed-by: NDarrick J. Wong <darrick.wong@oracle.com>
    Signed-off-by: NDarrick J. Wong <darrick.wong@oracle.com>
    658f8f95
xfs_inode.c 100.2 KB