[libvirt] [PATCH 09/12] qemu: blockjob: Copy non-detected chain fully in qemuBlockJobRewriteConfigDiskSource

Peter Krempa posted 12 patches 6 years, 6 months ago
[libvirt] [PATCH 09/12] qemu: blockjob: Copy non-detected chain fully in qemuBlockJobRewriteConfigDiskSource
Posted by Peter Krempa 6 years, 6 months ago
Rather than copying just the top level image, let's copy the full user
provided backing chain.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
---
 src/qemu/qemu_blockjob.c | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

diff --git a/src/qemu/qemu_blockjob.c b/src/qemu/qemu_blockjob.c
index 8303567aed..6ac60e86d7 100644
--- a/src/qemu/qemu_blockjob.c
+++ b/src/qemu/qemu_blockjob.c
@@ -521,6 +521,7 @@ qemuBlockJobRewriteConfigDiskSource(virDomainObjPtr vm,
 {
     virDomainDiskDefPtr persistDisk = NULL;
     VIR_AUTOUNREF(virStorageSourcePtr) copy = NULL;
+    virStorageSourcePtr n;

     if (!vm->newDef)
         return;
@@ -531,14 +532,24 @@ qemuBlockJobRewriteConfigDiskSource(virDomainObjPtr vm,
     if (!virStorageSourceIsSameLocation(disk->src, persistDisk->src))
         return;

-    if (!(copy = virStorageSourceCopy(newsrc, false)) ||
+    if (!(copy = virStorageSourceCopy(newsrc, true)) ||
         virStorageSourceInitChainElement(copy, persistDisk->src, true) < 0) {
         VIR_WARN("Unable to update persistent definition on vm %s after block job",
                  vm->def->name);
         return;
     }

-    qemuBlockJobCleanStorageSourceRuntime(copy);
+    for (n = copy; virStorageSourceIsBacking(n); n = n->backingStore) {
+        qemuBlockJobCleanStorageSourceRuntime(n);
+
+        /* discard any detected backing store */
+        if (virStorageSourceIsBacking(n->backingStore) &&
+            n->backingStore->detected) {
+            virObjectUnref(n->backingStore);
+            n->backingStore = NULL;
+            break;
+        }
+    }

     virObjectUnref(persistDisk->src);
     VIR_STEAL_PTR(persistDisk->src, copy);
-- 
2.21.0

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH 09/12] qemu: blockjob: Copy non-detected chain fully in qemuBlockJobRewriteConfigDiskSource
Posted by Ján Tomko 6 years, 6 months ago
On Thu, Aug 08, 2019 at 06:00:39PM +0200, Peter Krempa wrote:
>Rather than copying just the top level image, let's copy the full user
>provided backing chain.
>
>Signed-off-by: Peter Krempa <pkrempa@redhat.com>
>---
> src/qemu/qemu_blockjob.c | 15 +++++++++++++--
> 1 file changed, 13 insertions(+), 2 deletions(-)
>

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

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