]> git.proxmox.com Git - qemu.git/commit - savevm.c
loadvm: improve tests before bdrv_snapshot_goto()
authorMiguel Di Ciurcio Filho <miguel.filho@gmail.com>
Mon, 19 Jul 2010 18:25:01 +0000 (15:25 -0300)
committerKevin Wolf <kwolf@redhat.com>
Tue, 3 Aug 2010 13:57:22 +0000 (15:57 +0200)
commitf0aa7a8b2d518c54430e4382309281b93e51981a
tree8ee47ca89af222dbd03cb1d24458aad9cf981aab
parent8a4266144ebffceb8fda2a5feb03d23c535923d4
loadvm: improve tests before bdrv_snapshot_goto()

This patch improves the resilience of the load_vmstate() function, doing
further and better ordered tests.

In load_vmstate(), if there is any error on bdrv_snapshot_goto(), except if the
error is on VM state device, load_vmstate() will return zero and the VM will be
started with major corruption chances.

The current process:
- test if there is any writable device without snapshot support
    - if exists return -error
- get the device that saves the VM state, possible return -error but unlikely
because it was tested earlier
- flush I/O
- run bdrv_snapshot_goto() on devices
    - if fails, give an warning and goes to the next (not good!)
    - if fails on the VM state device, return zero (not good!)
- check if the requested snapshot exists on the device that saves the VM state
and the state is not zero
    - if fails return -error
- open the file with the VM state
    - if fails return -error
- load the VM state
    - if fails return -error
- return zero

New behavior:
- get the device that saves the VM state
    - if fails return -error
- check if the requested snapshot exists on the device that saves the VM state
and the state is not zero
    - if fails return -error
- test if there is any writable device without snapshot support
    - if exists return -error
- test if the devices with snapshot support have the requested snapshot
    - if anyone fails, return -error
- flush I/O
- run snapshot_goto() on devices
    - if anyone fails, return -error
- open the file with the VM state
    - if fails return -error
- load the VM state
    - if fails return -error
- return zero

do_loadvm must not call vm_start if any error has occurred in load_vmstate.

Signed-off-by: Miguel Di Ciurcio Filho <miguel.filho@gmail.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
monitor.c
savevm.c