Fio 1.39-rc1
[fio.git] / engines / libaio.c
index 4f1e0ed4b739a3a62cad6322342bf285f75d2190..ff5709b4e9e35c593ed6b219b73ded16c13ef3ea 100644 (file)
@@ -32,7 +32,7 @@ static int fio_libaio_prep(struct thread_data fio_unused *td, struct io_u *io_u)
                io_prep_pread(&io_u->iocb, f->fd, io_u->xfer_buf, io_u->xfer_buflen, io_u->offset);
        else if (io_u->ddir == DDIR_WRITE)
                io_prep_pwrite(&io_u->iocb, f->fd, io_u->xfer_buf, io_u->xfer_buflen, io_u->offset);
-       else if (io_u->ddir == DDIR_SYNC)
+       else if (ddir_sync(io_u->ddir))
                io_prep_fsync(&io_u->iocb, f->fd);
        else
                return 1;
@@ -64,11 +64,11 @@ static int fio_libaio_getevents(struct thread_data *td, unsigned int min,
                                unsigned int max, struct timespec *t)
 {
        struct libaio_data *ld = td->io_ops->data;
-       long r;
+       int r;
 
        do {
                r = io_getevents(ld->aio_ctx, min, max, ld->aio_events, t);
-               if (r >= min)
+               if (r >= (int) min)
                        break;
                else if (r == -EAGAIN) {
                        usleep(100);
@@ -97,12 +97,11 @@ static int fio_libaio_queue(struct thread_data *td, struct io_u *io_u)
         * support aio fsync yet. So return busy for the case where we
         * have pending io, to let fio complete those first.
         */
-       if (io_u->ddir == DDIR_SYNC) {
+       if (ddir_sync(io_u->ddir)) {
                if (ld->iocbs_nr)
                        return FIO_Q_BUSY;
-               if (fsync(io_u->file->fd) < 0)
-                       io_u->error = errno;
 
+               do_io_u_sync(td, io_u);
                return FIO_Q_COMPLETED;
        }