Add new members for mkfs_config:
1. super_bytenr
   For convert case to restore where super block is allocated.
   Has no use for normal mkfs case.

2. convert_used
   A cache tree to record which ranges are used in original filesystem.
   This will gives the guide for later convert implement to provide better
   system/meta chunk allocation, other than just allocating them into
   range covered by DATA chunk.

3. chunk_uuid
   Chunk tree uuid, used for later per tree root initialization.

Since convert_used is a cache_tree, it needs to be initialized and freed
properly, add new init/free function for it too.

Signed-off-by: Qu Wenruo <[email protected]>
---
 btrfs-convert.c |  5 +++++
 mkfs.c          |  2 ++
 utils.h         | 29 +++++++++++++++++++++++++++++
 3 files changed, 36 insertions(+)

diff --git a/btrfs-convert.c b/btrfs-convert.c
index 02e5cdb..f66affd 100644
--- a/btrfs-convert.c
+++ b/btrfs-convert.c
@@ -2322,6 +2322,9 @@ static int do_convert(const char *devname, int datacsum, 
int packing, int noxatt
        }
        if (btrfs_check_nodesize(nodesize, blocksize, features))
                goto fail;
+
+       init_mkfs_config(&mkfs_cfg);
+
        blocks_per_node = nodesize / blocksize;
        ret = -blocks_per_node;
        for (i = 0; i < 7; i++) {
@@ -2479,6 +2482,8 @@ static int do_convert(const char *devname, int datacsum, 
int packing, int noxatt
        printf("conversion complete.\n");
        return 0;
 fail:
+       free_mkfs_config(&mkfs_cfg);
+
        if (fd != -1)
                close(fd);
        if (is_btrfs)
diff --git a/mkfs.c b/mkfs.c
index 5f1411f..306be51 100644
--- a/mkfs.c
+++ b/mkfs.c
@@ -1669,6 +1669,7 @@ int main(int ac, char **av)
                        "WARNING: metatdata has lower redundancy than 
data!\n\n");
        }
 
+       init_mkfs_config(&mkfs_cfg);
        mkfs_cfg.label = label;
        mkfs_cfg.fs_uuid = fs_uuid;
        memcpy(mkfs_cfg.blocks, blocks, sizeof(blocks));
@@ -1839,6 +1840,7 @@ raid_groups:
        }
 
 out:
+       free_mkfs_config(&mkfs_cfg);
        ret = close_ctree(root);
        BUG_ON(ret);
        btrfs_close_all_devices();
diff --git a/utils.h b/utils.h
index b625330..dff2633 100644
--- a/utils.h
+++ b/utils.h
@@ -109,14 +109,43 @@ void btrfs_parse_features_to_string(char *buf, u64 flags);
 struct btrfs_mkfs_config {
        char *label;
        char *fs_uuid;
+       char *chunk_uuid;
+
        u64 blocks[8];
        u64 num_bytes;
        u32 nodesize;
        u32 sectorsize;
        u32 stripesize;
        u64 features;
+
+       /*
+        * Already used space in original filesystem before convert.
+        * For normal mkfs case, it should be empty.
+        */
+       struct cache_tree convert_used;
+
+       /*
+        * Super block bytenr.
+        * For normal mkfs case, it shouldn't be used as mkfs doesn't support
+        * change super block bytenr anymore.
+        *
+        * For convert use, it restore the superblock bytenr from the temporary
+        * btrfs fs.
+        */
+       u64 super_bytenr;
 };
 
+static inline void init_mkfs_config(struct btrfs_mkfs_config *cfg)
+{
+       memset(cfg, 0, sizeof(*cfg));
+       cache_tree_init(&cfg->convert_used);
+}
+
+static inline void free_mkfs_config(struct btrfs_mkfs_config *cfg)
+{
+       free_extent_cache_tree(&cfg->convert_used);
+}
+
 int make_btrfs(int fd, struct btrfs_mkfs_config *cfg);
 int btrfs_make_root_dir(struct btrfs_trans_handle *trans,
                        struct btrfs_root *root, u64 objectid);
-- 
2.6.2

--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to