pattern, then the *<nr>* value specified will be **added** to the generated
offset for each I/O turning sequential I/O into sequential I/O with holes.
For instance, using ``rw=write:4k`` will skip 4k for every write. Also see
- the :option:`rw_sequencer` option.
+ the :option:`rw_sequencer` option. If this is used with :option:`verify`
+ then :option:`verify_header_seed` will be disabled, unless its explicitly
+ enabled.
.. option:: rw_sequencer=str
pattern, then the `<nr>' value specified will be added to the generated
offset for each I/O turning sequential I/O into sequential I/O with holes.
For instance, using `rw=write:4k' will skip 4k for every write. Also see
-the \fBrw_sequencer\fR option.
+the \fBrw_sequencer\fR option. If this is used with \fBverify\fR then
+\fBverify_header_seed\fR option will be disabled, unless its explicitly
+enabled.
.RE
.TP
.BI rw_sequencer \fR=\fPstr
(i) < (td)->o.nr_files && ((f) = (td)->files[i]) != NULL; \
(i)++)
+static inline bool fio_offset_overlap_risk(struct thread_data *td)
+{
+ if (td->o.ddir_seq_add || (td->o.ddir_seq_nr > 1))
+ return true;
+
+ return false;
+}
+
static inline bool fio_fill_issue_time(struct thread_data *td)
{
if (td->o.read_iolog_file ||
/*
* Disable rand_seed check when we have verify_backlog,
- * zone reset frequency for zonemode=zbd, or norandommap.
+ * zone reset frequency for zonemode=zbd, norandommap, or
+ * offset modifiers.
* Unless we were explicitly asked to enable it.
*/
if (!td_write(td) || (td->flags & TD_F_VER_BACKLOG) ||
- o->zrf.u.f || o->norandommap) {
+ o->zrf.u.f || o->norandommap ||
+ fio_offset_overlap_risk(td)) {
if (!fio_option_is_set(o, verify_header_seed))
o->verify_header_seed = 0;
}
}
/*
- * Only sort writes if we don't have a random map in which case we need
- * to check for duplicate blocks and drop the old one, which we rely on
- * the rb insert/lookup for handling.
+ * Sort writes if we don't have a random map in which case we need to
+ * check for duplicate blocks and drop the old one, which we rely on
+ * the rb insert/lookup for handling. Sort writes if we have offset
+ * modifier which can also create duplicate blocks.
*/
- if (file_randommap(td, ipo->file)) {
+ if (file_randommap(td, ipo->file) && !fio_offset_overlap_risk(td)) {
INIT_FLIST_HEAD(&ipo->list);
flist_add_tail(&ipo->list, &td->io_hist_list);
ipo->flags |= IP_F_ONLIST;