[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