migration: Add migrate_add_blocker_internal()

An internal version that removes -only-migratable implications.  It can be used
for temporary migration blockers like dump-guest-memory.

Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Juan Quintela <quintela@redhat.com>
Signed-off-by: Peter Xu <peterx@redhat.com>
Signed-off-by: Juan Quintela <quintela@redhat.com>
This commit is contained in:
Peter Xu 2021-09-22 12:20:08 -04:00 committed by Juan Quintela
parent 4c170330aa
commit 60fd680193
2 changed files with 29 additions and 8 deletions

View file

@ -25,6 +25,22 @@
*/
int migrate_add_blocker(Error *reason, Error **errp);
/**
* @migrate_add_blocker_internal - prevent migration from proceeding without
* only-migrate implications
*
* @reason - an error to be returned whenever migration is attempted
*
* @errp - [out] The reason (if any) we cannot block migration right now.
*
* @returns - 0 on success, -EBUSY on failure, with errp set.
*
* Some of the migration blockers can be temporary (e.g., for a few seconds),
* so it shouldn't need to conflict with "-only-migratable". For those cases,
* we can call this function rather than @migrate_add_blocker().
*/
int migrate_add_blocker_internal(Error *reason, Error **errp);
/**
* @migrate_del_blocker - remove a blocking error from migration
*

View file

@ -2049,15 +2049,8 @@ void migrate_init(MigrationState *s)
s->threshold_size = 0;
}
int migrate_add_blocker(Error *reason, Error **errp)
int migrate_add_blocker_internal(Error *reason, Error **errp)
{
if (only_migratable) {
error_propagate_prepend(errp, error_copy(reason),
"disallowing migration blocker "
"(--only-migratable) for: ");
return -EACCES;
}
/* Snapshots are similar to migrations, so check RUN_STATE_SAVE_VM too. */
if (runstate_check(RUN_STATE_SAVE_VM) || !migration_is_idle()) {
error_propagate_prepend(errp, error_copy(reason),
@ -2070,6 +2063,18 @@ int migrate_add_blocker(Error *reason, Error **errp)
return 0;
}
int migrate_add_blocker(Error *reason, Error **errp)
{
if (only_migratable) {
error_propagate_prepend(errp, error_copy(reason),
"disallowing migration blocker "
"(--only-migratable) for: ");
return -EACCES;
}
return migrate_add_blocker_internal(reason, errp);
}
void migrate_del_blocker(Error *reason)
{
migration_blockers = g_slist_remove(migration_blockers, reason);