diff --git a/savevm.c b/savevm.c index db44ed607b..aefe052cd3 100644 --- a/savevm.c +++ b/savevm.c @@ -1321,7 +1321,14 @@ int qemu_savevm_state_iterate(Monitor *mon, QEMUFile *f) qemu_put_byte(f, QEMU_VM_SECTION_PART); qemu_put_be32(f, se->section_id); - ret &= !!se->save_live_state(mon, f, QEMU_VM_SECTION_PART, se->opaque); + ret = se->save_live_state(mon, f, QEMU_VM_SECTION_PART, se->opaque); + if (!ret) { + /* Do not proceed to the next vmstate before this one reported + completion of the current stage. This serializes the migration + and reduces the probability that a faster changing state is + synchronized over and over again. */ + break; + } } if (ret)