btrfs-progs: tests: mkfs fills uuid and otime for FS_TREE
[platform/upstream/btrfs-progs.git] / volumes.c
index 5487367..9ebe52a 100644 (file)
--- a/volumes.c
+++ b/volumes.c
 #include "utils.h"
 #include "kernel-lib/raid56.h"
 
+const struct btrfs_raid_attr btrfs_raid_array[BTRFS_NR_RAID_TYPES] = {
+       [BTRFS_RAID_RAID10] = {
+               .sub_stripes    = 2,
+               .dev_stripes    = 1,
+               .devs_max       = 0,    /* 0 == as many as possible */
+               .devs_min       = 4,
+               .tolerated_failures = 1,
+               .devs_increment = 2,
+               .ncopies        = 2,
+       },
+       [BTRFS_RAID_RAID1] = {
+               .sub_stripes    = 1,
+               .dev_stripes    = 1,
+               .devs_max       = 2,
+               .devs_min       = 2,
+               .tolerated_failures = 1,
+               .devs_increment = 2,
+               .ncopies        = 2,
+       },
+       [BTRFS_RAID_DUP] = {
+               .sub_stripes    = 1,
+               .dev_stripes    = 2,
+               .devs_max       = 1,
+               .devs_min       = 1,
+               .tolerated_failures = 0,
+               .devs_increment = 1,
+               .ncopies        = 2,
+       },
+       [BTRFS_RAID_RAID0] = {
+               .sub_stripes    = 1,
+               .dev_stripes    = 1,
+               .devs_max       = 0,
+               .devs_min       = 2,
+               .tolerated_failures = 0,
+               .devs_increment = 1,
+               .ncopies        = 1,
+       },
+       [BTRFS_RAID_SINGLE] = {
+               .sub_stripes    = 1,
+               .dev_stripes    = 1,
+               .devs_max       = 1,
+               .devs_min       = 1,
+               .tolerated_failures = 0,
+               .devs_increment = 1,
+               .ncopies        = 1,
+       },
+       [BTRFS_RAID_RAID5] = {
+               .sub_stripes    = 1,
+               .dev_stripes    = 1,
+               .devs_max       = 0,
+               .devs_min       = 2,
+               .tolerated_failures = 1,
+               .devs_increment = 1,
+               .ncopies        = 2,
+       },
+       [BTRFS_RAID_RAID6] = {
+               .sub_stripes    = 1,
+               .dev_stripes    = 1,
+               .devs_max       = 0,
+               .devs_min       = 3,
+               .tolerated_failures = 2,
+               .devs_increment = 1,
+               .ncopies        = 3,
+       },
+};
+
 struct stripe {
        struct btrfs_device *dev;
        u64 physical;
@@ -450,10 +516,10 @@ out:
 }
 
 static int find_free_dev_extent(struct btrfs_device *device, u64 num_bytes,
-                               u64 *start)
+                               u64 *start, u64 *len)
 {
        /* FIXME use last free of some kind */
-       return find_free_dev_extent_start(device, num_bytes, 0, start, NULL);
+       return find_free_dev_extent_start(device, num_bytes, 0, start, len);
 }
 
 static int btrfs_alloc_dev_extent(struct btrfs_trans_handle *trans,
@@ -477,7 +543,7 @@ static int btrfs_alloc_dev_extent(struct btrfs_trans_handle *trans,
         * is responsible to make sure it's free.
         */
        if (!convert) {
-               ret = find_free_dev_extent(device, num_bytes, start);
+               ret = find_free_dev_extent(device, num_bytes, start, NULL);
                if (ret)
                        goto err;
        }
@@ -826,7 +892,7 @@ error:
        return ret;
 }
 
-#define BTRFS_MAX_DEVS(r) ((BTRFS_LEAF_DATA_SIZE(r)            \
+#define BTRFS_MAX_DEVS(info) ((BTRFS_LEAF_DATA_SIZE(info)      \
                        - sizeof(struct btrfs_item)             \
                        - sizeof(struct btrfs_chunk))           \
                        / sizeof(struct btrfs_stripe) + 1)
@@ -882,12 +948,12 @@ int btrfs_alloc_chunk(struct btrfs_trans_handle *trans,
                        calc_size = SZ_1G;
                        max_chunk_size = 10 * calc_size;
                        min_stripe_size = SZ_64M;
-                       max_stripes = BTRFS_MAX_DEVS(chunk_root);
+                       max_stripes = BTRFS_MAX_DEVS(info);
                } else if (type & BTRFS_BLOCK_GROUP_METADATA) {
                        calc_size = SZ_1G;
                        max_chunk_size = 4 * calc_size;
                        min_stripe_size = SZ_32M;
-                       max_stripes = BTRFS_MAX_DEVS(chunk_root);
+                       max_stripes = BTRFS_MAX_DEVS(info);
                }
        }
        if (type & BTRFS_BLOCK_GROUP_RAID1) {