of the job. Each verification method also implies verification of special
header, which is written to the beginning of each block. This header also
includes meta information, like offset of the block, block number, timestamp
- when block was written, etc. :option:`verify` can be combined with
- :option:`verify_pattern` option. The allowed values are:
+ when block was written, initial seed value used to generate the buffer
+ contents etc. :option:`verify` can be combined with :option:`verify_pattern`
+ option. The allowed values are:
**md5**
Use an md5 sum of the data area and store it in the header of
fail).
Defaults to true.
+.. option:: verify_header_seed=bool
+
+ Verify the header seed value which was used to generate the buffer contents.
+ In certain scenarios with read / verify only workloads, when
+ :option:`norandommap` is enabled, with offset modifiers
+ (refer :option:`readwrite` and :option:`rw_sequencer`) etc verification of
+ header seed may fail. Disabling this option will mean that header seed
+ checking is skipped. Defaults to true.
+
.. option:: trim_percentage=int
Number of verify blocks to discard/trim.
o->verify_interval = le32_to_cpu(top->verify_interval);
o->verify_offset = le32_to_cpu(top->verify_offset);
o->verify_write_sequence = le32_to_cpu(top->verify_write_sequence);
+ o->verify_header_seed = le32_to_cpu(top->verify_header_seed);
o->verify_pattern_bytes = le32_to_cpu(top->verify_pattern_bytes);
o->buffer_pattern_bytes = le32_to_cpu(top->buffer_pattern_bytes);
top->verify_interval = cpu_to_le32(o->verify_interval);
top->verify_offset = cpu_to_le32(o->verify_offset);
top->verify_write_sequence = cpu_to_le32(o->verify_write_sequence);
+ top->verify_header_seed = cpu_to_le32(o->verify_header_seed);
top->verify_pattern_bytes = cpu_to_le32(o->verify_pattern_bytes);
top->verify_fatal = cpu_to_le32(o->verify_fatal);
top->verify_dump = cpu_to_le32(o->verify_dump);
of the job. Each verification method also implies verification of special
header, which is written to the beginning of each block. This header also
includes meta information, like offset of the block, block number, timestamp
-when block was written, etc. \fBverify\fR can be combined with
-\fBverify_pattern\fR option. The allowed values are:
+when block was written, initial seed value used to generate the buffer
+contents, etc. \fBverify\fR can be combined with \fBverify_pattern\fR option.
+The allowed values are:
.RS
.RS
.TP
still be attempted. For when \fBatomic\fR is enabled, checksum verification
is expected to succeed (while write sequence checking can still fail).
.TP
+.BI verify_header_seed \fR=\fPbool
+Verify the header seed value which was used to generate the buffer contents.
+In certain scenarios with read / verify only workloads, when \fBnorandommap\fR
+is enabled, with offset modifiers (refer options \fBreadwrite\fR and
+\fBrw_sequencer\fR), etc verification of header seed may fail. Disabling this
+option will mean that header seed checking is skipped. Defaults to true.
+.TP
.BI trim_percentage \fR=\fPint
Number of verify blocks to discard/trim.
.TP
.category = FIO_OPT_C_IO,
.group = FIO_OPT_G_VERIFY,
},
+ {
+ .name = "verify_header_seed",
+ .lname = "Verify header seed",
+ .off1 = offsetof(struct thread_options, verify_header_seed),
+ .type = FIO_OPT_BOOL,
+ .def = "1",
+ .help = "Verify the header seed used to generate the buffer contents",
+ .parent = "verify",
+ .category = FIO_OPT_C_IO,
+ .group = FIO_OPT_G_VERIFY,
+ },
#ifdef FIO_HAVE_TRIM
{
.name = "trim_percentage",
};
enum {
- FIO_SERVER_VER = 108,
+ FIO_SERVER_VER = 109,
FIO_SERVER_MAX_FRAGMENT_PDU = 1024,
FIO_SERVER_MAX_CMD_MB = 2048,
unsigned int verify_state;
unsigned int verify_state_save;
unsigned int verify_write_sequence;
+ unsigned int verify_header_seed;
unsigned int use_thread;
unsigned int unlink;
unsigned int unlink_each_loop;
uint32_t verify_state;
uint32_t verify_state_save;
uint32_t verify_write_sequence;
- uint32_t pad2;
+ uint32_t verify_header_seed;
uint32_t use_thread;
uint32_t unlink;
uint32_t unlink_each_loop;
hdr->len, hdr_len);
goto err;
}
- if (hdr->rand_seed != io_u->rand_seed) {
+ if (td->o.verify_header_seed && (hdr->rand_seed != io_u->rand_seed)) {
log_err("verify: bad header rand_seed %"PRIu64
", wanted %"PRIu64,
hdr->rand_seed, io_u->rand_seed);