From 09ab0365ff14c5481a2b0f3b401666d2fab3d05a Mon Sep 17 00:00:00 2001 From: Zheng Yan Date: Fri, 26 Sep 2008 10:26:53 -0400 Subject: update mkfs.btrfs for the new space balancing code The new space balancing code needs a subvol to store the temporary inode for data extent relocation. Signed-off-by: Chris Mason --- mkfs.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'mkfs.c') diff --git a/mkfs.c b/mkfs.c index 6a100640..3c09c3a9 100644 --- a/mkfs.c +++ b/mkfs.c @@ -232,6 +232,32 @@ static int create_raid_groups(struct btrfs_trans_handle *trans, return 0; } +static int create_data_reloc_tree(struct btrfs_trans_handle *trans, + struct btrfs_root *root) +{ + struct btrfs_key location; + struct btrfs_root_item root_item; + struct extent_buffer *tmp; + u64 objectid = BTRFS_DATA_RELOC_TREE_OBJECTID; + int ret; + + ret = btrfs_copy_root(trans, root, root->node, &tmp, objectid); + BUG_ON(ret); + + memcpy(&root_item, &root->root_item, sizeof(root_item)); + btrfs_set_root_bytenr(&root_item, tmp->start); + btrfs_set_root_level(&root_item, btrfs_header_level(tmp)); + free_extent_buffer(tmp); + + location.objectid = objectid; + location.type = BTRFS_ROOT_ITEM_KEY; + location.offset = trans->transid; + ret = btrfs_insert_root(trans, root->fs_info->tree_root, + &location, &root_item); + BUG_ON(ret); + return 0; +} + static void print_usage(void) { fprintf(stderr, "usage: mkfs.btrfs [options] dev [ dev ... ]\n"); @@ -459,6 +485,9 @@ raid_groups: metadata_profile); BUG_ON(ret); + ret = create_data_reloc_tree(trans, root); + BUG_ON(ret); + printf("fs created label %s on %s\n\tnodesize %u leafsize %u " "sectorsize %u size %s\n", label, first_file, nodesize, leafsize, sectorsize, -- cgit v1.2.3