[libvirt] [PATCH] kill vm if saving config failed in v3 protocol

Wen Congyang wency at cn.fujitsu.com
Mon Jul 11 01:25:40 UTC 2011


At 07/01/2011 06:05 PM, Wen Congyang Write:
> If virDomainSaveConfig() failed, we will return NULL to source,
> and the vm is still available to restart during confirm() step in
> v3 protocol. So we should kill it off in qemuMigrationFinish().
> 
> In v2 protocol, we should not set vm to NULL, because we hold
> a reference of vm and should unrefernce it.
> 
> ---
>  src/qemu/qemu_migration.c |   21 +++++++++++++++++++--
>  1 files changed, 19 insertions(+), 2 deletions(-)
> 
> diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
> index 800b714..fa98cba 100644
> --- a/src/qemu/qemu_migration.c
> +++ b/src/qemu/qemu_migration.c
> @@ -2471,7 +2471,7 @@ qemuMigrationFinish(struct qemud_driver *driver,
>          if (!virDomainObjIsActive(vm)) {
>              qemuReportError(VIR_ERR_INTERNAL_ERROR, "%s",
>                              _("guest unexpectedly quit"));
> -            goto cleanup;
> +            goto endjob;
>          }
>  
>          qemuMigrationVPAssociatePortProfiles(vm->def);
> @@ -2491,7 +2491,24 @@ qemuMigrationFinish(struct qemud_driver *driver,
>                   * Return a NULL dom pointer, and hope that this is a rare
>                   * situation and management tools are smart.
>                   */
> -                vm = NULL;
> +
> +                /*
> +                 * In v3 protocol, the source VM is still available to
> +                 * restart during confirm() step, so we kill it off
> +                 * now.
> +                 * In v2 protocol, the source is dead, so we leave
> +                 * target in paused state, in case admin can fix
> +                 * things up
> +                 */
> +                if (v3proto) {
> +                    qemuProcessStop(driver, vm, 1, VIR_DOMAIN_SHUTOFF_FAILED);
> +                    qemuAuditDomainStop(vm, "failed");
> +                    if (newVM) {
> +                        if (qemuDomainObjEndJob(vm) > 0)
> +                            virDomainRemoveInactive(&driver->domains, vm);
> +                        vm = NULL;
> +                    }
> +                }
>                  goto endjob;
>              }
>  

Ping :)




More information about the libvir-list mailing list