Message ID | 20200122111517.33223-6-quintela@redhat.com |
---|---|
State | New |
Headers | show |
Series | Fix multifd + cancel + multifd | expand |
* Juan Quintela (quintela@redhat.com) wrote: > This function returns if we are in the middle of a migration. > It is like migration_is_setup_or_active() with CANCELLING and COLO. > Adapt all calers that are needed. > > Signed-off-by: Juan Quintela <quintela@redhat.com> Yeh the changes do change behaviour, but they're probably more correct. Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com> > --- > migration/migration.c | 29 ++++++++++++++++++++++++----- > migration/migration.h | 1 + > migration/savevm.c | 4 +--- > 3 files changed, 26 insertions(+), 8 deletions(-) > > diff --git a/migration/migration.c b/migration/migration.c > index 990bff00c0..1fb0aab44d 100644 > --- a/migration/migration.c > +++ b/migration/migration.c > @@ -829,6 +829,27 @@ bool migration_is_setup_or_active(int state) > } > } > > +bool migration_is_running(int state) > +{ > + switch (state) { > + case MIGRATION_STATUS_ACTIVE: > + case MIGRATION_STATUS_POSTCOPY_ACTIVE: > + case MIGRATION_STATUS_POSTCOPY_PAUSED: > + case MIGRATION_STATUS_POSTCOPY_RECOVER: > + case MIGRATION_STATUS_SETUP: > + case MIGRATION_STATUS_PRE_SWITCHOVER: > + case MIGRATION_STATUS_DEVICE: > + case MIGRATION_STATUS_WAIT_UNPLUG: > + case MIGRATION_STATUS_CANCELLING: > + case MIGRATION_STATUS_COLO: > + return true; > + > + default: > + return false; > + > + } > +} > + > static void populate_time_info(MigrationInfo *info, MigrationState *s) > { > info->has_status = true; > @@ -1077,7 +1098,7 @@ void qmp_migrate_set_capabilities(MigrationCapabilityStatusList *params, > MigrationCapabilityStatusList *cap; > bool cap_list[MIGRATION_CAPABILITY__MAX]; > > - if (migration_is_setup_or_active(s->state)) { > + if (migration_is_running(s->state)) { > error_setg(errp, QERR_MIGRATION_ACTIVE); > return; > } > @@ -1590,7 +1611,7 @@ static void migrate_fd_cancel(MigrationState *s) > > do { > old_state = s->state; > - if (!migration_is_setup_or_active(old_state)) { > + if (!migration_is_running(old_state)) { > break; > } > /* If the migration is paused, kick it out of the pause */ > @@ -1888,9 +1909,7 @@ static bool migrate_prepare(MigrationState *s, bool blk, bool blk_inc, > return true; > } > > - if (migration_is_setup_or_active(s->state) || > - s->state == MIGRATION_STATUS_CANCELLING || > - s->state == MIGRATION_STATUS_COLO) { > + if (migration_is_running(s->state)) { > error_setg(errp, QERR_MIGRATION_ACTIVE); > return false; > } > diff --git a/migration/migration.h b/migration/migration.h > index aa9ff6f27b..44b1d56929 100644 > --- a/migration/migration.h > +++ b/migration/migration.h > @@ -279,6 +279,7 @@ void migrate_fd_error(MigrationState *s, const Error *error); > void migrate_fd_connect(MigrationState *s, Error *error_in); > > bool migration_is_setup_or_active(int state); > +bool migration_is_running(int state); > > void migrate_init(MigrationState *s); > bool migration_is_blocked(Error **errp); > diff --git a/migration/savevm.c b/migration/savevm.c > index adfdca26ac..f19cb9ec7a 100644 > --- a/migration/savevm.c > +++ b/migration/savevm.c > @@ -1531,9 +1531,7 @@ static int qemu_savevm_state(QEMUFile *f, Error **errp) > MigrationState *ms = migrate_get_current(); > MigrationStatus status; > > - if (migration_is_setup_or_active(ms->state) || > - ms->state == MIGRATION_STATUS_CANCELLING || > - ms->state == MIGRATION_STATUS_COLO) { > + if (migration_is_running(ms->state)) { > error_setg(errp, QERR_MIGRATION_ACTIVE); > return -EINVAL; > } > -- > 2.24.1 > -- Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
diff --git a/migration/migration.c b/migration/migration.c index 990bff00c0..1fb0aab44d 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -829,6 +829,27 @@ bool migration_is_setup_or_active(int state) } } +bool migration_is_running(int state) +{ + switch (state) { + case MIGRATION_STATUS_ACTIVE: + case MIGRATION_STATUS_POSTCOPY_ACTIVE: + case MIGRATION_STATUS_POSTCOPY_PAUSED: + case MIGRATION_STATUS_POSTCOPY_RECOVER: + case MIGRATION_STATUS_SETUP: + case MIGRATION_STATUS_PRE_SWITCHOVER: + case MIGRATION_STATUS_DEVICE: + case MIGRATION_STATUS_WAIT_UNPLUG: + case MIGRATION_STATUS_CANCELLING: + case MIGRATION_STATUS_COLO: + return true; + + default: + return false; + + } +} + static void populate_time_info(MigrationInfo *info, MigrationState *s) { info->has_status = true; @@ -1077,7 +1098,7 @@ void qmp_migrate_set_capabilities(MigrationCapabilityStatusList *params, MigrationCapabilityStatusList *cap; bool cap_list[MIGRATION_CAPABILITY__MAX]; - if (migration_is_setup_or_active(s->state)) { + if (migration_is_running(s->state)) { error_setg(errp, QERR_MIGRATION_ACTIVE); return; } @@ -1590,7 +1611,7 @@ static void migrate_fd_cancel(MigrationState *s) do { old_state = s->state; - if (!migration_is_setup_or_active(old_state)) { + if (!migration_is_running(old_state)) { break; } /* If the migration is paused, kick it out of the pause */ @@ -1888,9 +1909,7 @@ static bool migrate_prepare(MigrationState *s, bool blk, bool blk_inc, return true; } - if (migration_is_setup_or_active(s->state) || - s->state == MIGRATION_STATUS_CANCELLING || - s->state == MIGRATION_STATUS_COLO) { + if (migration_is_running(s->state)) { error_setg(errp, QERR_MIGRATION_ACTIVE); return false; } diff --git a/migration/migration.h b/migration/migration.h index aa9ff6f27b..44b1d56929 100644 --- a/migration/migration.h +++ b/migration/migration.h @@ -279,6 +279,7 @@ void migrate_fd_error(MigrationState *s, const Error *error); void migrate_fd_connect(MigrationState *s, Error *error_in); bool migration_is_setup_or_active(int state); +bool migration_is_running(int state); void migrate_init(MigrationState *s); bool migration_is_blocked(Error **errp); diff --git a/migration/savevm.c b/migration/savevm.c index adfdca26ac..f19cb9ec7a 100644 --- a/migration/savevm.c +++ b/migration/savevm.c @@ -1531,9 +1531,7 @@ static int qemu_savevm_state(QEMUFile *f, Error **errp) MigrationState *ms = migrate_get_current(); MigrationStatus status; - if (migration_is_setup_or_active(ms->state) || - ms->state == MIGRATION_STATUS_CANCELLING || - ms->state == MIGRATION_STATUS_COLO) { + if (migration_is_running(ms->state)) { error_setg(errp, QERR_MIGRATION_ACTIVE); return -EINVAL; }
This function returns if we are in the middle of a migration. It is like migration_is_setup_or_active() with CANCELLING and COLO. Adapt all calers that are needed. Signed-off-by: Juan Quintela <quintela@redhat.com> --- migration/migration.c | 29 ++++++++++++++++++++++++----- migration/migration.h | 1 + migration/savevm.c | 4 +--- 3 files changed, 26 insertions(+), 8 deletions(-)