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 commit36c2f8be2c
. Introduce postcopy_try_recovery() helper for the postcopy recovery logic. Call it both in migration_fd_process_incoming() and migration_ioc_process_incoming(). Fixes:36c2f8be2c
("migration: Delay start of migration main routines") Signed-off-by: Peter Xu <peterx@redhat.com> Message-Id: <20180627132246.5576-4-peterx@redhat.com> Reviewed-by: Juan Quintela <quintela@redhat.com> Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
This commit is contained in:
parent
81e620531f
commit
884835fa1e
@ -466,7 +466,8 @@ void migration_incoming_process(void)
|
|||||||
qemu_coroutine_enter(co);
|
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();
|
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.
|
* that source is ready to reply to page requests.
|
||||||
*/
|
*/
|
||||||
qemu_sem_post(&mis->postcopy_pause_sem_dst);
|
qemu_sem_post(&mis->postcopy_pause_sem_dst);
|
||||||
} else {
|
return true;
|
||||||
/* New incoming migration */
|
|
||||||
migration_incoming_setup(f);
|
|
||||||
migration_incoming_process();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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)
|
void migration_ioc_process_incoming(QIOChannel *ioc)
|
||||||
@ -504,6 +514,9 @@ void migration_ioc_process_incoming(QIOChannel *ioc)
|
|||||||
|
|
||||||
if (!mis->from_src_file) {
|
if (!mis->from_src_file) {
|
||||||
QEMUFile *f = qemu_fopen_channel_input(ioc);
|
QEMUFile *f = qemu_fopen_channel_input(ioc);
|
||||||
|
if (postcopy_try_recover(f)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
migration_incoming_setup(f);
|
migration_incoming_setup(f);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user