aboutsummaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorMiao Xie <miaox@cn.fujitsu.com>2013-01-17 00:38:51 -0500
committerJosef Bacik <jbacik@fusionio.com>2013-02-20 09:37:19 -0500
commite6ec716f0ddbe51741ef261d0804f0c28038dda4 (patch)
tree3339ba3503a5bac32c5cf7835a153f73d5eecd06 /fs
parenta1897fddd28daf6b23d05a30dc2a18836f77f8e3 (diff)
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: Miao Xie <miaox@cn.fujitsu.com> Signed-off-by: Josef Bacik <jbacik@fusionio.com>
Diffstat (limited to 'fs')
-rw-r--r--fs/btrfs/ctree.h10
-rw-r--r--fs/btrfs/extent-tree.c22
-rw-r--r--fs/btrfs/volumes.c47
3 files changed, 59 insertions, 20 deletions
diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h
index 9ee099f3f834..541ce9a9949e 100644
--- a/fs/btrfs/ctree.h
+++ b/fs/btrfs/ctree.h
@@ -953,7 +953,15 @@ struct btrfs_dev_replace_item {
953#define BTRFS_BLOCK_GROUP_DUP (1ULL << 5) 953#define BTRFS_BLOCK_GROUP_DUP (1ULL << 5)
954#define BTRFS_BLOCK_GROUP_RAID10 (1ULL << 6) 954#define BTRFS_BLOCK_GROUP_RAID10 (1ULL << 6)
955#define BTRFS_BLOCK_GROUP_RESERVED BTRFS_AVAIL_ALLOC_BIT_SINGLE 955#define BTRFS_BLOCK_GROUP_RESERVED BTRFS_AVAIL_ALLOC_BIT_SINGLE
956#define BTRFS_NR_RAID_TYPES 5 956
957enum btrfs_raid_types {
958 BTRFS_RAID_RAID10,
959 BTRFS_RAID_RAID1,
960 BTRFS_RAID_DUP,
961 BTRFS_RAID_RAID0,
962 BTRFS_RAID_SINGLE,
963 BTRFS_NR_RAID_TYPES
964};
957 965
958#define BTRFS_BLOCK_GROUP_TYPE_MASK (BTRFS_BLOCK_GROUP_DATA | \ 966#define BTRFS_BLOCK_GROUP_TYPE_MASK (BTRFS_BLOCK_GROUP_DATA | \
959 BTRFS_BLOCK_GROUP_SYSTEM | \ 967 BTRFS_BLOCK_GROUP_SYSTEM | \
diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
index 82400b2b2517..174c4d5c692c 100644
--- a/fs/btrfs/extent-tree.c
+++ b/fs/btrfs/extent-tree.c
@@ -5545,20 +5545,16 @@ wait_block_group_cache_done(struct btrfs_block_group_cache *cache)
5545 5545
5546int __get_raid_index(u64 flags) 5546int __get_raid_index(u64 flags)
5547{ 5547{
5548 int index;
5549
5550 if (flags & BTRFS_BLOCK_GROUP_RAID10) 5548 if (flags & BTRFS_BLOCK_GROUP_RAID10)
5551 index = 0; 5549 return BTRFS_RAID_RAID10;
5552 else if (flags & BTRFS_BLOCK_GROUP_RAID1) 5550 else if (flags & BTRFS_BLOCK_GROUP_RAID1)
5553 index = 1; 5551 return BTRFS_RAID_RAID1;
5554 else if (flags & BTRFS_BLOCK_GROUP_DUP) 5552 else if (flags & BTRFS_BLOCK_GROUP_DUP)
5555 index = 2; 5553 return BTRFS_RAID_DUP;
5556 else if (flags & BTRFS_BLOCK_GROUP_RAID0) 5554 else if (flags & BTRFS_BLOCK_GROUP_RAID0)
5557 index = 3; 5555 return BTRFS_RAID_RAID0;
5558 else 5556 else
5559 index = 4; 5557 return BTRFS_RAID_SINGLE;
5560
5561 return index;
5562} 5558}
5563 5559
5564static int get_block_group_index(struct btrfs_block_group_cache *cache) 5560static 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 index = get_block_group_index(block_group); 7514 index = get_block_group_index(block_group);
7519 } 7515 }
7520 7516
7521 if (index == 0) { 7517 if (index == BTRFS_RAID_RAID10) {
7522 dev_min = 4; 7518 dev_min = 4;
7523 /* Divide by 2 */ 7519 /* Divide by 2 */
7524 min_free >>= 1; 7520 min_free >>= 1;
7525 } else if (index == 1) { 7521 } else if (index == BTRFS_RAID_RAID1) {
7526 dev_min = 2; 7522 dev_min = 2;
7527 } else if (index == 2) { 7523 } else if (index == BTRFS_RAID_DUP) {
7528 /* Multiply by 2 */ 7524 /* Multiply by 2 */
7529 min_free <<= 1; 7525 min_free <<= 1;
7530 } else if (index == 3) { 7526 } else if (index == BTRFS_RAID_RAID0) {
7531 dev_min = fs_devices->rw_devices; 7527 dev_min = fs_devices->rw_devices;
7532 do_div(min_free, dev_min); 7528 do_div(min_free, dev_min);
7533 } 7529 }
diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c
index 5349e17d8863..1ce581d58d87 100644
--- a/fs/btrfs/volumes.c
+++ b/fs/btrfs/volumes.c
@@ -3562,13 +3562,48 @@ static int btrfs_cmp_device_info(const void *a, const void *b)
3562} 3562}
3563 3563
3564struct btrfs_raid_attr btrfs_raid_array[BTRFS_NR_RAID_TYPES] = { 3564struct btrfs_raid_attr btrfs_raid_array[BTRFS_NR_RAID_TYPES] = {
3565 { 2, 1, 0, 4, 2, 2 /* raid10 */ }, 3565 [BTRFS_RAID_RAID10] = {
3566 { 1, 1, 2, 2, 2, 2 /* raid1 */ }, 3566 .sub_stripes = 2,
3567 { 1, 2, 1, 1, 1, 2 /* dup */ }, 3567 .dev_stripes = 1,
3568 { 1, 1, 0, 2, 1, 1 /* raid0 */ }, 3568 .devs_max = 0, /* 0 == as many as possible */
3569 { 1, 1, 1, 1, 1, 1 /* single */ }, 3569 .devs_min = 4,
3570 .devs_increment = 2,
3571 .ncopies = 2,
3572 },
3573 [BTRFS_RAID_RAID1] = {
3574 .sub_stripes = 1,
3575 .dev_stripes = 1,
3576 .devs_max = 2,
3577 .devs_min = 2,
3578 .devs_increment = 2,
3579 .ncopies = 2,
3580 },
3581 [BTRFS_RAID_DUP] = {
3582 .sub_stripes = 1,
3583 .dev_stripes = 2,
3584 .devs_max = 1,
3585 .devs_min = 1,
3586 .devs_increment = 1,
3587 .ncopies = 2,
3588 },
3589 [BTRFS_RAID_RAID0] = {
3590 .sub_stripes = 1,
3591 .dev_stripes = 1,
3592 .devs_max = 0,
3593 .devs_min = 2,
3594 .devs_increment = 1,
3595 .ncopies = 1,
3596 },
3597 [BTRFS_RAID_SINGLE] = {
3598 .sub_stripes = 1,
3599 .dev_stripes = 1,
3600 .devs_max = 1,
3601 .devs_min = 1,
3602 .devs_increment = 1,
3603 .ncopies = 1,
3604 },
3570}; 3605};
3571 3606
3572static int __btrfs_alloc_chunk(struct btrfs_trans_handle *trans, 3607static int __btrfs_alloc_chunk(struct btrfs_trans_handle *trans,
3573 struct btrfs_root *extent_root, 3608 struct btrfs_root *extent_root,
3574 struct map_lookup **map_ret, 3609 struct map_lookup **map_ret,