Move the global dataptr array into test_recover() as all sites that fill data or parity can use test_buffers directly, and this localized the override for the failed slots to the recovery testing routine.
Unified · Split
| @@ -18,7 +18,6 @@ MODULE_IMPORT_NS("EXPORTED_FOR_KUNIT_TESTING"); · 17 unmodified lines | ||
| 18 | 18 | #define NDISKS 16 /* Including P and Q */ |
| 19 | 19 | |
| 20 | 20 | static struct rnd_state rng; |
| 21 | −static void *dataptrs[NDISKS]; | |
| 22 | 21 | static void *test_buffers[NDISKS]; |
| 23 | 22 | static void *test_recov_buffers[RAID6_KUNIT_MAX_FAILURES]; |
| 24 | 23 | |
| @@ -35,10 +34,8 @@ static void makedata(int start, int stop) · 10 unmodified lines | ||
| 35 | 34 | { |
| 36 | 35 | int i; |
| 37 | 36 | |
| 38 | − for (i = start; i <= stop; i++) { | |
| 37 | + for (i = start; i <= stop; i++) | |
| 39 | 38 | prandom_bytes_state(&rng, test_buffers[i], PAGE_SIZE); |
| 40 | − dataptrs[i] = test_buffers[i]; | |
| 41 | − } | |
| 42 | 39 | } |
| 43 | 40 | |
| 44 | 41 | static char member_type(int d) |
| @@ -56,11 +53,13 @@ static char member_type(int d) · 11 unmodified lines | ||
| 56 | 53 | static void test_recover(struct kunit *test, int faila, int failb) |
| 57 | 54 | { |
| 58 | 55 | const struct test_args *ta = test->param_value; |
| 56 | + void *dataptrs[NDISKS]; | |
| 59 | 57 | int i; |
| 60 | 58 | |
| 61 | 59 | for (i = 0; i < RAID6_KUNIT_MAX_FAILURES; i++) |
| 62 | 60 | memset(test_recov_buffers[i], 0xf0, PAGE_SIZE); |
| 63 | 61 | |
| 62 | + memcpy(dataptrs, test_buffers, sizeof(dataptrs)); | |
| 64 | 63 | dataptrs[faila] = test_recov_buffers[0]; |
| 65 | 64 | dataptrs[failb] = test_recov_buffers[1]; |
| 66 | 65 | |
| @@ -70,7 +69,7 @@ static void test_recover(struct kunit *test, int faila, int failb) · 3 unmodified lines | ||
| 70 | 69 | * is equivalent to a RAID-5 failure (XOR, then recompute Q). |
| 71 | 70 | */ |
| 72 | 71 | if (faila != NDISKS - 2) |
| 73 | − goto skip; | |
| 72 | + return; | |
| 74 | 73 | |
| 75 | 74 | /* P+Q failure. Just rebuild the syndrome. */ |
| 76 | 75 | ta->gen->gen_syndrome(NDISKS, PAGE_SIZE, dataptrs); |
| @@ -92,10 +91,6 @@ static void test_recover(struct kunit *test, int faila, int failb) · 15 unmodified lines | ||
| 92 | 91 | "failb miscompared: %3d[%c] (faila=%3d[%c])\n", |
| 93 | 92 | failb, member_type(failb), |
| 94 | 93 | faila, member_type(faila)); |
| 95 | − | |
| 96 | −skip: | |
| 97 | − dataptrs[faila] = test_buffers[faila]; | |
| 98 | − dataptrs[failb] = test_buffers[failb]; | |
| 99 | 94 | } |
| 100 | 95 | |
| 101 | 96 | static void raid6_test(struct kunit *test) |
| @@ -108,7 +103,7 @@ static void raid6_test(struct kunit *test) · 6 unmodified lines | ||
| 108 | 103 | memset(test_buffers[NDISKS - 1], 0xee, PAGE_SIZE); |
| 109 | 104 | |
| 110 | 105 | /* Generate assumed good syndrome */ |
| 111 | − ta->gen->gen_syndrome(NDISKS, PAGE_SIZE, (void **)&dataptrs); | |
| 106 | + ta->gen->gen_syndrome(NDISKS, PAGE_SIZE, test_buffers); | |
| 112 | 107 | |
| 113 | 108 | for (i = 0; i < NDISKS - 1; i++) |
| 114 | 109 | for (j = i + 1; j < NDISKS; j++) |
| @@ -121,10 +116,10 @@ static void raid6_test(struct kunit *test) · 6 unmodified lines | ||
| 121 | 116 | for (p2 = p1; p2 < NDISKS - 2; p2++) { |
| 122 | 117 | /* Simulate rmw run */ |
| 123 | 118 | ta->gen->xor_syndrome(NDISKS, p1, p2, PAGE_SIZE, |
| 124 | − (void **)&dataptrs); | |
| 119 | + test_buffers); | |
| 125 | 120 | makedata(p1, p2); |
| 126 | 121 | ta->gen->xor_syndrome(NDISKS, p1, p2, PAGE_SIZE, |
| 127 | − (void **)&dataptrs); | |
| 122 | + test_buffers); | |
| 128 | 123 | |
| 129 | 124 | for (i = 0; i < NDISKS - 1; i++) |
| 130 | 125 | for (j = i + 1; j < NDISKS; j++) |