[PATCH 7/8] qemuDomainGetStorageSourceByDevstr: Lookup also backup 'store' nodenames

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxxx>
---
 src/qemu/qemu_domain.c | 19 ++++++++++++++++++-
 src/qemu/qemu_domain.h |  3 ++-
 src/qemu/qemu_driver.c |  2 +-
 3 files changed, 21 insertions(+), 3 deletions(-)

diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index 7232b6131f..58119bee1a 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -9960,7 +9960,8 @@ qemuDomainDiskBackingStoreGetName(virDomainDiskDefPtr disk,

 virStorageSourcePtr
 qemuDomainGetStorageSourceByDevstr(const char *devstr,
-                                   virDomainDefPtr def)
+                                   virDomainDefPtr def,
+                                   virDomainBackupDefPtr backupdef)
 {
     virDomainDiskDefPtr disk = NULL;
     virStorageSourcePtr n;
@@ -9994,6 +9995,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;
diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h
index 32f3586882..154339ef8f 100644
--- a/src/qemu/qemu_domain.h
+++ b/src/qemu/qemu_domain.h
@@ -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,
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 4fd70ed300..f8eb575628 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -19575,7 +19575,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) &&
-- 
2.28.0




[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux