The following changes since commit 7a3a166c6c43e45de1c8085254fbdd011c572f05: configure: restore dev-dax and libpmem (2023-02-20 08:53:23 -0500) are available in the Git repository at: git://git.kernel.dk/fio.git master for you to fetch changes up to 6946ad5940565d573d85e210b8ea4da5884f0323: Merge branch 'Verify_Bad_Hdr_Rand_Seed_Mult_Workload_Iterations_Non_Repeating_Seed' of https://github.com/horshack-dpreview/fio (2023-02-21 09:37:09 -0700) ---------------------------------------------------------------- Horshack (1): Bad header rand_seed with time_based or loops with randrepeat=0 verify Jens Axboe (1): Merge branch 'Verify_Bad_Hdr_Rand_Seed_Mult_Workload_Iterations_Non_Repeating_Seed' of https://github.com/horshack-dpreview/fio backend.c | 15 +++++---------- fio.h | 1 + 2 files changed, 6 insertions(+), 10 deletions(-) --- Diff of recent changes: diff --git a/backend.c b/backend.c index cb1fbf42..f494c831 100644 --- a/backend.c +++ b/backend.c @@ -637,15 +637,6 @@ static void do_verify(struct thread_data *td, uint64_t verify_bytes) if (td->error) return; - /* - * verify_state needs to be reset before verification - * proceeds so that expected random seeds match actual - * random seeds in headers. The main loop will reset - * all random number generators if randrepeat is set. - */ - if (!td->o.rand_repeatable) - td_fill_verify_state_seed(td); - td_set_runstate(td, TD_VERIFYING); io_u = NULL; @@ -1894,8 +1885,12 @@ static void *thread_main(void *data) if (td->o.verify_only && td_write(td)) verify_bytes = do_dry_run(td); else { + if (!td->o.rand_repeatable) + /* save verify rand state to replay hdr seeds later at verify */ + frand_copy(&td->verify_state_last_do_io, &td->verify_state); do_io(td, bytes_done); - + if (!td->o.rand_repeatable) + frand_copy(&td->verify_state, &td->verify_state_last_do_io); if (!ddir_rw_sum(bytes_done)) { fio_mark_td_terminate(td); verify_bytes = 0; diff --git a/fio.h b/fio.h index 8da77640..09c44149 100644 --- a/fio.h +++ b/fio.h @@ -258,6 +258,7 @@ struct thread_data { struct frand_state bsrange_state[DDIR_RWDIR_CNT]; struct frand_state verify_state; + struct frand_state verify_state_last_do_io; struct frand_state trim_state; struct frand_state delay_state;