[PATCH] qemu: Grab a QUERY job when formatting domain XML

Michal Privoznik posted 1 patch 1 week, 2 days ago
src/qemu/qemu_driver.c | 5 +++++
1 file changed, 5 insertions(+)
[PATCH] qemu: Grab a QUERY job when formatting domain XML
Posted by Michal Privoznik 1 week, 2 days ago
It may happen that, for instance after daemon restart, that one
thread is still in qemuProcessReconnect(), i.e. filling in
runtime information by talking to QEMU on monitor. If another
thread then tries to format domain XML (which is currently
guarded by plain mutex on virDomainObj) it'll produce incomplete
and misleading information (e.g. current size of virtio-mem).
This happens because the reconnecting thread talks to QEMU on
monitor and thus unlocks the domain object frequently allowing
the XML formatting thread to acquire the mutex meanwhile.

Resolves: https://issues.redhat.com/browse/RHEL-71042
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
---
 src/qemu/qemu_driver.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 09f7edda7d..f1a633fdd3 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -6163,6 +6163,9 @@ static char
     if (virDomainGetXMLDescEnsureACL(dom->conn, vm->def, flags) < 0)
         goto cleanup;
 
+    if (virDomainObjBeginJob(vm, VIR_JOB_QUERY) < 0)
+        goto cleanup;
+
     qemuDomainUpdateCurrentMemorySize(vm);
 
     if ((flags & VIR_DOMAIN_XML_MIGRATABLE))
@@ -6177,6 +6180,8 @@ static char
 
     ret = qemuDomainFormatXML(driver, vm, flags);
 
+    virDomainObjEndJob(vm);
+
  cleanup:
     virDomainObjEndAPI(&vm);
     return ret;
-- 
2.45.2
Re: [PATCH] qemu: Grab a QUERY job when formatting domain XML
Posted by Ján Tomko 1 week, 2 days ago
On a Thursday in 2024, Michal Privoznik wrote:
>It may happen that, for instance after daemon restart, that one
>thread is still in qemuProcessReconnect(), i.e. filling in
>runtime information by talking to QEMU on monitor. If another
>thread then tries to format domain XML (which is currently
>guarded by plain mutex on virDomainObj) it'll produce incomplete
>and misleading information (e.g. current size of virtio-mem).
>This happens because the reconnecting thread talks to QEMU on
>monitor and thus unlocks the domain object frequently allowing
>the XML formatting thread to acquire the mutex meanwhile.
>
>Resolves: https://issues.redhat.com/browse/RHEL-71042
>Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
>---
> src/qemu/qemu_driver.c | 5 +++++
> 1 file changed, 5 insertions(+)
>

Reviewed-by: Ján Tomko <jtomko@redhat.com>

Jano