]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
btrfs: introduce tree-log sub-space_info
authorNaohiro Aota <naohiro.aota@wdc.com>
Wed, 23 Apr 2025 02:43:49 +0000 (11:43 +0900)
committerDavid Sterba <dsterba@suse.com>
Thu, 15 May 2025 12:30:53 +0000 (14:30 +0200)
Introduce the tree-log sub-space_info, which is sub-space of
metadata space_info and dedicated for tree-log node allocation.

Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Signed-off-by: Naohiro Aota <naohiro.aota@wdc.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/space-info.c
fs/btrfs/space-info.h
fs/btrfs/sysfs.c

index 0a65817b8e7c25cb16de6699ec1e4d0928e954c9..d858da058dcead6958ed29b3a7235c971feb7bf7 100644 (file)
@@ -299,6 +299,11 @@ static int create_space_info(struct btrfs_fs_info *info, u64 flags)
                        ret = create_space_info_sub_group(space_info, flags,
                                                          BTRFS_SUB_GROUP_DATA_RELOC,
                                                          0);
+               else if (flags & BTRFS_BLOCK_GROUP_METADATA)
+                       ret = create_space_info_sub_group(space_info, flags,
+                                                         BTRFS_SUB_GROUP_TREELOG,
+                                                         0);
+
                if (ret)
                        return ret;
        }
index 2f5c746f4bacfd4b994dcd7578aa6f7d6fbe6998..92b7f5e2b8500bcb1baf84e5255793951618e2c3 100644 (file)
@@ -101,6 +101,7 @@ enum btrfs_flush_state {
 enum btrfs_space_info_sub_group {
        BTRFS_SUB_GROUP_PRIMARY,
        BTRFS_SUB_GROUP_DATA_RELOC,
+       BTRFS_SUB_GROUP_TREELOG,
 };
 
 #define BTRFS_SPACE_INFO_SUB_GROUP_MAX 1
index 4667b388e04679eb3fee1ebf6ba21f93692fd259..5d93d9dd2c124be63d509682700c99b54e5e420f 100644 (file)
@@ -1938,8 +1938,15 @@ static const char *alloc_name(struct btrfs_space_info *space_info)
        case BTRFS_BLOCK_GROUP_METADATA | BTRFS_BLOCK_GROUP_DATA:
                return "mixed";
        case BTRFS_BLOCK_GROUP_METADATA:
-               ASSERT(space_info->subgroup_id == BTRFS_SUB_GROUP_PRIMARY);
-               return "metadata";
+               switch (space_info->subgroup_id) {
+               case BTRFS_SUB_GROUP_PRIMARY:
+                       return "metadata";
+               case BTRFS_SUB_GROUP_TREELOG:
+                       return "metadata-treelog";
+               default:
+                       WARN_ON_ONCE(1);
+                       return "metadata (unknown sub-group)";
+               }
        case BTRFS_BLOCK_GROUP_DATA:
                switch (space_info->subgroup_id) {
                case BTRFS_SUB_GROUP_PRIMARY: