]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemuDomainGetStorageSourceByDevstr: Avoid logged errors
authorPeter Krempa <pkrempa@redhat.com>
Mon, 7 Dec 2020 12:19:18 +0000 (13:19 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Tue, 8 Dec 2020 14:12:33 +0000 (15:12 +0100)
'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@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/qemu/qemu_domain.c

index fc24b551e59f82e4635594fa73a0433d256c354f..13559ae0d60a3cc81dcc8ffeb0d422845c4389c4 100644 (file)
@@ -9950,7 +9950,7 @@ qemuDomainGetStorageSourceByDevstr(const char *devstr,
                                    virDomainDefPtr def)
 {
     virDomainDiskDefPtr disk = NULL;
-    virStorageSourcePtr src = NULL;
+    virStorageSourcePtr n;
     g_autofree char *target = NULL;
     unsigned int idx;
 
@@ -9969,13 +9969,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;
 }