diff options
author | Qu Wenruo <wqu@suse.com> | 2018-02-09 15:44:26 +0800 |
---|---|---|
committer | David Sterba <dsterba@suse.com> | 2018-03-06 11:28:26 +0100 |
commit | 2ac42077c2d0edf5fc74c7ccff6b2fb71b3d7ff6 (patch) | |
tree | 292d20b25ea6bb92d80648fe10ee9acd879cdb93 /volumes.h | |
parent | f174972d2dd1f2e6c9ca62839061782a22971070 (diff) |
btrfs-progs: Move chunk stripe size calculation function to volumes.h
Signed-off-by: Qu Wenruo <wqu@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat (limited to 'volumes.h')
-rw-r--r-- | volumes.h | 22 |
1 files changed, 22 insertions, 0 deletions
@@ -209,6 +209,28 @@ static inline int check_crossing_stripes(struct btrfs_fs_info *fs_info, (bg_offset + len - 1) / BTRFS_STRIPE_LEN); } +static inline u64 calc_stripe_length(u64 type, u64 length, int num_stripes) +{ + u64 stripe_size; + + if (type & BTRFS_BLOCK_GROUP_RAID0) { + stripe_size = length; + stripe_size /= num_stripes; + } else if (type & BTRFS_BLOCK_GROUP_RAID10) { + stripe_size = length * 2; + stripe_size /= num_stripes; + } else if (type & BTRFS_BLOCK_GROUP_RAID5) { + stripe_size = length; + stripe_size /= (num_stripes - 1); + } else if (type & BTRFS_BLOCK_GROUP_RAID6) { + stripe_size = length; + stripe_size /= (num_stripes - 2); + } else { + stripe_size = length; + } + return stripe_size; +} + int __btrfs_map_block(struct btrfs_fs_info *fs_info, int rw, u64 logical, u64 *length, u64 *type, struct btrfs_multi_bio **multi_ret, int mirror_num, |