On Tue, May 30, 2017 at 05:22:51PM +0200, Kevin Wolf wrote: > 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 <kw...@redhat.com> > Reviewed-by: Fam Zheng <f...@redhat.com> > Reviewed-by: Juan Quintela <quint...@redhat.com> > Reviewed-by: Eric Blake <ebl...@redhat.com> > --- > migration/migration.c | 12 +++++++----- > 1 file changed, 7 insertions(+), 5 deletions(-) > > diff --git a/migration/migration.c b/migration/migration.c > index ad29e53..77a05d1 100644 > --- a/migration/migration.c > +++ b/migration/migration.c > @@ -1820,17 +1820,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(); > -- > 1.8.3.1 > >
Reviewed-by: Jeff Cody <jc...@redhat.com>