From a92281f98563efc9ed2bc3c12c0fe7536cd90099 Mon Sep 17 00:00:00 2001 From: Asias He Date: Mon, 4 Jun 2012 23:10:05 +0800 Subject: [PATCH] kvm tools: Restart io_submit if it returns EAGAIN Keep trying if io_submit returns EAGAIN. No need to fail the request. Signed-off-by: Asias He Signed-off-by: Pekka Enberg --- tools/kvm/util/read-write.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/tools/kvm/util/read-write.c b/tools/kvm/util/read-write.c index 55473ba30dc9..44709dfd4353 100644 --- a/tools/kvm/util/read-write.c +++ b/tools/kvm/util/read-write.c @@ -322,23 +322,33 @@ int aio_pwritev(io_context_t ctx, struct iocb *iocb, int fd, const struct iovec off_t offset, int ev, void *param) { struct iocb *ios[1] = { iocb }; + int ret; io_prep_pwritev(iocb, fd, iov, iovcnt, offset); io_set_eventfd(iocb, ev); iocb->data = param; - return io_submit(ctx, 1, ios); +restart: + ret = io_submit(ctx, 1, ios); + if (ret == -EAGAIN) + goto restart; + return ret; } int aio_preadv(io_context_t ctx, struct iocb *iocb, int fd, const struct iovec *iov, int iovcnt, off_t offset, int ev, void *param) { struct iocb *ios[1] = { iocb }; + int ret; io_prep_preadv(iocb, fd, iov, iovcnt, offset); io_set_eventfd(iocb, ev); iocb->data = param; - return io_submit(ctx, 1, ios); +restart: + ret = io_submit(ctx, 1, ios); + if (ret == -EAGAIN) + goto restart; + return ret; } -#endif \ No newline at end of file +#endif -- 2.39.5