]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
btrfs: convert btrfs_block_group::seq_zone to runtime flag
authorDavid Sterba <dsterba@suse.com>
Mon, 31 Oct 2022 19:33:46 +0000 (20:33 +0100)
committerDavid Sterba <dsterba@suse.com>
Mon, 5 Dec 2022 17:00:51 +0000 (18:00 +0100)
In zoned mode the sequential status of zone can be also tracked in the
runtime flags of block group.

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

index 4cee23c11938284c3f9d1821a17d9ce1fdf68891..a02ea76fd6cffe6acee57f45bb9406e6b559d46c 100644 (file)
@@ -57,6 +57,8 @@ enum btrfs_block_group_flags {
        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,
+       /* Indicate that the block group is placed on a sequential zone */
+       BLOCK_GROUP_FLAG_SEQUENTIAL_ZONE,
 };
 
 enum btrfs_caching_type {
@@ -210,9 +212,6 @@ struct btrfs_block_group {
        /* Lock for free space tree operations. */
        struct mutex free_space_lock;
 
-       /* Flag indicating this block group is placed on a sequential zone */
-       bool seq_zone;
-
        /*
         * Number of extents in this block group used for swap files.
         * All accesses protected by the spinlock 'lock'.
index 95dec93374eaa9085d691b1ebad3bfbcfa67c0a0..a759668477bb2e10eee5f6b60fb03463cd81fcf8 100644 (file)
@@ -1437,7 +1437,7 @@ int btrfs_load_block_group_zone_info(struct btrfs_block_group *cache, bool new)
        }
 
        if (num_sequential > 0)
-               cache->seq_zone = true;
+               set_bit(BLOCK_GROUP_FLAG_SEQUENTIAL_ZONE, &cache->runtime_flags);
 
        if (num_conventional > 0) {
                /* Zone capacity is always zone size in emulation */
@@ -1649,7 +1649,7 @@ bool btrfs_use_zone_append(struct btrfs_inode *inode, u64 start)
        if (!cache)
                return false;
 
-       ret = cache->seq_zone;
+       ret = !!test_bit(BLOCK_GROUP_FLAG_SEQUENTIAL_ZONE, &cache->runtime_flags);
        btrfs_put_block_group(cache);
 
        return ret;
@@ -2154,7 +2154,8 @@ static void btrfs_zone_finish_endio_workfn(struct work_struct *work)
 void btrfs_schedule_zone_finish_bg(struct btrfs_block_group *bg,
                                   struct extent_buffer *eb)
 {
-       if (!bg->seq_zone || eb->start + eb->len * 2 <= bg->start + bg->zone_capacity)
+       if (!test_bit(BLOCK_GROUP_FLAG_SEQUENTIAL_ZONE, &bg->runtime_flags) ||
+           eb->start + eb->len * 2 <= bg->start + bg->zone_capacity)
                return;
 
        if (WARN_ON(bg->zone_finish_work.func == btrfs_zone_finish_endio_workfn)) {