[libvirt] [PATCH 0/2] qemu: Couple of cleanups after qemuDomainGetGuestInfo

*** BLURB HERE *** Michal Prívozník (2): qemu: Acquire domain job in qemuDomainGetFSInfo and qemuDomainGetGuestInfo qemu: Don't duplicate domain def in qemuDomainGetFSInfo src/qemu/qemu_driver.c | 27 +++++++++------------------ 1 file changed, 9 insertions(+), 18 deletions(-) -- 2.21.0

These two functions work with vm->def in their critical sections (i.e. after the job was acquired and before it is released). But that means, they need QUERY domain job too to prevent vm->def change. Signed-off-by: Michal Privoznik <mprivozn@redhat.com> --- src/qemu/qemu_driver.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index c5a0c38c16..2b70f9f83e 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -22143,7 +22143,9 @@ qemuDomainGetFSInfo(virDomainPtr dom, if (virDomainGetFSInfoEnsureACL(dom->conn, vm->def) < 0) goto cleanup; - if (qemuDomainObjBeginAgentJob(driver, vm, QEMU_AGENT_JOB_QUERY) < 0) + if (qemuDomainObjBeginJobWithAgent(driver, vm, + QEMU_JOB_QUERY, + QEMU_AGENT_JOB_QUERY) < 0) goto cleanup; if (virDomainObjCheckActive(vm) < 0) @@ -22163,7 +22165,7 @@ qemuDomainGetFSInfo(virDomainPtr dom, qemuDomainObjExitAgent(vm, agent); endjob: - qemuDomainObjEndAgentJob(vm); + qemuDomainObjEndJobWithAgent(driver, vm); cleanup: virDomainObjEndAPI(&vm); @@ -23241,7 +23243,9 @@ qemuDomainGetGuestInfo(virDomainPtr dom, if (virDomainGetGuestInfoEnsureACL(dom->conn, vm->def) < 0) goto cleanup; - if (qemuDomainObjBeginAgentJob(driver, vm, QEMU_AGENT_JOB_QUERY) < 0) + if (qemuDomainObjBeginJobWithAgent(driver, vm, + QEMU_JOB_QUERY, + QEMU_AGENT_JOB_QUERY) < 0) goto cleanup; if (!qemuDomainAgentAvailable(vm, true)) @@ -23291,7 +23295,7 @@ qemuDomainGetGuestInfo(virDomainPtr dom, qemuDomainObjExitAgent(vm, agent); endjob: - qemuDomainObjEndAgentJob(vm); + qemuDomainObjEndJobWithAgent(driver, vm); cleanup: virDomainObjEndAPI(&vm); -- 2.21.0

Introduced in v3.0.0-rc1~336, the commit message doesn't really justifies the expensive domain def copy creation. Now, that vm->def is guarded in this function by job acquirement we can use vm->def directly. Signed-off-by: Michal Privoznik <mprivozn@redhat.com> --- src/qemu/qemu_driver.c | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 2b70f9f83e..d0e67863ea 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -22126,11 +22126,8 @@ qemuDomainGetFSInfo(virDomainPtr dom, unsigned int flags) { virQEMUDriverPtr driver = dom->conn->privateData; - qemuDomainObjPrivatePtr priv; virDomainObjPtr vm; qemuAgentPtr agent; - virCapsPtr caps = NULL; - virDomainDefPtr def = NULL; int ret = -1; virCheckFlags(0, ret); @@ -22138,8 +22135,6 @@ qemuDomainGetFSInfo(virDomainPtr dom, if (!(vm = qemuDomObjFromDomain(dom))) return ret; - priv = vm->privateData; - if (virDomainGetFSInfoEnsureACL(dom->conn, vm->def) < 0) goto cleanup; @@ -22154,14 +22149,8 @@ qemuDomainGetFSInfo(virDomainPtr dom, if (!qemuDomainAgentAvailable(vm, true)) goto endjob; - if (!(caps = virQEMUDriverGetCapabilities(driver, false))) - goto endjob; - - if (!(def = virDomainDefCopy(vm->def, caps, driver->xmlopt, priv->qemuCaps, false))) - goto endjob; - agent = qemuDomainObjEnterAgent(vm); - ret = qemuAgentGetFSInfo(agent, info, def); + ret = qemuAgentGetFSInfo(agent, info, vm->def); qemuDomainObjExitAgent(vm, agent); endjob: @@ -22169,8 +22158,6 @@ qemuDomainGetFSInfo(virDomainPtr dom, cleanup: virDomainObjEndAPI(&vm); - virDomainDefFree(def); - virObjectUnref(caps); return ret; } -- 2.21.0

On Tue, Aug 27, 2019 at 09:34:06AM +0200, Michal Privoznik wrote:
*** BLURB HERE ***
Michal Prívozník (2): qemu: Acquire domain job in qemuDomainGetFSInfo and qemuDomainGetGuestInfo qemu: Don't duplicate domain def in qemuDomainGetFSInfo
src/qemu/qemu_driver.c | 27 +++++++++------------------ 1 file changed, 9 insertions(+), 18 deletions(-)
*** REVIEW HERE *** Reviewed-by: Ján Tomko <jtomko@redhat.com> Jano
participants (2)
-
Ján Tomko
-
Michal Privoznik