case BTRFS_CHUNK_TREE_OBJECTID:
                root->block_rsv = &fs_info->chunk_block_rsv;
                break;
+       case BTRFS_TREE_LOG_OBJECTID:
+               root->block_rsv = &fs_info->treelog_rsv;
+               break;
        default:
                root->block_rsv = NULL;
                break;
        fs_info->delayed_block_rsv.space_info = space_info;
        fs_info->delayed_refs_rsv.space_info = space_info;
 
+       /* The treelog_rsv uses a dedicated space_info on the zoned mode. */
+       if (!btrfs_is_zoned(fs_info)) {
+               fs_info->treelog_rsv.space_info = space_info;
+       } else {
+               ASSERT(space_info->sub_group[0]->subgroup_id == BTRFS_SUB_GROUP_TREELOG);
+               fs_info->treelog_rsv.space_info = space_info->sub_group[0];
+       }
+
        btrfs_update_global_block_rsv(fs_info);
 }
 
 
        BTRFS_BLOCK_RSV_CHUNK,
        BTRFS_BLOCK_RSV_DELOPS,
        BTRFS_BLOCK_RSV_DELREFS,
+       BTRFS_BLOCK_RSV_TREELOG,
        BTRFS_BLOCK_RSV_EMPTY,
        BTRFS_BLOCK_RSV_TEMP,
 };
 
 {
        struct btrfs_fs_info *fs_info = inode->root->fs_info;
 
-       if (btrfs_is_zoned(fs_info) && btrfs_is_data_reloc_root(inode->root))
-               return fs_info->data_sinfo->sub_group[SUB_GROUP_DATA_RELOC];
+       if (btrfs_is_zoned(fs_info) && btrfs_is_data_reloc_root(inode->root)) {
+               ASSERT(fs_info->data_sinfo->sub_group[0]->subgroup_id ==
+                      BTRFS_SUB_GROUP_DATA_RELOC);
+               return fs_info->data_sinfo->sub_group[0];
+       }
        return fs_info->data_sinfo;
 }
 
 
                             BTRFS_BLOCK_RSV_GLOBAL);
        btrfs_init_block_rsv(&fs_info->trans_block_rsv, BTRFS_BLOCK_RSV_TRANS);
        btrfs_init_block_rsv(&fs_info->chunk_block_rsv, BTRFS_BLOCK_RSV_CHUNK);
+       btrfs_init_block_rsv(&fs_info->treelog_rsv, BTRFS_BLOCK_RSV_TREELOG);
        btrfs_init_block_rsv(&fs_info->empty_block_rsv, BTRFS_BLOCK_RSV_EMPTY);
        btrfs_init_block_rsv(&fs_info->delayed_block_rsv,
                             BTRFS_BLOCK_RSV_DELOPS);
 
        struct btrfs_block_rsv delayed_block_rsv;
        /* Block reservation for delayed refs */
        struct btrfs_block_rsv delayed_refs_rsv;
+       /* Block reservation for treelog tree */
+       struct btrfs_block_rsv treelog_rsv;
 
        struct btrfs_block_rsv empty_block_rsv;