aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMark Johnston <[email protected]>2021-08-23 14:10:17 -0400
committerTony Hutter <[email protected]>2021-09-14 14:32:16 -0700
commit2016d7fb9c87a4c628c388bf0d1bf1848abbae67 (patch)
tree880bb6c78c16c60d78659e72abcbaf20694aef78
parent584b7a214e3732618d37eef8c6343d1425c1999d (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 25d76970e..2ce0dc5cc 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);