diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 6f10235b43..4f729500b7 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -13704,3 +13704,12 @@ qemuDomainIsUsingNoShutdown(qemuDomainObjPrivatePtr priv) { return priv->monJSON && priv->allowReboot == VIR_TRISTATE_BOOL_YES; } + + +bool +qemuDomainDiskIsMissingLocalOptional(virDomainDiskDefPtr disk) +{ + return disk->startupPolicy == VIR_DOMAIN_STARTUP_POLICY_OPTIONAL && + virStorageSourceIsLocalStorage(disk->src) && disk->src->path && + !virFileExists(disk->src->path); +} diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h index 4414a50c81..73d16966e5 100644 --- a/src/qemu/qemu_domain.h +++ b/src/qemu/qemu_domain.h @@ -1095,4 +1095,7 @@ qemuDomainRunningReasonToResumeEvent(virDomainRunningReason reason); bool qemuDomainIsUsingNoShutdown(qemuDomainObjPrivatePtr priv); +bool +qemuDomainDiskIsMissingLocalOptional(virDomainDiskDefPtr disk); + #endif /* LIBVIRT_QEMU_DOMAIN_H */ diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index e32257f21e..ea316f61d1 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -20720,6 +20720,20 @@ qemuDomainGetStatsBlockExportDisk(virDomainDiskDefPtr disk, const char *backendstoragealias; int ret = -1; + /* + * This helps to keep logs clean from error messages on getting stats + * for optional disk with nonexistent source file. We won't get any + * stats for such a disk anyway in below code. + */ + if (!virDomainObjIsActive(dom) && + qemuDomainDiskIsMissingLocalOptional(disk)) { + VIR_INFO("optional disk '%s' source file is missing, " + "skip getting stats", disk->dst); + + return qemuDomainGetStatsBlockExportHeader(disk, disk->src, *recordnr, + records, nrecords); + } + for (n = disk->src; virStorageSourceIsBacking(n); n = n->backingStore) { if (blockdev) { frontendalias = QEMU_DOMAIN_DISK_PRIVATE(disk)->qomName;