Forwarding to qemu-block so I won't forget to have a look.
Am 19.11.2016 um 12:43 hat zhanghailiang geschrieben:
> commit fe904ea8242cbae2d7e69c052c754b8f5f1ba1d6 fixed a case
> which migration aborted QEMU because it didn't regain the control
> of images while some errors happened.
>
> Actually, we have another case in that error path to abort QEMU
> because of the same reason:
> migration_thread()
> migration_completion()
> bdrv_inactivate_all() ----------------> inactivate images
> qemu_savevm_state_complete_precopy()
> socket_writev_buffer() --------> error because destination
> fails
> qemu_fflush() -------------------> set error on migration stream
> qemu_mutex_unlock_iothread() ------> unlock
> qmp_migrate_cancel() ---------------------> user cancelled migration
> migrate_set_state() ------------------> set migrate CANCELLING
> migration_completion() -----------------> go on to fail_invalidate
> if (s->state == MIGRATION_STATUS_ACTIVE) -> Jump this branch
> migration_thread() -----------------------> break migration loop
> vm_start() -----------------------------> restart guest with inactive
> images
> We failed to regain the control of images because we only regain it
> while the migration state is "active", but here users cancelled the migration
> when they found some errors happened (for example, libvirtd daemon is shutdown
> in destination unexpectedly).
>
> Signed-off-by: zhanghailiang <zhang.zhanghaili...@huawei.com>
> ---
> migration/migration.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/migration/migration.c b/migration/migration.c
> index f498ab8..0c1ee6d 100644
> --- a/migration/migration.c
> +++ b/migration/migration.c
> @@ -1752,7 +1752,8 @@ fail_invalidate:
> /* If not doing postcopy, vm_start() will be called: let's regain
> * control on images.
> */
> - if (s->state == MIGRATION_STATUS_ACTIVE) {
> + if (s->state == MIGRATION_STATUS_ACTIVE ||
> + s->state == MIGRATION_STATUS_CANCELLING) {
> Error *local_err = NULL;
>
> bdrv_invalidate_cache_all(&local_err);
> --
> 1.8.3.1
>
>
>