]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: roll back if not all nbdkit backends are successful
authorJonathon Jongsma <jjongsma@redhat.com>
Thu, 25 Jan 2024 20:02:16 +0000 (14:02 -0600)
committerJonathon Jongsma <jjongsma@redhat.com>
Mon, 12 Feb 2024 22:13:17 +0000 (16:13 -0600)
When starting nbdkit processes for the backing store of a disk, we were
returning an error if any backing store failed, but we were not cleaning
up processes that succeeded higher in the chain. Make sure that if we
return a failure status from qemuNbdkitStartStorageSource() that we roll
back any processes that had been started.

Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
src/qemu/qemu_nbdkit.c

index f65dfe5b63833a710b0b74551d9544553f2ae8e3..379ee3d5d13f885e3ced61757b4504738d5dcbde 100644 (file)
@@ -914,8 +914,11 @@ qemuNbdkitStartStorageSource(virQEMUDriver *driver,
     virStorageSource *backing;
 
     for (backing = src; backing != NULL; backing = backing->backingStore) {
-        if (qemuNbdkitStartStorageSourceOne(driver, vm, backing) < 0)
+        if (qemuNbdkitStartStorageSourceOne(driver, vm, backing) < 0) {
+            /* roll back any previously-started sources */
+            qemuNbdkitStopStorageSource(src, vm, chain);
             return -1;
+        }
         if (!chain)
             break;
     }