In verify mode, we check a header sequence number and CRC. For a job with multiple writers, we may overwrite blocks and this can cause verification errors. The verification feature can be useful to prove that atomic writes won't cause fractured writes from multiple writers. However, atomic writes can't solve the problem of verification sequence number being incorrect for multiple fio writers. For verify mode and atomic writes, ignore sequnce number issues and tell the user about this. Signed-off-by: John Garry <john.g.garry@xxxxxxxxxx> --- init.c | 14 +++++++++++--- verify.c | 2 +- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/init.c b/init.c index 84798b3a..60f240f8 100644 --- a/init.c +++ b/init.c @@ -810,9 +810,17 @@ static int fixup_options(struct thread_data *td) strstr(o->filename_format, "$jobname") && strstr(o->filename_format, "$jobnum") && strstr(o->filename_format, "$filenum")))) { - log_info("fio: multiple writers may overwrite blocks " - "that belong to other jobs. This can cause " - "verification failures.\n"); + if (td->o.oatomic) { + log_info("fio: multiple writers may overwrite " + "blocks that belong to other jobs. Since in " + "atomic writes mode, this should mean no " + "verification failures, as errors in " + "sequence number will be ignored.\n"); + } else { + log_info("fio: multiple writers may overwrite " + "blocks that belong to other jobs. This can " + "cause verification failures.\n"); + } ret |= warnings_fatal; } diff --git a/verify.c b/verify.c index b2fede24..7ebfd3dd 100644 --- a/verify.c +++ b/verify.c @@ -854,7 +854,7 @@ static int verify_header(struct io_u *io_u, struct thread_data *td, if (td_write(td) && (td_min_bs(td) == td_max_bs(td)) && !td->o.time_based) if (!td->o.verify_only) - if (hdr->numberio != io_u->numberio) { + if (hdr->numberio != io_u->numberio && !td->o.oatomic) { log_err("verify: bad header numberio %"PRIu16 ", wanted %"PRIu16, hdr->numberio, io_u->numberio); -- 2.31.1