提交 e6ec716f 编写于 作者: M Miao Xie 提交者: Josef Bacik

Btrfs: make raid attr array more readable

The current code of raid attr arry is hard to understand and it is easy to
introduce some problem if we modify the array. So I changed it and made it
more readable.

Cc: Liu Bo <bo.li.liu@oracle.com>
Signed-off-by: NMiao Xie <miaox@cn.fujitsu.com>
Signed-off-by: NJosef Bacik <jbacik@fusionio.com>
上级 a1897fdd
...@@ -953,7 +953,15 @@ struct btrfs_dev_replace_item { ...@@ -953,7 +953,15 @@ struct btrfs_dev_replace_item {
#define BTRFS_BLOCK_GROUP_DUP (1ULL << 5) #define BTRFS_BLOCK_GROUP_DUP (1ULL << 5)
#define BTRFS_BLOCK_GROUP_RAID10 (1ULL << 6) #define BTRFS_BLOCK_GROUP_RAID10 (1ULL << 6)
#define BTRFS_BLOCK_GROUP_RESERVED BTRFS_AVAIL_ALLOC_BIT_SINGLE #define BTRFS_BLOCK_GROUP_RESERVED BTRFS_AVAIL_ALLOC_BIT_SINGLE
#define BTRFS_NR_RAID_TYPES 5
enum btrfs_raid_types {
BTRFS_RAID_RAID10,
BTRFS_RAID_RAID1,
BTRFS_RAID_DUP,
BTRFS_RAID_RAID0,
BTRFS_RAID_SINGLE,
BTRFS_NR_RAID_TYPES
};
#define BTRFS_BLOCK_GROUP_TYPE_MASK (BTRFS_BLOCK_GROUP_DATA | \ #define BTRFS_BLOCK_GROUP_TYPE_MASK (BTRFS_BLOCK_GROUP_DATA | \
BTRFS_BLOCK_GROUP_SYSTEM | \ BTRFS_BLOCK_GROUP_SYSTEM | \
......
...@@ -5545,20 +5545,16 @@ wait_block_group_cache_done(struct btrfs_block_group_cache *cache) ...@@ -5545,20 +5545,16 @@ wait_block_group_cache_done(struct btrfs_block_group_cache *cache)
int __get_raid_index(u64 flags) int __get_raid_index(u64 flags)
{ {
int index;
if (flags & BTRFS_BLOCK_GROUP_RAID10) if (flags & BTRFS_BLOCK_GROUP_RAID10)
index = 0; return BTRFS_RAID_RAID10;
else if (flags & BTRFS_BLOCK_GROUP_RAID1) else if (flags & BTRFS_BLOCK_GROUP_RAID1)
index = 1; return BTRFS_RAID_RAID1;
else if (flags & BTRFS_BLOCK_GROUP_DUP) else if (flags & BTRFS_BLOCK_GROUP_DUP)
index = 2; return BTRFS_RAID_DUP;
else if (flags & BTRFS_BLOCK_GROUP_RAID0) else if (flags & BTRFS_BLOCK_GROUP_RAID0)
index = 3; return BTRFS_RAID_RAID0;
else else
index = 4; return BTRFS_RAID_SINGLE;
return index;
} }
static int get_block_group_index(struct btrfs_block_group_cache *cache) static int get_block_group_index(struct btrfs_block_group_cache *cache)
...@@ -7518,16 +7514,16 @@ int btrfs_can_relocate(struct btrfs_root *root, u64 bytenr) ...@@ -7518,16 +7514,16 @@ int btrfs_can_relocate(struct btrfs_root *root, u64 bytenr)
index = get_block_group_index(block_group); index = get_block_group_index(block_group);
} }
if (index == 0) { if (index == BTRFS_RAID_RAID10) {
dev_min = 4; dev_min = 4;
/* Divide by 2 */ /* Divide by 2 */
min_free >>= 1; min_free >>= 1;
} else if (index == 1) { } else if (index == BTRFS_RAID_RAID1) {
dev_min = 2; dev_min = 2;
} else if (index == 2) { } else if (index == BTRFS_RAID_DUP) {
/* Multiply by 2 */ /* Multiply by 2 */
min_free <<= 1; min_free <<= 1;
} else if (index == 3) { } else if (index == BTRFS_RAID_RAID0) {
dev_min = fs_devices->rw_devices; dev_min = fs_devices->rw_devices;
do_div(min_free, dev_min); do_div(min_free, dev_min);
} }
......
...@@ -3562,11 +3562,46 @@ static int btrfs_cmp_device_info(const void *a, const void *b) ...@@ -3562,11 +3562,46 @@ static int btrfs_cmp_device_info(const void *a, const void *b)
} }
struct btrfs_raid_attr btrfs_raid_array[BTRFS_NR_RAID_TYPES] = { struct btrfs_raid_attr btrfs_raid_array[BTRFS_NR_RAID_TYPES] = {
{ 2, 1, 0, 4, 2, 2 /* raid10 */ }, [BTRFS_RAID_RAID10] = {
{ 1, 1, 2, 2, 2, 2 /* raid1 */ }, .sub_stripes = 2,
{ 1, 2, 1, 1, 1, 2 /* dup */ }, .dev_stripes = 1,
{ 1, 1, 0, 2, 1, 1 /* raid0 */ }, .devs_max = 0, /* 0 == as many as possible */
{ 1, 1, 1, 1, 1, 1 /* single */ }, .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, static int __btrfs_alloc_chunk(struct btrfs_trans_handle *trans,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册