diff options
author | pbrook <pbrook@c046a42c-6fe2-441c-8c8c-71466251a162> | 2006-09-03 12:08:37 +0000 |
---|---|---|
committer | pbrook <pbrook@c046a42c-6fe2-441c-8c8c-71466251a162> | 2006-09-03 12:08:37 +0000 |
commit | 6192bc374ff3fb8d7dfc8723dee28559488dfff5 (patch) | |
tree | bda053e9e0ab53ed75ad09ac0085fd09bdacc500 | |
parent | a917d384ac0d09cd68266a6f2ca5c94212c8f81e (diff) |
Flush IO requests before savevm (original patch by Blue Swirl).
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2140 c046a42c-6fe2-441c-8c8c-71466251a162
-rw-r--r-- | block-raw.c | 11 | ||||
-rw-r--r-- | vl.c | 6 | ||||
-rw-r--r-- | vl.h | 1 |
3 files changed, 18 insertions, 0 deletions
diff --git a/block-raw.c b/block-raw.c index 3ed4b32de0..3a2843c5d6 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; @@ -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); @@ -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); |