提交 884835fa 编写于 作者: P Peter Xu 提交者: Dr. David Alan Gilbert

migration: unbreak postcopy recovery

The whole postcopy recovery logic was accidentally broken.  We need to
fix it in two steps.

This is the first step that we should do the recovery when needed.  It
was bypassed before after commit 36c2f8be.

Introduce postcopy_try_recovery() helper for the postcopy recovery
logic.  Call it both in migration_fd_process_incoming() and
migration_ioc_process_incoming().

Fixes: 36c2f8be ("migration: Delay start of migration main routines")
Signed-off-by: NPeter Xu <peterx@redhat.com>
Message-Id: <20180627132246.5576-4-peterx@redhat.com>
Reviewed-by: NJuan Quintela <quintela@redhat.com>
Signed-off-by: NDr. David Alan Gilbert <dgilbert@redhat.com>
上级 81e62053
......@@ -466,7 +466,8 @@ void migration_incoming_process(void)
qemu_coroutine_enter(co);
}
void migration_fd_process_incoming(QEMUFile *f)
/* Returns true if recovered from a paused migration, otherwise false */
static bool postcopy_try_recover(QEMUFile *f)
{
MigrationIncomingState *mis = migration_incoming_get_current();
......@@ -491,11 +492,20 @@ void migration_fd_process_incoming(QEMUFile *f)
* that source is ready to reply to page requests.
*/
qemu_sem_post(&mis->postcopy_pause_sem_dst);
} else {
/* New incoming migration */
migration_incoming_setup(f);
migration_incoming_process();
return true;
}
return false;
}
void migration_fd_process_incoming(QEMUFile *f)
{
if (postcopy_try_recover(f)) {
return;
}
migration_incoming_setup(f);
migration_incoming_process();
}
void migration_ioc_process_incoming(QIOChannel *ioc)
......@@ -504,6 +514,9 @@ void migration_ioc_process_incoming(QIOChannel *ioc)
if (!mis->from_src_file) {
QEMUFile *f = qemu_fopen_channel_input(ioc);
if (postcopy_try_recover(f)) {
return;
}
migration_incoming_setup(f);
return;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册