Skip to content

Commit 5f4183e

Browse files
committed
raidz_test: Fix ZIO ABDs initialization
- When filling ABDs of several segments, consider offset. - "Corrupt" ABDs with actually different data to fail something. Signed-off-by: Alexander Motin <[email protected]>
1 parent 08a2038 commit 5f4183e

File tree

1 file changed

+16
-3
lines changed

1 file changed

+16
-3
lines changed

cmd/raidz_test/raidz_test.c

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -265,9 +265,21 @@ cmp_data(raidz_test_opts_t *opts, raidz_map_t *rm)
265265

266266
static int
267267
init_rand(void *data, size_t size, void *private)
268+
{
269+
size_t *offsetp = (size_t *)private;
270+
size_t offset = *offsetp;
271+
272+
VERIFY3U(offset + size, <=, SPA_MAXBLOCKSIZE);
273+
memcpy(data, (char *)rand_data + offset, size);
274+
*offsetp = offset + size;
275+
return (0);
276+
}
277+
278+
static int
279+
corrupt_rand_fill(void *data, size_t size, void *private)
268280
{
269281
(void) private;
270-
memcpy(data, rand_data, size);
282+
memset(data, 0xAA, size);
271283
return (0);
272284
}
273285

@@ -279,15 +291,16 @@ corrupt_colums(raidz_map_t *rm, const int *tgts, const int cnt)
279291
for (int i = 0; i < cnt; i++) {
280292
raidz_col_t *col = &rr->rr_col[tgts[i]];
281293
abd_iterate_func(col->rc_abd, 0, col->rc_size,
282-
init_rand, NULL);
294+
corrupt_rand_fill, NULL);
283295
}
284296
}
285297
}
286298

287299
void
288300
init_zio_abd(zio_t *zio)
289301
{
290-
abd_iterate_func(zio->io_abd, 0, zio->io_size, init_rand, NULL);
302+
size_t offset = 0;
303+
abd_iterate_func(zio->io_abd, 0, zio->io_size, init_rand, &offset);
291304
}
292305

293306
static void

0 commit comments

Comments
 (0)