[PATCH 3/8] qemuDomainGetStorageSourceByDevstr: Avoid logged errors

Peter Krempa pkrempa at redhat.com
Mon Dec 7 16:34:12 UTC 2020


'virStorageFileChainLookup' reports an error when the lookup of the
backing chain entry is unsuccessful. Since we possibly use it multiple
times when looking up backing for 'disk->mirror' the function can report
error which won't be actually reported.

Replace the call to virStorageFileChainLookup by lookup in the chain by
index.

Signed-off-by: Peter Krempa <pkrempa at redhat.com>
---
 src/qemu/qemu_domain.c | 19 +++++++++++++------
 1 file changed, 13 insertions(+), 6 deletions(-)

diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index e56351333c..44abe0ce93 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -9951,7 +9951,7 @@ qemuDomainGetStorageSourceByDevstr(const char *devstr,
                                    virDomainDefPtr def)
 {
     virDomainDiskDefPtr disk = NULL;
-    virStorageSourcePtr src = NULL;
+    virStorageSourcePtr n;
     g_autofree char *target = NULL;
     unsigned int idx;

@@ -9970,13 +9970,20 @@ qemuDomainGetStorageSourceByDevstr(const char *devstr,
     if (idx == 0)
         return disk->src;

-    if ((src = virStorageFileChainLookup(disk->src, NULL, NULL, idx, NULL)))
-        return src;
+    for (n = disk->src; virStorageSourceIsBacking(n); n = n->backingStore) {
+        if (n->id == idx)
+            return n;
+    }

-    if (disk->mirror &&
-        (src = virStorageFileChainLookup(disk->mirror, NULL, NULL, idx, NULL)))
-        return src;
+    if (disk->mirror) {
+        for (n = disk->mirror; virStorageSourceIsBacking(n); n = n->backingStore) {
+            if (n->id == idx)
+                return n;
+        }
+    }

+    virReportError(VIR_ERR_INVALID_ARG,
+                   _("failed to find disk '%s'"), devstr);
     return NULL;
 }

-- 
2.28.0




More information about the libvir-list mailing list