qemu-irix/migration
Greg Kurz 9520c6cb1f migration: regain control of images when migration fails to complete
We currently have an error path during migration that can cause
the source QEMU to abort:

migration_thread()
  migration_completion()
    runstate_is_running() ----------------> true if guest is running
    bdrv_inactivate_all() ----------------> inactivate images
    qemu_savevm_state_complete_precopy()
     ... qemu_fflush()
           socket_writev_buffer() --------> error because destination fails
         qemu_fflush() -------------------> set error on migration stream
  migration_completion() -----------------> set migrate state to FAILED
migration_thread() -----------------------> break migration loop
  vm_start() -----------------------------> restart guest with inactive
                                            images

and you get:

qemu-system-ppc64: socket_writev_buffer: Got err=104 for (32768/18446744073709551615)
qemu-system-ppc64: /home/greg/Work/qemu/qemu-master/block/io.c:1342:bdrv_co_do_pwritev: Assertion `!(bs->open_flags & 0x0800)' failed.
Aborted (core dumped)

If we try postcopy with a similar scenario, we also get the writev error
message but QEMU leaves the guest paused because entered_postcopy is true.

We could possibly do the same with precopy and leave the guest paused.
But since the historical default for migration errors is to restart the
source, this patch adds a call to bdrv_invalidate_cache_all() instead.

Signed-off-by: Greg Kurz <gkurz@linux.vnet.ibm.com>
Message-Id: <146357896785.6003.11983081732454362715.stgit@bahia.huguette.org>
Signed-off-by: Amit Shah <amit.shah@redhat.com>
(cherry picked from commit fe904ea824)
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
2016-08-04 16:31:03 -05:00
..
Makefile.objs postcopy: OS support test 2015-11-10 15:00:26 +01:00
block.c util: move declarations out of qemu-common.h 2016-03-22 22:20:17 +01:00
exec.c include/qemu/osdep.h: Don't include qapi/error.h 2016-03-22 22:20:15 +01:00
fd.c include/qemu/osdep.h: Don't include qapi/error.h 2016-03-22 22:20:15 +01:00
migration.c migration: regain control of images when migration fails to complete 2016-08-04 16:31:03 -05:00
postcopy-ram.c migration/postcopy-ram: Guard use of sys/eventfd.h with CONFIG_EVENTFD 2016-02-26 15:05:25 +05:30
qemu-file-buf.c migration: Clean up includes 2016-01-29 15:07:22 +00:00
qemu-file-internal.h Split struct QEMUFile out 2014-12-16 17:47:36 +05:30
qemu-file-stdio.c migration: Clean up includes 2016-01-29 15:07:22 +00:00
qemu-file-unix.c osdep: remove use of socket_error() from all code 2016-03-10 17:19:34 +00:00
qemu-file.c migration: Clean up includes 2016-01-29 15:07:22 +00:00
ram.c util: move declarations out of qemu-common.h 2016-03-22 22:20:17 +01:00
rdma.c util: move declarations out of qemu-common.h 2016-03-22 22:20:17 +01:00
savevm.c util: move declarations out of qemu-common.h 2016-03-22 22:20:17 +01:00
tcp.c osdep: remove use of socket_error() from all code 2016-03-10 17:19:34 +00:00
unix.c migration: rename 'file' in MigrationState to 'to_dst_file' 2016-02-05 19:09:50 +05:30
vmstate.c migration: Clean up includes 2016-01-29 15:07:22 +00:00
xbzrle.c util: move declarations out of qemu-common.h 2016-03-22 22:20:17 +01:00