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 | #define NDISKS 16 /* Including P and Q */ | 18 | #define NDISKS 16 /* Including P and Q */ |
| 19 | 19 | ||
| 20 | static struct rnd_state rng; | 20 | static struct rnd_state rng; |
| 21 | static void *dataptrs[NDISKS]; | ||
| 22 | static void *test_buffers[NDISKS]; | 21 | static void *test_buffers[NDISKS]; |
| 23 | static void *test_recov_buffers[RAID6_KUNIT_MAX_FAILURES]; | 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 | int i; | 35 | int i; |
| 37 | 36 | ||
| 38 | for (i = start; i <= stop; i++) { | 37 | for (i = start; i <= stop; i++) |
| 39 | prandom_bytes_state(&rng, test_buffers[i], PAGE_SIZE); | 38 | prandom_bytes_state(&rng, test_buffers[i], PAGE_SIZE); |
| 40 | dataptrs[i] = test_buffers[i]; | ||
| 41 | } | ||
| 42 | } | 39 | } |
| 43 | 40 | ||
| 44 | static char member_type(int d) | 41 | static char member_type(int d) |
| @@ -56,11 +53,13 @@ static char member_type(int d) · 11 unmodified lines | |||
| 56 | static void test_recover(struct kunit *test, int faila, int failb) | 53 | static void test_recover(struct kunit *test, int faila, int failb) |
| 57 | { | 54 | { |
| 58 | const struct test_args *ta = test->param_value; | 55 | const struct test_args *ta = test->param_value; |
| 56 | void *dataptrs[NDISKS]; | ||
| 59 | int i; | 57 | int i; |
| 60 | 58 | ||
| 61 | for (i = 0; i < RAID6_KUNIT_MAX_FAILURES; i++) | 59 | for (i = 0; i < RAID6_KUNIT_MAX_FAILURES; i++) |
| 62 | memset(test_recov_buffers[i], 0xf0, PAGE_SIZE); | 60 | memset(test_recov_buffers[i], 0xf0, PAGE_SIZE); |
| 63 | 61 | ||
| 62 | memcpy(dataptrs, test_buffers, sizeof(dataptrs)); | ||
| 64 | dataptrs[faila] = test_recov_buffers[0]; | 63 | dataptrs[faila] = test_recov_buffers[0]; |
| 65 | dataptrs[failb] = test_recov_buffers[1]; | 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 | * is equivalent to a RAID-5 failure (XOR, then recompute Q). | 69 | * is equivalent to a RAID-5 failure (XOR, then recompute Q). |
| 71 | */ | 70 | */ |
| 72 | if (faila != NDISKS - 2) | 71 | if (faila != NDISKS - 2) |
| 73 | goto skip; | 72 | return; |
| 74 | 73 | ||
| 75 | /* P+Q failure. Just rebuild the syndrome. */ | 74 | /* P+Q failure. Just rebuild the syndrome. */ |
| 76 | ta->gen->gen_syndrome(NDISKS, PAGE_SIZE, dataptrs); | 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 | "failb miscompared: %3d[%c] (faila=%3d[%c])\n", | 91 | "failb miscompared: %3d[%c] (faila=%3d[%c])\n", |
| 93 | failb, member_type(failb), | 92 | failb, member_type(failb), |
| 94 | faila, member_type(faila)); | 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 | static void raid6_test(struct kunit *test) | 96 | static void raid6_test(struct kunit *test) |
| @@ -108,7 +103,7 @@ static void raid6_test(struct kunit *test) · 6 unmodified lines | |||
| 108 | memset(test_buffers[NDISKS - 1], 0xee, PAGE_SIZE); | 103 | memset(test_buffers[NDISKS - 1], 0xee, PAGE_SIZE); |
| 109 | 104 | ||
| 110 | /* Generate assumed good syndrome */ | 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 | for (i = 0; i < NDISKS - 1; i++) | 108 | for (i = 0; i < NDISKS - 1; i++) |
| 114 | for (j = i + 1; j < NDISKS; j++) | 109 | for (j = i + 1; j < NDISKS; j++) |
| @@ -121,10 +116,10 @@ static void raid6_test(struct kunit *test) · 6 unmodified lines | |||
| 121 | for (p2 = p1; p2 < NDISKS - 2; p2++) { | 116 | for (p2 = p1; p2 < NDISKS - 2; p2++) { |
| 122 | /* Simulate rmw run */ | 117 | /* Simulate rmw run */ |
| 123 | ta->gen->xor_syndrome(NDISKS, p1, p2, PAGE_SIZE, | 118 | ta->gen->xor_syndrome(NDISKS, p1, p2, PAGE_SIZE, |
| 124 | (void **)&dataptrs); | 119 | test_buffers); |
| 125 | makedata(p1, p2); | 120 | makedata(p1, p2); |
| 126 | ta->gen->xor_syndrome(NDISKS, p1, p2, PAGE_SIZE, | 121 | ta->gen->xor_syndrome(NDISKS, p1, p2, PAGE_SIZE, |
| 127 | (void **)&dataptrs); | 122 | test_buffers); |
| 128 | 123 | ||
| 129 | for (i = 0; i < NDISKS - 1; i++) | 124 | for (i = 0; i < NDISKS - 1; i++) |
| 130 | for (j = i + 1; j < NDISKS; j++) | 125 | for (j = i + 1; j < NDISKS; j++) |