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>
                        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;
        }
 
 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
 
        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: