]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemuDomainGetStorageSourceByDevstr: Lookup also backup 'store' nodenames
authorPeter Krempa <pkrempa@redhat.com>
Mon, 7 Dec 2020 11:38:43 +0000 (12:38 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Tue, 8 Dec 2020 14:12:34 +0000 (15:12 +0100)
Nodename may be asociated to a disk backup job, add support to looking
up in that chain too. This is specifically useful for the
BLOCK_WRITE_THRESHOLD event which can be registered for any nodename.

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

index 78256e9cf2dfb0ff0d223a4ae3f33cceac2acde5..d6fded9dd1b2d929b3e55d541afb61eded7f83e5 100644 (file)
@@ -9959,7 +9959,8 @@ qemuDomainDiskBackingStoreGetName(virDomainDiskDefPtr disk,
 
 virStorageSourcePtr
 qemuDomainGetStorageSourceByDevstr(const char *devstr,
-                                   virDomainDefPtr def)
+                                   virDomainDefPtr def,
+                                   virDomainBackupDefPtr backupdef)
 {
     virDomainDiskDefPtr disk = NULL;
     virStorageSourcePtr n;
@@ -9993,6 +9994,22 @@ qemuDomainGetStorageSourceByDevstr(const char *devstr,
         }
     }
 
+    if (backupdef) {
+        size_t i;
+
+        for (i = 0; i < backupdef->ndisks; i++) {
+            virDomainBackupDiskDefPtr backupdisk = backupdef->disks + i;
+
+            if (STRNEQ(target, backupdisk->name))
+                continue;
+
+            for (n = backupdisk->store; virStorageSourceIsBacking(n); n = n->backingStore) {
+                if (n->id == idx)
+                    return n;
+            }
+        }
+    }
+
     virReportError(VIR_ERR_INVALID_ARG,
                    _("failed to find disk '%s'"), devstr);
     return NULL;
index 32f358688211f6fcc16c843756f449aa0cc68020..154339ef8ff259ec7c211391a4a5641fcd861e12 100644 (file)
@@ -920,7 +920,8 @@ char *qemuDomainDiskBackingStoreGetName(virDomainDiskDefPtr disk,
                                         unsigned int idx);
 
 virStorageSourcePtr qemuDomainGetStorageSourceByDevstr(const char *devstr,
-                                                       virDomainDefPtr def);
+                                                       virDomainDefPtr def,
+                                                       virDomainBackupDefPtr backupdef);
 
 int
 qemuDomainUpdateCPU(virDomainObjPtr vm,
index d8478945d6273a061e80f1469946ece2edbc452f..8c4ac5bc13c2e953ee82f4c143100a3100174dd6 100644 (file)
@@ -19585,7 +19585,7 @@ qemuDomainSetBlockThreshold(virDomainPtr dom,
         goto endjob;
     }
 
-    if (!(src = qemuDomainGetStorageSourceByDevstr(dev, vm->def)))
+    if (!(src = qemuDomainGetStorageSourceByDevstr(dev, vm->def, priv->backup)))
         goto endjob;
 
     if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV) &&