X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=engines%2Flibaio.c;h=d4f48303becb8af99a63bcc0e1667a030bdd0a66;hb=2f2e6c23e26888acb7ad2f2a2e4bd8fa5b250c0f;hp=6c5d73ed27dd1751ac98c1177fcdbf2bdf2fe487;hpb=b220c6d6f37fc55760d66728f6f9f521ea2f9b46;p=fio.git diff --git a/engines/libaio.c b/engines/libaio.c index 6c5d73ed..d4f48303 100644 --- a/engines/libaio.c +++ b/engines/libaio.c @@ -13,6 +13,8 @@ #include "../fio.h" +static int fio_libaio_commit(struct thread_data *td); + struct libaio_data { io_context_t aio_ctx; struct io_event *aio_events; @@ -35,7 +37,7 @@ struct libaio_data { }; struct libaio_options { - struct thread_data *td; + void *pad; unsigned int userspace_reap; }; @@ -163,11 +165,12 @@ static int fio_libaio_getevents(struct thread_data *td, unsigned int min, r = io_getevents(ld->aio_ctx, actual_min, max, ld->aio_events + events, lt); } - if (r >= 0) + if (r > 0) events += r; - else if (r == -EAGAIN) + else if ((min && r == 0) || r == -EAGAIN) { + fio_libaio_commit(td); usleep(100); - else + } else if (r != -EINTR) break; } while (events < min); @@ -278,7 +281,7 @@ static int fio_libaio_commit(struct thread_data *td) } if (!wait_start) { fio_gettime(&tv, NULL); - wait_start = 0; + wait_start = 1; } else if (mtime_since_now(&tv) > 30000) { log_err("fio: aio appears to be stalled, giving up\n"); break;