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:
|
* qemuDomainDiskLookupByNodename:
|
||||||
* @def: domain definition to look for the disk
|
* @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
|
* @nodename: block backend node name to find
|
||||||
* @src: filled with the specific backing store element if provided
|
* @src: filled with the specific backing store element if provided
|
||||||
*
|
*
|
||||||
@ -9904,6 +9905,7 @@ qemuDomainGetHostdevPath(virDomainHostdevDefPtr dev,
|
|||||||
*/
|
*/
|
||||||
virDomainDiskDefPtr
|
virDomainDiskDefPtr
|
||||||
qemuDomainDiskLookupByNodename(virDomainDefPtr def,
|
qemuDomainDiskLookupByNodename(virDomainDefPtr def,
|
||||||
|
virDomainBackupDefPtr backupdef,
|
||||||
const char *nodename,
|
const char *nodename,
|
||||||
virStorageSourcePtr *src)
|
virStorageSourcePtr *src)
|
||||||
{
|
{
|
||||||
@ -9924,6 +9926,16 @@ qemuDomainDiskLookupByNodename(virDomainDefPtr def,
|
|||||||
return domdisk;
|
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;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -912,6 +912,7 @@ int qemuDomainGetHostdevPath(virDomainHostdevDefPtr dev,
|
|||||||
int *perms);
|
int *perms);
|
||||||
|
|
||||||
virDomainDiskDefPtr qemuDomainDiskLookupByNodename(virDomainDefPtr def,
|
virDomainDiskDefPtr qemuDomainDiskLookupByNodename(virDomainDefPtr def,
|
||||||
|
virDomainBackupDefPtr backupdef,
|
||||||
const char *nodename,
|
const char *nodename,
|
||||||
virStorageSourcePtr *src);
|
virStorageSourcePtr *src);
|
||||||
|
|
||||||
|
@ -879,7 +879,7 @@ qemuProcessHandleIOError(qemuMonitorPtr mon G_GNUC_UNUSED,
|
|||||||
if (diskAlias)
|
if (diskAlias)
|
||||||
disk = qemuProcessFindDomainDiskByAliasOrQOM(vm, diskAlias, NULL);
|
disk = qemuProcessFindDomainDiskByAliasOrQOM(vm, diskAlias, NULL);
|
||||||
else if (nodename)
|
else if (nodename)
|
||||||
disk = qemuDomainDiskLookupByNodename(vm->def, nodename, NULL);
|
disk = qemuDomainDiskLookupByNodename(vm->def, NULL, nodename, NULL);
|
||||||
else
|
else
|
||||||
disk = NULL;
|
disk = NULL;
|
||||||
|
|
||||||
@ -1483,6 +1483,7 @@ qemuProcessHandleBlockThreshold(qemuMonitorPtr mon G_GNUC_UNUSED,
|
|||||||
unsigned long long excess,
|
unsigned long long excess,
|
||||||
void *opaque)
|
void *opaque)
|
||||||
{
|
{
|
||||||
|
qemuDomainObjPrivatePtr priv;
|
||||||
virQEMUDriverPtr driver = opaque;
|
virQEMUDriverPtr driver = opaque;
|
||||||
virObjectEventPtr eventSource = NULL;
|
virObjectEventPtr eventSource = NULL;
|
||||||
virObjectEventPtr eventDevice = NULL;
|
virObjectEventPtr eventDevice = NULL;
|
||||||
@ -1492,11 +1493,13 @@ qemuProcessHandleBlockThreshold(qemuMonitorPtr mon G_GNUC_UNUSED,
|
|||||||
|
|
||||||
virObjectLock(vm);
|
virObjectLock(vm);
|
||||||
|
|
||||||
|
priv = vm->privateData;
|
||||||
|
|
||||||
VIR_DEBUG("BLOCK_WRITE_THRESHOLD event for block node '%s' in domain %p %s:"
|
VIR_DEBUG("BLOCK_WRITE_THRESHOLD event for block node '%s' in domain %p %s:"
|
||||||
"threshold '%llu' exceeded by '%llu'",
|
"threshold '%llu' exceeded by '%llu'",
|
||||||
nodename, vm, vm->def->name, threshold, excess);
|
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))
|
if (virStorageSourceIsLocalStorage(src))
|
||||||
path = src->path;
|
path = src->path;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user