From 986c28d655dc9196c9c426c667c1764bd3d6d5bd Mon Sep 17 00:00:00 2001 From: Andrea Arcangeli Date: Mon, 15 Jun 2009 13:52:27 +0200 Subject: fix qemu_aio_flush qemu_aio_wait by invoking the bh or one of the aio completion callbacks, could end up submitting new pending aio, breaking the invariant that qemu_aio_flush returns only when no pending aio is outstanding (possibly a problem for migration as such). Signed-off-by: Andrea Arcangeli Signed-off-by: Christoph Hellwig Acked-by: Kevin Wolf --- aio.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'aio.c') diff --git a/aio.c b/aio.c index 11fbb6c0c..dc9b85d16 100644 --- a/aio.c +++ b/aio.c @@ -103,11 +103,15 @@ void qemu_aio_flush(void) do { ret = 0; + /* + * If there are pending emulated aio start them now so flush + * will be able to return 1. + */ + qemu_aio_wait(); + LIST_FOREACH(node, &aio_handlers, node) { ret |= node->io_flush(node->opaque); } - - qemu_aio_wait(); } while (ret > 0); } -- cgit v1.2.3-65-gdbad