mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-28 07:04:00 +08:00
btrfs: Move btrfs_raid_array to public
This array is used to record attributes of each raid type, make it public, and many functions will benifit with this array. For example, num_tolerated_disk_barrier_failures(), we can avoid complex conditions in this function, and get raid attribute simply by accessing above array. It can also make code logic simple, reduce duplication code, and increase maintainability. Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: Zhao Lei <zhaolei@cn.fujitsu.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
e9cf439f0d
commit
af90204750
@ -42,6 +42,75 @@
|
|||||||
#include "dev-replace.h"
|
#include "dev-replace.h"
|
||||||
#include "sysfs.h"
|
#include "sysfs.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,
|
||||||
|
.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,
|
||||||
|
},
|
||||||
|
[BTRFS_RAID_RAID5] = {
|
||||||
|
.sub_stripes = 1,
|
||||||
|
.dev_stripes = 1,
|
||||||
|
.devs_max = 0,
|
||||||
|
.devs_min = 2,
|
||||||
|
.devs_increment = 1,
|
||||||
|
.ncopies = 2,
|
||||||
|
},
|
||||||
|
[BTRFS_RAID_RAID6] = {
|
||||||
|
.sub_stripes = 1,
|
||||||
|
.dev_stripes = 1,
|
||||||
|
.devs_max = 0,
|
||||||
|
.devs_min = 3,
|
||||||
|
.devs_increment = 1,
|
||||||
|
.ncopies = 3,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
const u64 const btrfs_raid_group[BTRFS_NR_RAID_TYPES] = {
|
||||||
|
[BTRFS_RAID_RAID10] = BTRFS_BLOCK_GROUP_RAID10,
|
||||||
|
[BTRFS_RAID_RAID1] = BTRFS_BLOCK_GROUP_RAID1,
|
||||||
|
[BTRFS_RAID_DUP] = BTRFS_BLOCK_GROUP_DUP,
|
||||||
|
[BTRFS_RAID_RAID0] = BTRFS_BLOCK_GROUP_RAID0,
|
||||||
|
[BTRFS_RAID_SINGLE] = 0,
|
||||||
|
[BTRFS_RAID_RAID5] = BTRFS_BLOCK_GROUP_RAID5,
|
||||||
|
[BTRFS_RAID_RAID6] = BTRFS_BLOCK_GROUP_RAID6,
|
||||||
|
};
|
||||||
|
|
||||||
static int init_first_rw_device(struct btrfs_trans_handle *trans,
|
static int init_first_rw_device(struct btrfs_trans_handle *trans,
|
||||||
struct btrfs_root *root,
|
struct btrfs_root *root,
|
||||||
struct btrfs_device *device);
|
struct btrfs_device *device);
|
||||||
@ -4285,65 +4354,6 @@ static int btrfs_cmp_device_info(const void *a, const void *b)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static 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,
|
|
||||||
.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,
|
|
||||||
},
|
|
||||||
[BTRFS_RAID_RAID5] = {
|
|
||||||
.sub_stripes = 1,
|
|
||||||
.dev_stripes = 1,
|
|
||||||
.devs_max = 0,
|
|
||||||
.devs_min = 2,
|
|
||||||
.devs_increment = 1,
|
|
||||||
.ncopies = 2,
|
|
||||||
},
|
|
||||||
[BTRFS_RAID_RAID6] = {
|
|
||||||
.sub_stripes = 1,
|
|
||||||
.dev_stripes = 1,
|
|
||||||
.devs_max = 0,
|
|
||||||
.devs_min = 3,
|
|
||||||
.devs_increment = 1,
|
|
||||||
.ncopies = 3,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
static u32 find_raid56_stripe_len(u32 data_devices, u32 dev_stripe_target)
|
static u32 find_raid56_stripe_len(u32 data_devices, u32 dev_stripe_target)
|
||||||
{
|
{
|
||||||
/* TODO allow them to set a preferred stripe size */
|
/* TODO allow them to set a preferred stripe size */
|
||||||
|
@ -338,6 +338,10 @@ struct btrfs_raid_attr {
|
|||||||
int ncopies; /* how many copies to data has */
|
int ncopies; /* how many copies to data has */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
extern const struct btrfs_raid_attr btrfs_raid_array[BTRFS_NR_RAID_TYPES];
|
||||||
|
|
||||||
|
extern const u64 btrfs_raid_group[BTRFS_NR_RAID_TYPES];
|
||||||
|
|
||||||
struct map_lookup {
|
struct map_lookup {
|
||||||
u64 type;
|
u64 type;
|
||||||
int io_align;
|
int io_align;
|
||||||
|
Loading…
Reference in New Issue
Block a user