]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: domain: Move out clearing of backing chain in qemuDomainDetermineDiskChain
authorPeter Krempa <pkrempa@redhat.com>
Tue, 24 Apr 2018 12:07:22 +0000 (14:07 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Fri, 20 Jul 2018 13:33:20 +0000 (15:33 +0200)
In some cases backing chain needs to be cleared prior to re-detection.
Move this step out of qemuDomainDetermineDiskChain as only certain
places need it and the function itself is able to skip to the end of the
chain to perform detection.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/qemu/qemu_blockjob.c
src/qemu/qemu_domain.c
src/qemu/qemu_domain.h
src/qemu/qemu_driver.c
src/qemu/qemu_hotplug.c
src/qemu/qemu_process.c

index b08e0474908d4a380663ce5bf617259c7372e53c..0f52996ade1970578eeffae4d13709d73a7bd4a8 100644 (file)
@@ -175,8 +175,8 @@ qemuBlockJobEventProcess(virQEMUDriverPtr driver,
         disk->mirrorState = VIR_DOMAIN_DISK_MIRROR_STATE_NONE;
         disk->mirrorJob = VIR_DOMAIN_BLOCK_JOB_TYPE_UNKNOWN;
         disk->src->id = 0;
-        ignore_value(qemuDomainDetermineDiskChain(driver, vm, disk,
-                                                  true, true));
+        virStorageSourceBackingStoreClear(disk->src);
+        ignore_value(qemuDomainDetermineDiskChain(driver, vm, disk, true));
         ignore_value(qemuBlockNodeNamesDetect(driver, vm, asyncJob));
         diskPriv->blockjob = false;
         break;
index 9188302e5330fba4f85e9a0cc3477f904719a143..a0ecb4c8ffdba539e35f6fab7450211ae69e0efa 100644 (file)
@@ -8502,7 +8502,6 @@ int
 qemuDomainDetermineDiskChain(virQEMUDriverPtr driver,
                              virDomainObjPtr vm,
                              virDomainDiskDefPtr disk,
-                             bool force_probe,
                              bool report_broken)
 {
     virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
@@ -8518,9 +8517,6 @@ qemuDomainDetermineDiskChain(virQEMUDriverPtr driver,
         goto cleanup;
     }
 
-    if (force_probe)
-        virStorageSourceBackingStoreClear(src);
-
     /* There is no need to check the backing chain for disks without backing
      * support */
     if (virStorageSourceIsLocalStorage(src) &&
index e748d78adb3898fe22182aed3b0bdb6f40b53e6c..1692fa983824d51e6be5740875e5038f17b4b3e4 100644 (file)
@@ -718,7 +718,6 @@ int qemuDomainCheckDiskPresence(virQEMUDriverPtr driver,
 int qemuDomainDetermineDiskChain(virQEMUDriverPtr driver,
                                  virDomainObjPtr vm,
                                  virDomainDiskDefPtr disk,
-                                 bool force_probe,
                                  bool report_broken);
 
 bool qemuDomainDiskSourceDiffers(virDomainDiskDefPtr disk,
index 99bb4913bda6987985df75ea48d2df5a03fed147..a7279ecc640ef66dc810e885b75ab8e3a95e005a 100644 (file)
@@ -7850,7 +7850,7 @@ qemuDomainChangeDiskLive(virDomainObjPtr vm,
     if (virDomainDiskTranslateSourcePool(disk) < 0)
         goto cleanup;
 
-    if (qemuDomainDetermineDiskChain(driver, vm, disk, false, true) < 0)
+    if (qemuDomainDetermineDiskChain(driver, vm, disk, true) < 0)
         goto cleanup;
 
     if (!(orig_disk = virDomainDiskFindByBusAndDst(vm->def,
@@ -16873,7 +16873,7 @@ qemuDomainBlockPivot(virQEMUDriverPtr driver,
         oldsrc = disk->src;
         disk->src = disk->mirror;
 
-        if (qemuDomainDetermineDiskChain(driver, vm, disk, false, true) < 0)
+        if (qemuDomainDetermineDiskChain(driver, vm, disk, true) < 0)
             goto cleanup;
 
         if (disk->mirror->format &&
index d3b7b45019b5f7252acccfd57863401f408a4a6d..fe703ab4bdeddf7e727776177e141ca900e45d63 100644 (file)
@@ -924,7 +924,7 @@ qemuDomainAttachDeviceDiskLive(virQEMUDriverPtr driver,
     if (qemuSetUnprivSGIO(dev) < 0)
         goto cleanup;
 
-    if (qemuDomainDetermineDiskChain(driver, vm, disk, false, true) < 0)
+    if (qemuDomainDetermineDiskChain(driver, vm, disk, true) < 0)
         goto cleanup;
 
     switch ((virDomainDiskDevice) disk->device)  {
index a4b1f97df5b7a4931cf86c1f5a4bbd59a2d0d8a9..bba157bed442232b6e49415aeed850bcf967b3e6 100644 (file)
@@ -6019,7 +6019,9 @@ qemuProcessPrepareHostStorage(virQEMUDriverPtr driver,
         if (virStorageSourceIsEmpty(disk->src))
             continue;
 
-        if (qemuDomainDetermineDiskChain(driver, vm, disk, true, true) >= 0)
+        virStorageSourceBackingStoreClear(disk->src);
+
+        if (qemuDomainDetermineDiskChain(driver, vm, disk, true) >= 0)
             continue;
 
         if (qemuDomainCheckDiskStartupPolicy(driver, vm, idx, cold_boot) >= 0)
@@ -7695,7 +7697,8 @@ qemuProcessReconnect(void *opaque)
             /* This should be the only place that calls
              * qemuDomainDetermineDiskChain with @report_broken == false
              * to guarantee best-effort domain reconnect */
-            if (qemuDomainDetermineDiskChain(driver, obj, disk, true, false) < 0)
+            virStorageSourceBackingStoreClear(disk->src);
+            if (qemuDomainDetermineDiskChain(driver, obj, disk, false) < 0)
                 goto error;
         } else {
             VIR_DEBUG("skipping backing chain detection for '%s'", disk->dst);