#include "smalloc.h"
#include "filehash.h"
-static char fio_version_string[] = "fio 1.23";
+static char fio_version_string[] = "fio 1.24";
#define FIO_RANDSEED (0xb1899bedUL)
return 0;
}
+static int fixed_block_size(struct thread_options *o)
+{
+ return o->min_bs[DDIR_READ] == o->max_bs[DDIR_READ] &&
+ o->min_bs[DDIR_WRITE] == o->max_bs[DDIR_WRITE] &&
+ o->min_bs[DDIR_READ] == o->min_bs[DDIR_WRITE];
+}
+
/*
* Lazy way of fixing up options that depend on each other. We could also
* define option callback handlers, but this is easier.
o->rw_min_bs = min(o->min_bs[DDIR_READ], o->min_bs[DDIR_WRITE]);
+ /*
+ * For random IO, allow blockalign offset other than min_bs.
+ */
+ if (!o->ba[DDIR_READ] || !td_random(td))
+ o->ba[DDIR_READ] = o->min_bs[DDIR_READ];
+ if (!o->ba[DDIR_WRITE] || !td_random(td))
+ o->ba[DDIR_WRITE] = o->min_bs[DDIR_WRITE];
+
+ if ((o->ba[DDIR_READ] != o->min_bs[DDIR_READ] ||
+ o->ba[DDIR_WRITE] != o->min_bs[DDIR_WRITE]) &&
+ !td->o.norandommap) {
+ log_err("fio: Any use of blockalign= turns off randommap\n");
+ td->o.norandommap = 1;
+ }
+
if (!o->file_size_high)
o->file_size_high = o->file_size_low;
- if (o->norandommap && o->verify != VERIFY_NONE) {
- log_err("fio: norandommap given, verify disabled\n");
+ if (o->norandommap && o->verify != VERIFY_NONE
+ && !fixed_block_size(o)) {
+ log_err("fio: norandommap given for variable block sizes, "
+ "verify disabled\n");
o->verify = VERIFY_NONE;
}
if (o->bs_unaligned && (o->odirect || td->io_ops->flags & FIO_RAWIO))
if (file_alloced) {
td_new->o.filename = NULL;
td_new->files_index = 0;
+ td_new->files_size = 0;
td_new->files = NULL;
}
if (!strncmp(name, "global", 6))
return 0;
- return strncmp(job_section, name, strlen(job_section));
+ return strcmp(job_section, name);
}
static int is_empty_or_comment(char *line)