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 <behlendorf1@llnl.gov>
Signed-off-by: Mark Johnston <markj@FreeBSD.org>
Closes #12473
This commit is contained in:
Mark Johnston 2021-08-23 14:10:17 -04:00 committed by Tony Hutter
parent 584b7a214e
commit 2016d7fb9c
1 changed files with 7 additions and 0 deletions

View File

@ -465,6 +465,7 @@ benchmark_raidz(void)
raidz_supp_impl_cnt = c; /* number of supported impl */ raidz_supp_impl_cnt = c; /* number of supported impl */
#if defined(_KERNEL) #if defined(_KERNEL)
abd_t *pabd;
zio_t *bench_zio = NULL; zio_t *bench_zio = NULL;
raidz_map_t *bench_rm = NULL; raidz_map_t *bench_rm = NULL;
uint64_t bench_parity; uint64_t bench_parity;
@ -492,6 +493,12 @@ benchmark_raidz(void)
bench_rm = vdev_raidz_map_alloc(bench_zio, SPA_MINBLOCKSHIFT, bench_rm = vdev_raidz_map_alloc(bench_zio, SPA_MINBLOCKSHIFT,
BENCH_COLS, PARITY_PQR); 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++) for (int fn = 0; fn < RAIDZ_REC_NUM; fn++)
benchmark_raidz_impl(bench_rm, fn, benchmark_rec_impl); benchmark_raidz_impl(bench_rm, fn, benchmark_rec_impl);