mirror of
https://gitlab.com/qemu-project/qemu
synced 2024-10-07 11:39:36 +00:00
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:
parent
4c170330aa
commit
60fd680193
|
@ -25,6 +25,22 @@
|
||||||
*/
|
*/
|
||||||
int migrate_add_blocker(Error *reason, Error **errp);
|
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
|
* @migrate_del_blocker - remove a blocking error from migration
|
||||||
*
|
*
|
||||||
|
|
|
@ -2049,15 +2049,8 @@ void migrate_init(MigrationState *s)
|
||||||
s->threshold_size = 0;
|
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. */
|
/* Snapshots are similar to migrations, so check RUN_STATE_SAVE_VM too. */
|
||||||
if (runstate_check(RUN_STATE_SAVE_VM) || !migration_is_idle()) {
|
if (runstate_check(RUN_STATE_SAVE_VM) || !migration_is_idle()) {
|
||||||
error_propagate_prepend(errp, error_copy(reason),
|
error_propagate_prepend(errp, error_copy(reason),
|
||||||
|
@ -2070,6 +2063,18 @@ int migrate_add_blocker(Error *reason, Error **errp)
|
||||||
return 0;
|
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)
|
void migrate_del_blocker(Error *reason)
|
||||||
{
|
{
|
||||||
migration_blockers = g_slist_remove(migration_blockers, reason);
|
migration_blockers = g_slist_remove(migration_blockers, reason);
|
||||||
|
|
Loading…
Reference in a new issue