mirror of
https://github.com/kdave/btrfs-progs
synced 2024-12-26 16:12:34 +00:00
btrfs-progs: volumes: Use new raid5_gen_result to calculate raid5 parity
Use thew raid5_gen_result() function to calculate raid5 parity. Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
ef67f448c7
commit
c00278a9e8
19
volumes.c
19
volumes.c
@ -2136,7 +2136,6 @@ int write_raid56_with_parity(struct btrfs_fs_info *info,
|
||||
{
|
||||
struct extent_buffer **ebs, *p_eb = NULL, *q_eb = NULL;
|
||||
int i;
|
||||
int j;
|
||||
int ret;
|
||||
int alloc_size = eb->len;
|
||||
void **pointers;
|
||||
@ -2194,18 +2193,12 @@ int write_raid56_with_parity(struct btrfs_fs_info *info,
|
||||
raid6_gen_syndrome(multi->num_stripes, stripe_len, pointers);
|
||||
} else {
|
||||
ebs[multi->num_stripes - 1] = p_eb;
|
||||
memcpy(p_eb->data, ebs[0]->data, stripe_len);
|
||||
for (j = 1; j < multi->num_stripes - 1; j++) {
|
||||
for (i = 0; i < stripe_len; i += sizeof(u64)) {
|
||||
u64 p_eb_data;
|
||||
u64 ebs_data;
|
||||
|
||||
p_eb_data = get_unaligned_64(p_eb->data + i);
|
||||
ebs_data = get_unaligned_64(ebs[j]->data + i);
|
||||
p_eb_data ^= ebs_data;
|
||||
put_unaligned_64(p_eb_data, p_eb->data + i);
|
||||
}
|
||||
}
|
||||
for (i = 0; i < multi->num_stripes; i++)
|
||||
pointers[i] = ebs[i]->data;
|
||||
ret = raid5_gen_result(multi->num_stripes, stripe_len,
|
||||
multi->num_stripes - 1, pointers);
|
||||
if (ret < 0)
|
||||
goto out_free_split;
|
||||
}
|
||||
|
||||
for (i = 0; i < multi->num_stripes; i++) {
|
||||
|
Loading…
Reference in New Issue
Block a user