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) {
 
        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 {
        /* 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;
 
 
        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;
        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;
 {
        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)
                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();
        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;
        }
 
        }
        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);