Skip to content

Commit

Permalink
migration: Inactivate images after .save_live_complete_precopy()
Browse files Browse the repository at this point in the history
Block migration may still access the image during its
.save_live_complete_precopy() implementation, so we should only
inactivate the image afterwards.

Another reason for the change is that inactivating an image fails when
there is still a non-device BlockBackend using it, which includes the
BBs used by block migration. We want to give block migration a chance to
release the BBs before trying to inactivate the image (this will be done
in another patch).

Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Reviewed-by: Fam Zheng <famz@redhat.com>
Reviewed-by: Juan Quintela <quintela@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Jeff Cody <jcody@redhat.com>
  • Loading branch information
kevmw committed Jun 9, 2017
1 parent 93c2650 commit f07fa4c
Showing 1 changed file with 7 additions and 5 deletions.
12 changes: 7 additions & 5 deletions migration/migration.c
Expand Up @@ -1825,17 +1825,19 @@ static void migration_completion(MigrationState *s, int current_active_state,

if (!ret) {
ret = vm_stop_force_state(RUN_STATE_FINISH_MIGRATE);
if (ret >= 0) {
qemu_file_set_rate_limit(s->to_dst_file, INT64_MAX);
qemu_savevm_state_complete_precopy(s->to_dst_file, false);
}
/*
* Don't mark the image with BDRV_O_INACTIVE flag if
* we will go into COLO stage later.
*/
if (ret >= 0 && !migrate_colo_enabled()) {
ret = bdrv_inactivate_all();
}
if (ret >= 0) {
qemu_file_set_rate_limit(s->to_dst_file, INT64_MAX);
qemu_savevm_state_complete_precopy(s->to_dst_file, false);
s->block_inactive = true;
if (ret >= 0) {
s->block_inactive = true;
}
}
}
qemu_mutex_unlock_iothread();
Expand Down

0 comments on commit f07fa4c

Please sign in to comment.