diff --git a/arch_init.c b/arch_init.c index 85652aad4f..80389376e9 100644 --- a/arch_init.c +++ b/arch_init.c @@ -857,7 +857,6 @@ static int ram_load(QEMUFile *f, void *opaque, int version_id) { ram_addr_t addr; int flags, ret = 0; - int error; static uint64_t seq_iter; seq_iter++; @@ -866,7 +865,7 @@ static int ram_load(QEMUFile *f, void *opaque, int version_id) return -EINVAL; } - do { + while (!ret) { addr = qemu_get_be64(f); flags = addr & ~TARGET_PAGE_MASK; @@ -895,7 +894,6 @@ static int ram_load(QEMUFile *f, void *opaque, int version_id) " in != " RAM_ADDR_FMT "\n", id, length, block->length); ret = -EINVAL; - goto done; } break; } @@ -905,14 +903,14 @@ static int ram_load(QEMUFile *f, void *opaque, int version_id) fprintf(stderr, "Unknown ramblock \"%s\", cannot " "accept migration\n", id); ret = -EINVAL; - goto done; + } + if (ret) { + break; } total_ram_bytes -= length; } - } - - if (flags & RAM_SAVE_FLAG_COMPRESS) { + } else if (flags & RAM_SAVE_FLAG_COMPRESS) { void *host; uint8_t ch; @@ -939,20 +937,24 @@ static int ram_load(QEMUFile *f, void *opaque, int version_id) } if (load_xbzrle(f, addr, host) < 0) { + error_report("Failed to decompress XBZRLE page at " + RAM_ADDR_FMT, addr); ret = -EINVAL; - goto done; + break; } } else if (flags & RAM_SAVE_FLAG_HOOK) { ram_control_load_hook(f, flags); + } else if (flags & RAM_SAVE_FLAG_EOS) { + /* normal exit */ + break; + } else { + error_report("Unknown migration flags: %#x", flags); + ret = -EINVAL; + break; } - error = qemu_file_get_error(f); - if (error) { - ret = error; - goto done; - } - } while (!(flags & RAM_SAVE_FLAG_EOS)); + ret = qemu_file_get_error(f); + } -done: DPRINTF("Completed load of VM with exit code %d seq iteration " "%" PRIu64 "\n", ret, seq_iter); return ret; diff --git a/migration.c b/migration.c index 79c86c92da..22a1399290 100644 --- a/migration.c +++ b/migration.c @@ -105,7 +105,7 @@ static void process_incoming_migration_co(void *opaque) ret = qemu_loadvm_state(f); qemu_fclose(f); if (ret < 0) { - fprintf(stderr, "load of migration failed\n"); + error_report("load of migration failed: %s", strerror(-ret)); exit(EXIT_FAILURE); } qemu_announce_self();