From: pbrook Date: Sun, 3 Sep 2006 12:08:37 +0000 (+0000) Subject: Flush IO requests before savevm (original patch by Blue Swirl). X-Git-Tag: release_0_9_0-iwjtag~261 X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=78944821828e7debfe6954445049c7ba85d970b1;p=qemu-xen-3.4-testing.git Flush IO requests before savevm (original patch by Blue Swirl). --- diff --git a/block-raw.c b/block-raw.c index 3ed4b32d..3a2843c5 100644 --- a/block-raw.c +++ b/block-raw.c @@ -247,6 +247,17 @@ void qemu_aio_poll(void) the_end: ; } +/* Wait for all IO requests to complete. */ +void qemu_aio_flush(void) +{ + qemu_aio_wait_start(); + qemu_aio_poll(); + while (first_aio) { + qemu_aio_wait(); + } + qemu_aio_wait_end(); +} + /* wait until at least one AIO was handled */ static sigset_t wait_oset; diff --git a/vl.c b/vl.c index 77190309..32c99436 100644 --- a/vl.c +++ b/vl.c @@ -4551,6 +4551,9 @@ void do_savevm(const char *name) return; } + /* ??? Should this occur after vm_stop? */ + qemu_aio_flush(); + saved_vm_running = vm_running; vm_stop(0); @@ -4641,6 +4644,9 @@ void do_loadvm(const char *name) return; } + /* Flush all IO requests so they don't interfere with the new state. */ + qemu_aio_flush(); + saved_vm_running = vm_running; vm_stop(0); diff --git a/vl.h b/vl.h index bd1e6673..14116fa7 100644 --- a/vl.h +++ b/vl.h @@ -580,6 +580,7 @@ void bdrv_aio_cancel(BlockDriverAIOCB *acb); void qemu_aio_init(void); void qemu_aio_poll(void); +void qemu_aio_flush(void); void qemu_aio_wait_start(void); void qemu_aio_wait(void); void qemu_aio_wait_end(void);