Commit 6192bc374ff3fb8d7dfc8723dee28559488dfff5

Authored by pbrook
1 parent a917d384

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
Showing 3 changed files with 18 additions and 0 deletions
block-raw.c
... ... @@ -247,6 +247,17 @@ void qemu_aio_poll(void)
247 247 the_end: ;
248 248 }
249 249  
  250 +/* Wait for all IO requests to complete. */
  251 +void qemu_aio_flush(void)
  252 +{
  253 + qemu_aio_wait_start();
  254 + qemu_aio_poll();
  255 + while (first_aio) {
  256 + qemu_aio_wait();
  257 + }
  258 + qemu_aio_wait_end();
  259 +}
  260 +
250 261 /* wait until at least one AIO was handled */
251 262 static sigset_t wait_oset;
252 263  
... ...
... ... @@ -4551,6 +4551,9 @@ void do_savevm(const char *name)
4551 4551 return;
4552 4552 }
4553 4553  
  4554 + /* ??? Should this occur after vm_stop? */
  4555 + qemu_aio_flush();
  4556 +
4554 4557 saved_vm_running = vm_running;
4555 4558 vm_stop(0);
4556 4559  
... ... @@ -4641,6 +4644,9 @@ void do_loadvm(const char *name)
4641 4644 return;
4642 4645 }
4643 4646  
  4647 + /* Flush all IO requests so they don't interfere with the new state. */
  4648 + qemu_aio_flush();
  4649 +
4644 4650 saved_vm_running = vm_running;
4645 4651 vm_stop(0);
4646 4652  
... ...
... ... @@ -580,6 +580,7 @@ void bdrv_aio_cancel(BlockDriverAIOCB *acb);
580 580  
581 581 void qemu_aio_init(void);
582 582 void qemu_aio_poll(void);
  583 +void qemu_aio_flush(void);
583 584 void qemu_aio_wait_start(void);
584 585 void qemu_aio_wait(void);
585 586 void qemu_aio_wait_end(void);
... ...