Commit f07fa4cb authored by Kevin Wolf's avatar Kevin Wolf
Browse files

migration: Inactivate images after .save_live_complete_precopy()



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: default avatarKevin Wolf <kwolf@redhat.com>
Reviewed-by: default avatarFam Zheng <famz@redhat.com>
Reviewed-by: default avatarJuan Quintela <quintela@redhat.com>
Reviewed-by: default avatarEric Blake <eblake@redhat.com>
Reviewed-by: default avatarJeff Cody <jcody@redhat.com>
parent 93c26503
Loading
Loading
Loading
Loading
+7 −5
Original line number Diff line number Diff line
@@ -1825,19 +1825,21 @@ 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;
                }
            }
        }
        qemu_mutex_unlock_iothread();

        if (ret < 0) {