• Naohiro Aota's avatar
    btrfs: delete unused BGs while reclaiming BGs · 3ed01616
    Naohiro Aota authored
    The reclaiming process only starts after the filesystem volumes are
    allocated to a certain level (75% by default). Thus, the list of
    reclaiming target block groups can build up so huge at the time the
    reclaim process kicks in. On a test run, there were over 1000 BGs in the
    reclaim list.
    
    As the reclaim involves rewriting the data, it takes really long time to
    reclaim the BGs. While the reclaim is running, btrfs_delete_unused_bgs()
    won't proceed because the reclaim side is holding
    fs_info->reclaim_bgs_lock. As a result, we will have a large number of
    unused BGs kept in the unused list. On my test run, I got 1057 unused BGs.
    
    Since deleting a block group is relatively easy and fast work, we can call
    btrfs_delete_unused_bgs() while it reclaims BGs, to avoid building up
    unused BGs.
    
    Fixes: 18bb8bbf ("btrfs: zoned: automatically reclaim zones")
    CC: stable@vger.kernel.org # 5.15+
    Reviewed-by: default avatarFilipe Manana <fdmanana@suse.com>
    Reviewed-by: default avatarJohannes Thumshirn <johannes.thumshirn@wdc.com>
    Signed-off-by: default avatarNaohiro Aota <naohiro.aota@wdc.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    3ed01616
block-group.c 132 KB