[libvirt] [PATCH] qemu: undefine is not allowed during domain starting up

John Ferlan jferlan at redhat.com
Wed Aug 16 00:13:53 UTC 2017



On 07/22/2017 04:55 AM, Yi Wang wrote:
> Start a domain whilst undefine it, if starting failed duing ProcessLaunch,
> on which period qemu exited unexpectedly, the operation will lead to failure
> of undefine the domain until libvirtd restarted. The reason is that libvirtd
> will unlock vm during qemuProcessStart, qemuDomainUndefineFlags can get the
> lock and set vm->persistent 0 but not remove the "active" domain.
> 
> Signed-off-by: Yi Wang <wang.yi59 at zte.com.cn>
> ---
>  src/conf/domain_conf.h  | 1 +
>  src/qemu/qemu_driver.c  | 6 ++++++
>  src/qemu/qemu_process.c | 3 +++
>  3 files changed, 10 insertions(+)
> 

Can you apply a couple of recent patches, see:

https://www.redhat.com/archives/libvir-list/2017-August/msg00389.html

and see if those would resolve what you're seeing... without these
changes of course...

Tks -

John

> diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
> index af15ee8..f339f84 100644
> --- a/src/conf/domain_conf.h
> +++ b/src/conf/domain_conf.h
> @@ -2468,6 +2468,7 @@ struct _virDomainObj {
>      virDomainSnapshotObjPtr current_snapshot;
>  
>      bool hasManagedSave;
> +    bool starting;
>  
>      void *privateData;
>      void (*privateDataFreeFunc)(void *);
> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> index 6568def..5d9acfc 100644
> --- a/src/qemu/qemu_driver.c
> +++ b/src/qemu/qemu_driver.c
> @@ -7317,6 +7317,12 @@ qemuDomainUndefineFlags(virDomainPtr dom,
>      if (!(vm = qemuDomObjFromDomain(dom)))
>          return -1;
>  
> +    if (vm->starting) {
> +        virReportError(VIR_ERR_OPERATION_INVALID,
> +                       "%s", _("cannot undefine during domain starting up"));
> +        goto cleanup;
> +    }
> +
>      cfg = virQEMUDriverGetConfig(driver);
>  
>      if (virDomainUndefineFlagsEnsureACL(dom->conn, vm->def) < 0)
> diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
> index 525521a..7b708be 100644
> --- a/src/qemu/qemu_process.c
> +++ b/src/qemu/qemu_process.c
> @@ -5847,6 +5847,8 @@ qemuProcessStart(virConnectPtr conn,
>      if (!migrateFrom && !snapshot)
>          flags |= VIR_QEMU_PROCESS_START_NEW;
>  
> +    vm->starting = true;
> +
>      if (qemuProcessInit(driver, vm, updatedCPU,
>                          asyncJob, !!migrateFrom, flags) < 0)
>          goto cleanup;
> @@ -5892,6 +5894,7 @@ qemuProcessStart(virConnectPtr conn,
>      ret = 0;
>  
>   cleanup:
> +    vm->starting = false;
>      qemuProcessIncomingDefFree(incoming);
>      return ret;
>  
> 




More information about the libvir-list mailing list