Change IO engine queuing
[fio.git] / engines / libaio.c
index c95600548c645449a07946b7cabb8c7b6de5162b..ba8c49df6583ddf7051e215f9da46c968d3b34aa 100644 (file)
@@ -77,7 +77,7 @@ static int fio_libaio_queue(struct thread_data *td, struct io_u *io_u)
        do {
                ret = io_submit(ld->aio_ctx, 1, &iocb);
                if (ret == 1)
-                       return 0;
+                       return FIO_Q_QUEUED;
                else if (ret == -EAGAIN || !ret)
                        usleep(100);
                else if (ret == -EINTR)
@@ -90,7 +90,10 @@ static int fio_libaio_queue(struct thread_data *td, struct io_u *io_u)
                         * with libaio (still), we don't have pending
                         * requests to flush first.
                         */
-                       ret = fsync(io_u->file->fd);
+                       if (fsync(io_u->file->fd) < 0)
+                               ret = errno;
+                       else
+                               ret = FIO_Q_COMPLETED;
                        break;
                } else
                        break;
@@ -99,10 +102,11 @@ static int fio_libaio_queue(struct thread_data *td, struct io_u *io_u)
        if (ret <= 0) {
                io_u->resid = io_u->xfer_buflen;
                io_u->error = -ret;
-               return 1;
+               td_verror(td, io_u->error);
+               return FIO_Q_COMPLETED;
        }
 
-       return 0;
+       return ret;
 }
 
 static int fio_libaio_cancel(struct thread_data *td, struct io_u *io_u)