qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH] migration: regain control of images when migration fails to complete
@ 2016-05-18 10:18 Greg Kurz
  2016-05-18 11:13 ` Dr. David Alan Gilbert
  0 siblings, 1 reply; 4+ messages in thread
From: Greg Kurz @ 2016-05-18 10:18 UTC (permalink / raw)
  To: Amit Shah, Juan Quintela; +Cc: qemu-stable, Dr. David Alan Gilbert, qemu-devel

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>
---
 migration/migration.c |    9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/migration/migration.c b/migration/migration.c
index 991313a8629a..5726959ddfd9 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -1568,8 +1568,17 @@ static void migration_completion(MigrationState *s, int current_active_state,
                 ret = bdrv_inactivate_all();
             }
             if (ret >= 0) {
+                Error *local_err = NULL;
+
                 qemu_file_set_rate_limit(s->to_dst_file, INT64_MAX);
                 qemu_savevm_state_complete_precopy(s->to_dst_file, false);
+
+                if (qemu_file_get_error(s->to_dst_file)) {
+                    bdrv_invalidate_cache_all(&local_err);
+                    if (local_err) {
+                        error_report_err(local_err);
+                    }
+                }
             }
         }
         qemu_mutex_unlock_iothread();

^ permalink raw reply related	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2016-05-18 12:18 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-05-18 10:18 [Qemu-devel] [PATCH] migration: regain control of images when migration fails to complete Greg Kurz
2016-05-18 11:13 ` Dr. David Alan Gilbert
2016-05-18 11:42   ` Kevin Wolf
2016-05-18 12:18     ` Greg Kurz

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).