summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMark Johnston <[email protected]>2021-08-23 14:10:17 -0400
committerGitHub <[email protected]>2021-08-23 11:10:17 -0700
commit3ee9a997a34dea4f9b509ac3e45085929b068008 (patch)
treed6d1c13105f1d161e1d2362051415b1c29e3ff0b
parent8ae86e2edc736483c1530fd689525aa2460eaec8 (diff)
Initialize parity blocks before RAID-Z reconstruction benchmarking
benchmark_raidz() allocates a row to benchmark parity calculation and reconstruction. In the latter case, the parity blocks are left uninitialized, leading to reports from KMSAN. Initialize parity blocks to 0xAA as we do for the data earlier in the function. This does not affect the selected RAID-Z implementation on any of several systems tested. Reviewed-by: Brian Behlendorf <[email protected]> Signed-off-by: Mark Johnston <[email protected]> Closes #12473
-rw-r--r--module/zfs/vdev_raidz_math.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/module/zfs/vdev_raidz_math.c b/module/zfs/vdev_raidz_math.c
index 138b7dac5..03df2df5a 100644
--- a/module/zfs/vdev_raidz_math.c
+++ b/module/zfs/vdev_raidz_math.c
@@ -465,6 +465,7 @@ benchmark_raidz(void)
raidz_supp_impl_cnt = c; /* number of supported impl */
#if defined(_KERNEL)
+ abd_t *pabd;
zio_t *bench_zio = NULL;
raidz_map_t *bench_rm = NULL;
uint64_t bench_parity;
@@ -492,6 +493,12 @@ benchmark_raidz(void)
bench_rm = vdev_raidz_map_alloc(bench_zio, SPA_MINBLOCKSHIFT,
BENCH_COLS, PARITY_PQR);
+ /* Ensure that fake parity blocks are initialized */
+ for (c = 0; c < bench_rm->rm_row[0]->rr_firstdatacol; c++) {
+ pabd = bench_rm->rm_row[0]->rr_col[c].rc_abd;
+ memset(abd_to_buf(pabd), 0xAA, abd_get_size(pabd));
+ }
+
for (int fn = 0; fn < RAIDZ_REC_NUM; fn++)
benchmark_raidz_impl(bench_rm, fn, benchmark_rec_impl);