• M
    loadvm: improve tests before bdrv_snapshot_goto() · f0aa7a8b
    Miguel Di Ciurcio Filho 提交于
    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: NMiguel Di Ciurcio Filho <miguel.filho@gmail.com>
    Signed-off-by: NKevin Wolf <kwolf@redhat.com>
    f0aa7a8b
savevm.c 51.0 KB