dprint(FD_VERIFY, "exiting loop\n");
}
+static unsigned int exceeds_number_ios(struct thread_data *td)
+{
+ unsigned long long number_ios;
+
+ if (!td->o.number_ios)
+ return 0;
+
+ number_ios = ddir_rw_sum(td->this_io_blocks);
+ number_ios += td->io_u_queued + td->io_u_in_flight;
+
+ return number_ios >= td->o.number_ios;
+}
+
static int io_bytes_exceeded(struct thread_data *td)
{
unsigned long long bytes;
else
bytes = td->this_io_bytes[DDIR_TRIM];
- return bytes >= td->o.size;
+ return bytes >= td->o.size || exceeds_number_ios(td);
}
/*
td->o.loops--;
return 1;
}
+ if (exceeds_number_ios(td))
+ return 0;
if (td->o.size != -1ULL && ddir_rw_sum(td->io_bytes) < td->o.size) {
uint64_t diff;
td->ts.total_io_u[io_u->ddir]++;
}
+ if (td_write(td) && io_u->ddir == DDIR_WRITE &&
+ td->o.do_verify &&
+ td->o.verify != VERIFY_NONE &&
+ !td->o.experimental_verify)
+ log_io_piece(td, io_u);
+
ret = io_u_sync_complete(td, io_u, bytes_done);
(void) ret;
}
*/
if (o->cpumask_set) {
if (o->cpus_allowed_policy == FIO_CPUS_SPLIT) {
- ret = fio_cpus_split(&o->cpumask, td->thread_number);
+ ret = fio_cpus_split(&o->cpumask, td->thread_number - 1);
if (!ret) {
log_err("fio: no CPUs set\n");
log_err("fio: Try increasing number of available CPUs\n");