mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-04 21:47:16 +03:00
qemuDomainDiskLookupByNodename: 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:
parent
047b45f359
commit
c1720b9ac7
@ -9895,6 +9895,7 @@ qemuDomainGetHostdevPath(virDomainHostdevDefPtr dev,
|
||||
/**
|
||||
* qemuDomainDiskLookupByNodename:
|
||||
* @def: domain definition to look for the disk
|
||||
* @backupdef: definition of the backup job of the domain (optional)
|
||||
* @nodename: block backend node name to find
|
||||
* @src: filled with the specific backing store element if provided
|
||||
*
|
||||
@ -9904,6 +9905,7 @@ qemuDomainGetHostdevPath(virDomainHostdevDefPtr dev,
|
||||
*/
|
||||
virDomainDiskDefPtr
|
||||
qemuDomainDiskLookupByNodename(virDomainDefPtr def,
|
||||
virDomainBackupDefPtr backupdef,
|
||||
const char *nodename,
|
||||
virStorageSourcePtr *src)
|
||||
{
|
||||
@ -9924,6 +9926,16 @@ qemuDomainDiskLookupByNodename(virDomainDefPtr def,
|
||||
return domdisk;
|
||||
}
|
||||
|
||||
if (backupdef) {
|
||||
for (i = 0; i < backupdef->ndisks; i++) {
|
||||
virDomainBackupDiskDefPtr backupdisk = backupdef->disks + i;
|
||||
|
||||
if (backupdisk->store &&
|
||||
(*src = virStorageSourceFindByNodeName(backupdisk->store, nodename)))
|
||||
return virDomainDiskByTarget(def, backupdisk->name);
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -912,6 +912,7 @@ int qemuDomainGetHostdevPath(virDomainHostdevDefPtr dev,
|
||||
int *perms);
|
||||
|
||||
virDomainDiskDefPtr qemuDomainDiskLookupByNodename(virDomainDefPtr def,
|
||||
virDomainBackupDefPtr backupdef,
|
||||
const char *nodename,
|
||||
virStorageSourcePtr *src);
|
||||
|
||||
|
@ -879,7 +879,7 @@ qemuProcessHandleIOError(qemuMonitorPtr mon G_GNUC_UNUSED,
|
||||
if (diskAlias)
|
||||
disk = qemuProcessFindDomainDiskByAliasOrQOM(vm, diskAlias, NULL);
|
||||
else if (nodename)
|
||||
disk = qemuDomainDiskLookupByNodename(vm->def, nodename, NULL);
|
||||
disk = qemuDomainDiskLookupByNodename(vm->def, NULL, nodename, NULL);
|
||||
else
|
||||
disk = NULL;
|
||||
|
||||
@ -1483,6 +1483,7 @@ qemuProcessHandleBlockThreshold(qemuMonitorPtr mon G_GNUC_UNUSED,
|
||||
unsigned long long excess,
|
||||
void *opaque)
|
||||
{
|
||||
qemuDomainObjPrivatePtr priv;
|
||||
virQEMUDriverPtr driver = opaque;
|
||||
virObjectEventPtr eventSource = NULL;
|
||||
virObjectEventPtr eventDevice = NULL;
|
||||
@ -1492,11 +1493,13 @@ qemuProcessHandleBlockThreshold(qemuMonitorPtr mon G_GNUC_UNUSED,
|
||||
|
||||
virObjectLock(vm);
|
||||
|
||||
priv = vm->privateData;
|
||||
|
||||
VIR_DEBUG("BLOCK_WRITE_THRESHOLD event for block node '%s' in domain %p %s:"
|
||||
"threshold '%llu' exceeded by '%llu'",
|
||||
nodename, vm, vm->def->name, threshold, excess);
|
||||
|
||||
if ((disk = qemuDomainDiskLookupByNodename(vm->def, nodename, &src))) {
|
||||
if ((disk = qemuDomainDiskLookupByNodename(vm->def, priv->backup, nodename, &src))) {
|
||||
if (virStorageSourceIsLocalStorage(src))
|
||||
path = src->path;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user