}
}
}
+
+ /*
+ * Fill the pattern all the way to the end. This greatly reduces
+ * the number of memcpy's we have to do when verifying the IO.
+ */
+ while (i > 1 && i * 2 <= MAX_PATTERN_SIZE) {
+ memcpy(&td->o.verify_pattern[i], &td->o.verify_pattern[0], i);
+ i *= 2;
+ }
+ if (i == 1) {
+ /*
+ * The code in verify_io_u_pattern assumes a single byte pattern
+ * fills the whole verify pattern buffer.
+ */
+ memset(td->o.verify_pattern, td->o.verify_pattern[0],
+ MAX_PATTERN_SIZE);
+ }
+
td->o.verify_pattern_bytes = i;
+
/*
* VERIFY_META could already be set
*/
if (td->o.verify == VERIFY_NONE)
td->o.verify = VERIFY_PATTERN;
+
return 0;
}
.name = "zonesize",
.type = FIO_OPT_STR_VAL,
.off1 = td_var_offset(zone_size),
+ .help = "Amount of data to read per zone",
+ .def = "0",
+ },
+ {
+ .name = "zonerange",
+ .type = FIO_OPT_STR_VAL,
+ .off1 = td_var_offset(zone_range),
.help = "Give size of an IO zone",
.def = "0",
},
.off1 = td_var_offset(gid),
.help = "Run job with this group ID",
},
+ {
+ .name = "flow_id",
+ .type = FIO_OPT_INT,
+ .off1 = td_var_offset(flow_id),
+ .help = "The flow index ID to use",
+ .def = "0",
+ },
+ {
+ .name = "flow",
+ .type = FIO_OPT_INT,
+ .off1 = td_var_offset(flow),
+ .help = "Weight for flow control of this job",
+ .parent = "flow_id",
+ .def = "0",
+ },
+ {
+ .name = "flow_watermark",
+ .type = FIO_OPT_INT,
+ .off1 = td_var_offset(flow_watermark),
+ .help = "High watermark for flow control. This option"
+ " should be set to the same value for all threads"
+ " with non-zero flow.",
+ .parent = "flow_id",
+ .def = "1024",
+ },
+ {
+ .name = "flow_sleep",
+ .type = FIO_OPT_INT,
+ .off1 = td_var_offset(flow_sleep),
+ .help = "How many microseconds to sleep after being held"
+ " back by the flow control mechanism",
+ .parent = "flow_id",
+ .def = "0",
+ },
{
.name = NULL,
},