qemu_aio_poll doesn't wait. It returns immediately if IO has not completed
yet.
You're right, sorry. How's this version then? Though there is a race
condition where the AIO signal is received between checking for AIO and
waiting for it.
_________________________________________________________________
Express yourself instantly with MSN Messenger! Download today it's FREE!
http://messenger.msn.click-url.com/go/onm00200471ave/direct/01/
Improve savevm consistency by flushing pending AIO before saving.
Index: qemu/vl.c
===================================================================
--- qemu.orig/vl.c 2006-09-03 10:45:28.000000000 +0000
+++ qemu/vl.c 2006-09-03 11:06:13.000000000 +0000
@@ -4551,6 +4551,17 @@
return;
}
+ /* Flush pending AIO before saving */
+ ret = qemu_aio_poll();
+ if (ret) {
+ qemu_aio_wait_start();
+ do {
+ qemu_aio_wait();
+ ret = qemu_aio_poll();
+ } while (ret);
+ qemu_aio_wait_end();
+ }
+
saved_vm_running = vm_running;
vm_stop(0);
Index: qemu/block-raw.c
===================================================================
--- qemu.orig/block-raw.c 2006-09-03 11:00:39.000000000 +0000
+++ qemu/block-raw.c 2006-09-03 11:03:40.000000000 +0000
@@ -206,10 +206,12 @@
#endif
}
-void qemu_aio_poll(void)
+int qemu_aio_poll(void)
{
RawAIOCB *acb, **pacb;
- int ret;
+ int ret, aios_active;
+
+ aios_active = 0;
for(;;) {
pacb = &first_aio;
@@ -240,11 +242,14 @@
qemu_aio_release(acb);
break;
} else {
+ /* aio still active */
pacb = &acb->next;
+ aios_active = 1;
}
}
}
- the_end: ;
+ the_end:
+ return aios_active;
}
/* wait until at least one AIO was handled */
Index: qemu/vl.h
===================================================================
--- qemu.orig/vl.h 2006-09-03 11:00:43.000000000 +0000
+++ qemu/vl.h 2006-09-03 11:04:10.000000000 +0000
@@ -579,7 +579,7 @@
void bdrv_aio_cancel(BlockDriverAIOCB *acb);
void qemu_aio_init(void);
-void qemu_aio_poll(void);
+int qemu_aio_poll(void);
void qemu_aio_wait_start(void);
void qemu_aio_wait(void);
void qemu_aio_wait_end(void);
_______________________________________________
Qemu-devel mailing list
Qemu-devel@nongnu.org
http://lists.nongnu.org/mailman/listinfo/qemu-devel