• Filipe Manana's avatar
    btrfs: stop reserving excessive space for block group item insertions · 9ef17228
    Filipe Manana authored
    Space for block group item insertions, necessary after allocating a new
    block group, is reserved in the delayed refs block reserve. Currently we
    do this by incrementing the transaction handle's delayed_ref_updates
    counter and then calling btrfs_update_delayed_refs_rsv(), which will
    increase the size of the delayed refs block reserve by an amount that
    corresponds to the same amount we use for delayed refs, given by
    btrfs_calc_delayed_ref_bytes().
    
    That is an excessive amount because it corresponds to the amount of space
    needed to insert one item in a btree (btrfs_calc_insert_metadata_size())
    times 2 when the free space tree feature is enabled. All we need is an
    amount as given by btrfs_calc_insert_metadata_size(), since we only need to
    insert a block group item in the extent tree (or block group tree if this
    feature is enabled). By using btrfs_calc_insert_metadata_size() we will
    need to reserve 2 times less space when using the free space tree, putting
    less pressure on space reservation.
    
    So use helpers to reserve and release space for block group item
    insertions that use btrfs_calc_insert_metadata_size() for calculation of
    the space.
    Signed-off-by: default avatarFilipe Manana <fdmanana@suse.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    9ef17228
delayed-ref.c 35.7 KB