X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=engines%2Flibaio.c;h=bc9c42877fdaaadf98d1c5ab51520c4e85d3903b;hp=bd702e30f132ab082a69add4b729ca9e6dd6d9b5;hb=b2560f3ca4677e2908fc4111f4d04fae5df3b229;hpb=e1161c325f7866bae879e686d1c673ca32ab09ae diff --git a/engines/libaio.c b/engines/libaio.c index bd702e30..bc9c4287 100644 --- a/engines/libaio.c +++ b/engines/libaio.c @@ -42,8 +42,21 @@ static int fio_libaio_prep(struct thread_data fio_unused *td, struct io_u *io_u) static struct io_u *fio_libaio_event(struct thread_data *td, int event) { struct libaio_data *ld = td->io_ops->data; + struct io_event *ev; + struct io_u *io_u; - return ev_to_iou(ld->aio_events + event); + ev = ld->aio_events + event; + io_u = ev_to_iou(ev); + + if (ev->res != io_u->xfer_buflen) { + if (ev->res > io_u->xfer_buflen) + io_u->error = -ev->res; + else + io_u->resid = io_u->xfer_buflen - ev->res; + } else + io_u->error = 0; + + return io_u; } static int fio_libaio_getevents(struct thread_data *td, int min, int max,