unsigned long long max_blocks;
unsigned long long max_size;
+ assert(ddir_rw(ddir));
+
/*
* Hmm, should we make sure that ->io_size <= ->real_file_size?
*/
static int get_next_seq_block(struct thread_data *td, struct fio_file *f,
enum fio_ddir ddir, unsigned long long *b)
{
+ assert(ddir_rw(ddir));
+
if (f->last_pos < f->real_file_size) {
*b = (f->last_pos - f->file_offset) / td->o.min_bs[ddir];
return 0;
struct fio_file *f = io_u->file;
int ret;
+ assert(ddir_rw(ddir));
+
if (rw_seq) {
if (td_random(td))
ret = get_next_rand_block(td, f, ddir, b);
enum fio_ddir ddir = io_u->ddir;
int rw_seq_hit = 0;
+ assert(ddir_rw(ddir));
+
if (td->o.ddir_seq_nr && !--td->ddir_seq_nr) {
rw_seq_hit = 1;
td->ddir_seq_nr = td->o.ddir_seq_nr;
unsigned int minbs, maxbs;
long r;
+ assert(ddir_rw(ddir));
+
minbs = td->o.min_bs[ddir];
maxbs = td->o.max_bs[ddir];
struct timeval t;
long usec;
+ assert(ddir_rw(ddir));
+
if (td->rate_pending_usleep[ddir] <= 0)
return ddir;
td_io_u_lock(td);
__io_u->flags |= IO_U_F_FREE;
- if ((__io_u->flags & IO_U_F_FLIGHT) && !ddir_sync(__io_u->ddir))
+ if ((__io_u->flags & IO_U_F_FLIGHT) && ddir_rw(__io_u->ddir))
td->io_issues[__io_u->ddir]--;
__io_u->flags &= ~IO_U_F_FLIGHT;
io_u->ddir = get_rw_ddir(td);
/*
- * fsync() or fdatasync(), we are done
+ * fsync() or fdatasync() or trim etc, we are done
*/
- if (ddir_sync(io_u->ddir))
+ if (!ddir_rw(io_u->ddir))
goto out;
/*
f = io_u->file;
assert(fio_file_open(f));
- if (!ddir_sync(io_u->ddir)) {
+ if (ddir_rw(io_u->ddir)) {
if (!io_u->buflen && !(td->io_ops->flags & FIO_NOIO)) {
dprint(FD_IO, "get_io_u: zero buflen on %p\n", io_u);
goto err_put;
td->last_was_sync = 0;
td->last_ddir = io_u->ddir;
- if (!io_u->error) {
+ if (!io_u->error && ddir_rw(io_u->ddir)) {
unsigned int bytes = io_u->buflen - io_u->resid;
const enum fio_ddir idx = io_u->ddir;
const enum fio_ddir odx = io_u->ddir ^ 1;
if (ret && !icd->error)
icd->error = ret;
}
- } else {
+ } else if (io_u->error) {
icd->error = io_u->error;
io_u_log_error(td, io_u);
}