restripe: fix data block order in raid6_2_data_recov
... rather than relying on the caller getting them in the correct order. This is better engineering and fixes a bug, but because the failed_slotX numbers are used later with assumption that they weren't swapped Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
parent
50786d4731
commit
eae01ef02f
|
@ -271,11 +271,6 @@ int manual_repair(int chunk_size, int syndrome_disks,
|
|||
failed_data, (uint8_t**)blocks, 1);
|
||||
} else {
|
||||
printf("Repairing D and D\n");
|
||||
if (failed_slot1 > failed_slot2) {
|
||||
int t = failed_slot1;
|
||||
failed_slot1 = failed_slot2;
|
||||
failed_slot2 = t;
|
||||
}
|
||||
raid6_2data_recov(syndrome_disks+2, chunk_size,
|
||||
failed_slot1, failed_slot2,
|
||||
(uint8_t**)blocks, 1);
|
||||
|
|
11
restripe.c
11
restripe.c
|
@ -354,6 +354,12 @@ void raid6_2data_recov(int disks, size_t bytes, int faila, int failb,
|
|||
const uint8_t *pbmul; /* P multiplier table for B data */
|
||||
const uint8_t *qmul; /* Q multiplier table (for both) */
|
||||
|
||||
if (faila > failb) {
|
||||
int t = faila;
|
||||
faila = failb;
|
||||
failb = t;
|
||||
}
|
||||
|
||||
if (neg_offset) {
|
||||
p = ptrs[-1];
|
||||
q = ptrs[-2];
|
||||
|
@ -651,11 +657,6 @@ int save_stripes(int *source, unsigned long long *offsets,
|
|||
raid6_datap_recov(syndrome_disks+2, chunk_size,
|
||||
fdisk[0], bufs, 0);
|
||||
else {
|
||||
if (fdisk[0] > fdisk[1]) {
|
||||
int t = fdisk[0];
|
||||
fdisk[0] = fdisk[1];
|
||||
fdisk[1] = t;
|
||||
}
|
||||
/* Two data blocks failed, P,Q OK */
|
||||
raid6_2data_recov(syndrome_disks+2, chunk_size,
|
||||
fdisk[0], fdisk[1], bufs, 0);
|
||||
|
|
Loading…
Reference in New Issue