From: Asias He Date: Mon, 4 Jun 2012 15:10:05 +0000 (+0800) Subject: kvm tools: Restart io_submit if it returns EAGAIN X-Git-Tag: next-20120724~32^2~103^2~13 X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=a92281f98563efc9ed2bc3c12c0fe7536cd90099;p=karo-tx-linux.git 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 --- 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