|
@@ -3562,13 +3562,48 @@ static int btrfs_cmp_device_info(const void *a, const void *b)
|
|
|
}
|
|
|
|
|
|
struct btrfs_raid_attr btrfs_raid_array[BTRFS_NR_RAID_TYPES] = {
|
|
|
- { 2, 1, 0, 4, 2, 2 /* raid10 */ },
|
|
|
- { 1, 1, 2, 2, 2, 2 /* raid1 */ },
|
|
|
- { 1, 2, 1, 1, 1, 2 /* dup */ },
|
|
|
- { 1, 1, 0, 2, 1, 1 /* raid0 */ },
|
|
|
- { 1, 1, 1, 1, 1, 1 /* single */ },
|
|
|
+ [BTRFS_RAID_RAID10] = {
|
|
|
+ .sub_stripes = 2,
|
|
|
+ .dev_stripes = 1,
|
|
|
+ .devs_max = 0, /* 0 == as many as possible */
|
|
|
+ .devs_min = 4,
|
|
|
+ .devs_increment = 2,
|
|
|
+ .ncopies = 2,
|
|
|
+ },
|
|
|
+ [BTRFS_RAID_RAID1] = {
|
|
|
+ .sub_stripes = 1,
|
|
|
+ .dev_stripes = 1,
|
|
|
+ .devs_max = 2,
|
|
|
+ .devs_min = 2,
|
|
|
+ .devs_increment = 2,
|
|
|
+ .ncopies = 2,
|
|
|
+ },
|
|
|
+ [BTRFS_RAID_DUP] = {
|
|
|
+ .sub_stripes = 1,
|
|
|
+ .dev_stripes = 2,
|
|
|
+ .devs_max = 1,
|
|
|
+ .devs_min = 1,
|
|
|
+ .devs_increment = 1,
|
|
|
+ .ncopies = 2,
|
|
|
+ },
|
|
|
+ [BTRFS_RAID_RAID0] = {
|
|
|
+ .sub_stripes = 1,
|
|
|
+ .dev_stripes = 1,
|
|
|
+ .devs_max = 0,
|
|
|
+ .devs_min = 2,
|
|
|
+ .devs_increment = 1,
|
|
|
+ .ncopies = 1,
|
|
|
+ },
|
|
|
+ [BTRFS_RAID_SINGLE] = {
|
|
|
+ .sub_stripes = 1,
|
|
|
+ .dev_stripes = 1,
|
|
|
+ .devs_max = 1,
|
|
|
+ .devs_min = 1,
|
|
|
+ .devs_increment = 1,
|
|
|
+ .ncopies = 1,
|
|
|
+ },
|
|
|
};
|
|
|
-
|
|
|
+
|
|
|
static int __btrfs_alloc_chunk(struct btrfs_trans_handle *trans,
|
|
|
struct btrfs_root *extent_root,
|
|
|
struct map_lookup **map_ret,
|