[libvirt] [PATCH 07/11] qemu: process: Terminate backup job on VM destroy

Peter Krempa posted 11 patches 6 years, 1 month ago
[libvirt] [PATCH 07/11] qemu: process: Terminate backup job on VM destroy
Posted by Peter Krempa 6 years, 1 month ago
Commit d75f865fb989b3e6330c78c28e1c3bf7fa28e6a5 caused a job-deadlock if
a VM is running the backup job and being destroyed as it removed the
cleanup of the async job type and there was nothing to clean up the
backup job.

Add an explicit cleanup of the backup job when destroying a VM.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
---
 src/qemu/qemu_backup.c  | 2 +-
 src/qemu/qemu_backup.h  | 3 +++
 src/qemu/qemu_process.c | 5 +++++
 3 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/src/qemu/qemu_backup.c b/src/qemu/qemu_backup.c
index 1381505d9f..3bac6b353c 100644
--- a/src/qemu/qemu_backup.c
+++ b/src/qemu/qemu_backup.c
@@ -604,7 +604,7 @@ qemuBackupBeginCollectIncrementalCheckpoints(virDomainObjPtr vm,
 }


-static void
+void
 qemuBackupJobTerminate(virDomainObjPtr vm,
                        qemuDomainJobStatus jobstatus)

diff --git a/src/qemu/qemu_backup.h b/src/qemu/qemu_backup.h
index 1b8a03612c..3321ba0b6f 100644
--- a/src/qemu/qemu_backup.h
+++ b/src/qemu/qemu_backup.h
@@ -42,6 +42,9 @@ qemuBackupNotifyBlockjobEnd(virDomainObjPtr vm,
                             unsigned long long end,
                             int asyncJob);

+void
+qemuBackupJobTerminate(virDomainObjPtr vm,
+                       qemuDomainJobStatus jobstatus);

 int
 qemuBackupGetJobInfoStats(virQEMUDriverPtr driver,
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
index e6c6c0bee2..3b036ac4bc 100644
--- a/src/qemu/qemu_process.c
+++ b/src/qemu/qemu_process.c
@@ -57,6 +57,7 @@
 #include "qemu_security.h"
 #include "qemu_extdevice.h"
 #include "qemu_firmware.h"
+#include "qemu_backup.h"

 #include "cpu/cpu.h"
 #include "cpu/cpu_x86.h"
@@ -7609,6 +7610,10 @@ void qemuProcessStop(virQEMUDriverPtr driver,
         virResctrlAllocRemove(vm->def->resctrls[i]->alloc);
     }

+    /* clean up a possible backup job */
+    if (priv->backup)
+        qemuBackupJobTerminate(vm, QEMU_DOMAIN_JOB_STATUS_CANCELED);
+
     qemuProcessRemoveDomainStatus(driver, vm);

     /* Remove VNC and Spice ports from port reservation bitmap, but only if
-- 
2.23.0

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Re: [libvirt] [PATCH 07/11] qemu: process: Terminate backup job on VM destroy
Posted by Daniel P. Berrangé 6 years, 1 month ago
On Fri, Dec 20, 2019 at 02:25:25PM +0100, Peter Krempa wrote:
> Commit d75f865fb989b3e6330c78c28e1c3bf7fa28e6a5 caused a job-deadlock if
> a VM is running the backup job and being destroyed as it removed the
> cleanup of the async job type and there was nothing to clean up the
> backup job.
> 
> Add an explicit cleanup of the backup job when destroying a VM.
> 
> Signed-off-by: Peter Krempa <pkrempa@redhat.com>
> ---
>  src/qemu/qemu_backup.c  | 2 +-
>  src/qemu/qemu_backup.h  | 3 +++
>  src/qemu/qemu_process.c | 5 +++++
>  3 files changed, 9 insertions(+), 1 deletion(-)

Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>


Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list