qemuDomainGetStorageSourceByDevstr: Avoid logged errors

'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>
This commit is contained in:
Peter Krempa 2020-12-07 13:19:18 +01:00
parent 4c4c07b941
commit a0a2eb12ab

View File

@ -9950,7 +9950,7 @@ qemuDomainGetStorageSourceByDevstr(const char *devstr,
virDomainDefPtr def) virDomainDefPtr def)
{ {
virDomainDiskDefPtr disk = NULL; virDomainDiskDefPtr disk = NULL;
virStorageSourcePtr src = NULL; virStorageSourcePtr n;
g_autofree char *target = NULL; g_autofree char *target = NULL;
unsigned int idx; unsigned int idx;
@ -9969,13 +9969,20 @@ qemuDomainGetStorageSourceByDevstr(const char *devstr,
if (idx == 0) if (idx == 0)
return disk->src; return disk->src;
if ((src = virStorageFileChainLookup(disk->src, NULL, NULL, idx, NULL))) for (n = disk->src; virStorageSourceIsBacking(n); n = n->backingStore) {
return src; if (n->id == idx)
return n;
}
if (disk->mirror && if (disk->mirror) {
(src = virStorageFileChainLookup(disk->mirror, NULL, NULL, idx, NULL))) for (n = disk->mirror; virStorageSourceIsBacking(n); n = n->backingStore) {
return src; if (n->id == idx)
return n;
}
}
virReportError(VIR_ERR_INVALID_ARG,
_("failed to find disk '%s'"), devstr);
return NULL; return NULL;
} }