X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=engines%2Fposixaio.c;h=061812e67ebc787efcc7315ef066105ad0ee3ed0;hp=3ffdcb6bccc8d062b1be302b27c3cb004bd57d11;hb=e18941aab394d4a68df10379fec7184b52f95b3f;hpb=9d7dfdaef1ed5f6227fd31117d310ac15ae63152 diff --git a/engines/posixaio.c b/engines/posixaio.c index 3ffdcb6b..061812e6 100644 --- a/engines/posixaio.c +++ b/engines/posixaio.c @@ -56,7 +56,7 @@ static int fio_posixaio_cancel(struct thread_data fio_unused *td, struct fio_file *f = io_u->file; int r = aio_cancel(f->fd, &io_u->aiocb); - if (r == 1 || r == AIO_CANCELED) + if (r == AIO_ALLDONE || r == AIO_CANCELED) return 0; return 1; @@ -124,9 +124,6 @@ restart: io_u->resid = io_u->xfer_buflen - retval; } else io_u->error = err; - - if (r >= max) - break; } if (r >= min) @@ -155,7 +152,7 @@ static struct io_u *fio_posixaio_event(struct thread_data *td, int event) return pd->aio_events[event]; } -static int fio_posixaio_queue(struct thread_data fio_unused *td, +static int fio_posixaio_queue(struct thread_data *td, struct io_u *io_u) { struct posixaio_data *pd = td->io_ops->data; @@ -168,16 +165,20 @@ static int fio_posixaio_queue(struct thread_data fio_unused *td, ret = aio_read(aiocb); else if (io_u->ddir == DDIR_WRITE) ret = aio_write(aiocb); - else { + else if (io_u->ddir == DDIR_TRIM) { + if (pd->queued) + return FIO_Q_BUSY; + + do_io_u_trim(td, io_u); + return FIO_Q_COMPLETED; + } else { #ifdef FIO_HAVE_POSIXAIO_FSYNC ret = aio_fsync(O_SYNC, aiocb); #else if (pd->queued) 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; #endif } @@ -238,7 +239,7 @@ static struct ioengine_ops ioengine = { */ static int fio_posixaio_init(struct thread_data fio_unused *td) { - fprintf(stderr, "fio: posixaio not available\n"); + log_err("fio: posixaio not available\n"); return 1; }