btrfs: convert btrfs_block_group::needs_free_space to runtime flag
authorDavid Sterba <dsterba@suse.com>
Mon, 31 Oct 2022 19:33:44 +0000 (20:33 +0100)
committerDavid Sterba <dsterba@suse.com>
Mon, 5 Dec 2022 17:00:51 +0000 (18:00 +0100)
We already have flags in block group to track various status bits,
convert needs_free_space as well and reduce size of btrfs_block_group.

Reviewed-by: Anand Jain <anand.jain@oracle.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/block-group.c
fs/btrfs/block-group.h
fs/btrfs/free-space-tree.c
fs/btrfs/tests/free-space-tree-tests.c

index ea5fcb6..708d843 100644 (file)
@@ -2553,7 +2553,7 @@ struct btrfs_block_group *btrfs_make_block_group(struct btrfs_trans_handle *tran
        cache->global_root_id = calculate_global_root_id(fs_info, cache->start);
 
        if (btrfs_fs_compat_ro(fs_info, FREE_SPACE_TREE))
-               cache->needs_free_space = 1;
+               set_bit(BLOCK_GROUP_FLAG_NEEDS_FREE_SPACE, &cache->runtime_flags);
 
        ret = btrfs_load_block_group_zone_info(cache, true);
        if (ret) {
index 6c970a4..4cee23c 100644 (file)
@@ -55,6 +55,8 @@ enum btrfs_block_group_flags {
        BLOCK_GROUP_FLAG_CHUNK_ITEM_INSERTED,
        BLOCK_GROUP_FLAG_ZONE_IS_ACTIVE,
        BLOCK_GROUP_FLAG_ZONED_DATA_RELOC,
+       /* Does the block group need to be added to the free space tree? */
+       BLOCK_GROUP_FLAG_NEEDS_FREE_SPACE,
 };
 
 enum btrfs_caching_type {
@@ -208,12 +210,6 @@ struct btrfs_block_group {
        /* Lock for free space tree operations. */
        struct mutex free_space_lock;
 
-       /*
-        * Does the block group need to be added to the free space tree?
-        * Protected by free_space_lock.
-        */
-       int needs_free_space;
-
        /* Flag indicating this block group is placed on a sequential zone */
        bool seq_zone;
 
index 869d062..c667e87 100644 (file)
@@ -808,7 +808,7 @@ int __remove_from_free_space_tree(struct btrfs_trans_handle *trans,
        u32 flags;
        int ret;
 
-       if (block_group->needs_free_space) {
+       if (test_bit(BLOCK_GROUP_FLAG_NEEDS_FREE_SPACE, &block_group->runtime_flags)) {
                ret = __add_block_group_free_space(trans, block_group, path);
                if (ret)
                        return ret;
@@ -1001,7 +1001,7 @@ int __add_to_free_space_tree(struct btrfs_trans_handle *trans,
        u32 flags;
        int ret;
 
-       if (block_group->needs_free_space) {
+       if (test_bit(BLOCK_GROUP_FLAG_NEEDS_FREE_SPACE, &block_group->runtime_flags)) {
                ret = __add_block_group_free_space(trans, block_group, path);
                if (ret)
                        return ret;
@@ -1304,7 +1304,7 @@ static int __add_block_group_free_space(struct btrfs_trans_handle *trans,
 {
        int ret;
 
-       block_group->needs_free_space = 0;
+       clear_bit(BLOCK_GROUP_FLAG_NEEDS_FREE_SPACE, &block_group->runtime_flags);
 
        ret = add_new_free_space_info(trans, block_group, path);
        if (ret)
@@ -1326,7 +1326,7 @@ int add_block_group_free_space(struct btrfs_trans_handle *trans,
                return 0;
 
        mutex_lock(&block_group->free_space_lock);
-       if (!block_group->needs_free_space)
+       if (!test_bit(BLOCK_GROUP_FLAG_NEEDS_FREE_SPACE, &block_group->runtime_flags))
                goto out;
 
        path = btrfs_alloc_path();
@@ -1359,7 +1359,7 @@ int remove_block_group_free_space(struct btrfs_trans_handle *trans,
        if (!btrfs_fs_compat_ro(trans->fs_info, FREE_SPACE_TREE))
                return 0;
 
-       if (block_group->needs_free_space) {
+       if (test_bit(BLOCK_GROUP_FLAG_NEEDS_FREE_SPACE, &block_group->runtime_flags)) {
                /* We never added this block group to the free space tree. */
                return 0;
        }
index 53a17b1..b619720 100644 (file)
@@ -471,7 +471,7 @@ static int run_test(test_func_t test_func, int bitmaps, u32 sectorsize,
        }
        cache->bitmap_low_thresh = 0;
        cache->bitmap_high_thresh = (u32)-1;
-       cache->needs_free_space = 1;
+       set_bit(BLOCK_GROUP_FLAG_NEEDS_FREE_SPACE, &cache->runtime_flags);
        cache->fs_info = root->fs_info;
 
        btrfs_init_dummy_trans(&trans, root->fs_info);