qemuDomainGetStorageSourceByDevstr: Lookup also backup 'store' nodenames

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@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
Peter Krempa 2020-12-07 12:38:43 +01:00
parent c1720b9ac7
commit 40242b7452
3 changed files with 21 additions and 3 deletions

View File

@ -9959,7 +9959,8 @@ qemuDomainDiskBackingStoreGetName(virDomainDiskDefPtr disk,
virStorageSourcePtr
qemuDomainGetStorageSourceByDevstr(const char *devstr,
virDomainDefPtr def)
virDomainDefPtr def,
virDomainBackupDefPtr backupdef)
{
virDomainDiskDefPtr disk = NULL;
virStorageSourcePtr n;
@ -9993,6 +9994,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;

View File

@ -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,

View File

@ -19585,7 +19585,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) &&