struct fio_file *f = io_u->file;
aiocb->aio_fildes = f->fd;
- aiocb->aio_buf = io_u->buf;
- aiocb->aio_nbytes = io_u->buflen;
+ aiocb->aio_buf = io_u->xfer_buf;
+ aiocb->aio_nbytes = io_u->xfer_buflen;
aiocb->aio_offset = io_u->offset;
io_u->seen = 0;
default:
io_u->error = err;
case ECANCELED:
+ io_u->resid = io_u->xfer_buflen;
case 0:
pd->aio_events[r++] = io_u;
io_u->seen = 1;
else
ret = aio_fsync(O_SYNC, aiocb);
- if (ret)
+ if (ret) {
io_u->error = errno;
-
- return io_u->error;
+ td_verror(td, io_u->error, "xfer");
+ return FIO_Q_COMPLETED;
+ }
+
+ return FIO_Q_QUEUED;
}
static void fio_posixaio_cleanup(struct thread_data *td)
.getevents = fio_posixaio_getevents,
.event = fio_posixaio_event,
.cleanup = fio_posixaio_cleanup,
+ .open_file = generic_open_file,
+ .close_file = generic_close_file,
};
#else /* FIO_HAVE_POSIXAIO */