diff options
author | Dr. David Alan Gilbert <dgilbert@redhat.com> | 2016-09-23 20:14:03 +0100 |
---|---|---|
committer | Juan Quintela <quintela@trasno.org> | 2016-10-13 17:22:38 +0200 |
commit | ccb783c3124b66fed6b11aa7a1cd1939a2268287 (patch) | |
tree | 6ce97997614a19c901da5c27c38c2aad6d7746c1 /migration | |
parent | 12c67ffb1fe34ff72a55fa440243c0dfcf22f89b (diff) | |
download | qemu-ccb783c3124b66fed6b11aa7a1cd1939a2268287.zip qemu-ccb783c3124b66fed6b11aa7a1cd1939a2268287.tar.gz qemu-ccb783c3124b66fed6b11aa7a1cd1939a2268287.tar.bz2 |
migration: Make failed migration load set file error
If an error occurs in a section load, set the file error flag
so that the transport can get notified to do a cleanup.
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Reviewed-by: Michael R. Hines <michael@hinespot.com>
Reviewed-by: Juan Quintela <quintela@redhat.com>
Signed-off-by: Juan Quintela <quintela@redhat.com>
Diffstat (limited to 'migration')
-rw-r--r-- | migration/savevm.c | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/migration/savevm.c b/migration/savevm.c index 33a2911..a831ec2 100644 --- a/migration/savevm.c +++ b/migration/savevm.c @@ -1828,40 +1828,45 @@ qemu_loadvm_section_part_end(QEMUFile *f, MigrationIncomingState *mis) static int qemu_loadvm_state_main(QEMUFile *f, MigrationIncomingState *mis) { uint8_t section_type; - int ret; + int ret = 0; while ((section_type = qemu_get_byte(f)) != QEMU_VM_EOF) { - + ret = 0; trace_qemu_loadvm_state_section(section_type); switch (section_type) { case QEMU_VM_SECTION_START: case QEMU_VM_SECTION_FULL: ret = qemu_loadvm_section_start_full(f, mis); if (ret < 0) { - return ret; + goto out; } break; case QEMU_VM_SECTION_PART: case QEMU_VM_SECTION_END: ret = qemu_loadvm_section_part_end(f, mis); if (ret < 0) { - return ret; + goto out; } break; case QEMU_VM_COMMAND: ret = loadvm_process_command(f); trace_qemu_loadvm_state_section_command(ret); if ((ret < 0) || (ret & LOADVM_QUIT)) { - return ret; + goto out; } break; default: error_report("Unknown savevm section type %d", section_type); - return -EINVAL; + ret = -EINVAL; + goto out; } } - return 0; +out: + if (ret < 0) { + qemu_file_set_error(f, ret); + } + return ret; } int qemu_loadvm_state(QEMUFile *f) |