Hi,
Great cleanup series!
On 5/17/19 11:43 AM, David Sterba wrote:
> The table is already used for ncopies, replace open coding of stripes
> with the raid_attr value.
>
> Signed-off-by: David Sterba <dsterba@xxxxxxxx>
> ---
> fs/btrfs/volumes.c | 15 +++++----------
> 1 file changed, 5 insertions(+), 10 deletions(-)
>
> diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c
> index 995a15a816f2..743ed1f0b2a6 100644
> --- a/fs/btrfs/volumes.c
> +++ b/fs/btrfs/volumes.c
> @@ -6652,19 +6652,14 @@ static u64 calc_stripe_length(u64 type, u64 chunk_len, int num_stripes)
> {
> int index = btrfs_bg_flags_to_raid_index(type);
> int ncopies = btrfs_raid_array[index].ncopies;
> + int nparity = btrfs_raid_array[index].nparity;
> int data_stripes;
>
> - switch (type & BTRFS_BLOCK_GROUP_PROFILE_MASK) {
> - case BTRFS_BLOCK_GROUP_RAID5:
> - data_stripes = num_stripes - 1;
> - break;
> - case BTRFS_BLOCK_GROUP_RAID6:
> - data_stripes = num_stripes - 2;
> - break;
> - default:
> + if (nparity)
> + data_stripes = num_stripes - nparity;
> + else
> data_stripes = num_stripes / ncopies;
> - break;
> - }
A few lines earlier in that file we have this:
/*
* this will have to be fixed for RAID1 and RAID10 over
* more drives
*/
data_stripes = (num_stripes - nparity) / ncopies;
1) I changed the calculation in b50836edf9 and did it in one statement,
I see you use and extra if here. Which one do you prefer and why?
2) Back then I wanted to get rid of that comment, because I don't
understand it. "this will have to be fixed" does not tell me what should
be fixed, so I left it there. Maybe now is the time? Do you know what
this comment/warning means and if it can be removed? I mean, even with
raid1c3 the calculation would be correct. There's no parity and three
copies.
> +
> return div_u64(chunk_len, data_stripes);
> }
>
>
Hans