o->size = -1ULL;
if (o->verify != VERIFY_NONE) {
- if (td_write(td) && o->do_verify && o->numjobs > 1) {
- log_info("Multiple writers may overwrite blocks that "
- "belong to other jobs. This can cause "
+ if (td_write(td) && o->do_verify && o->numjobs > 1 &&
+ (o->filename ||
+ !(o->unique_filename &&
+ 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");
ret = warnings_fatal;
}
+ /*
+ * Warn if verification is requested but no verification of any
+ * kind can be started due to time constraints
+ */
+ if (td_write(td) && o->do_verify && o->timeout &&
+ o->time_based && !td_read(td) && !o->verify_backlog) {
+ log_info("fio: verification read phase will never "
+ "start because write phase uses all of "
+ "runtime\n");
+ ret = warnings_fatal;
+ }
+
if (!fio_option_is_set(o, refill_buffers))
o->refill_buffers = 1;
return ret;
}
-/* External engines are specified by "external:name.o") */
-static const char *get_engine_name(const char *str)
-{
- char *p = strstr(str, ":");
-
- if (!p)
- return str;
-
- p++;
- strip_blank_front(&p);
- strip_blank_end(p);
- return p;
-}
-
static void init_rand_file_service(struct thread_data *td)
{
unsigned long nranges = td->o.nr_files << FIO_FSERVICE_SHIFT;
free_ioengine(td);
}
- engine = get_engine_name(td->o.ioengine);
+ /*
+ * Use ->ioengine_so_path if an external ioengine is specified.
+ */
+ engine = td->o.ioengine_so_path ?: td->o.ioengine;
td->io_ops = load_ioengine(td, engine);
if (!td->io_ops) {
log_err("fio: failed to load engine %s\n", engine);