• Filipe Manana's avatar
    btrfs: use btrfs_alloc_data_chunk_ondemand() when allocating space for relocation · a89ef455
    Filipe Manana authored
    We currently use btrfs_check_data_free_space() when allocating space for
    relocating data extents, but that is not necessary because that function
    combines btrfs_alloc_data_chunk_ondemand(), which does the actual space
    reservation, and btrfs_qgroup_reserve_data().
    
    We can use btrfs_alloc_data_chunk_ondemand() directly because we know we
    do not need to reserve qgroup space since we are dealing with a relocation
    tree, which can never have qgroups (btrfs_qgroup_reserve_data() does
    nothing as is_fstree() returns false for a relocation tree).
    
    Conversely we can use btrfs_free_reserved_data_space_noquota() directly
    instead of btrfs_free_reserved_data_space(), since we had no qgroup
    reservation when allocating space.
    
    This change is preparatory work for another patch in this series that
    makes relocation reserve the exact amount of space it needs to relocate
    a data block group. The function btrfs_check_data_free_space() has
    the incovenient of requiring a start offset argument and we will want to
    be able to allocate space for multiple ranges, which are not consecutive,
    at once.
    Reviewed-by: default avatarNikolay Borisov <nborisov@suse.com>
    Signed-off-by: default avatarFilipe Manana <fdmanana@suse.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    a89ef455
relocation.c 99.7 KB