From 1a5e2a80981605936aa93cd078f2f3df194f626a Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Wed, 22 Feb 2017 17:51:05 +0100 Subject: [PATCH] qemu: domain: Add helper to lookup disk by node name Looks up a disk and its corresponding backing chain element by node name. --- src/qemu/qemu_domain.c | 43 ++++++++++++++++++++++++++++++++++++++++++ src/qemu/qemu_domain.h | 6 ++++++ 2 files changed, 49 insertions(+) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index f4636ed0b1..34f4d014ba 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -8515,3 +8515,46 @@ qemuDomainNamespaceTeardownRNG(virQEMUDriverPtr driver, cleanup: return ret; } + + +/** + * qemuDomainDiskLookupByNodename: + * @def: domain definition to look for the disk + * @nodename: block backend node name to find + * @src: filled with the specific backing store element if provided + * @idx: index of @src in the backing chain, if provided + * + * Looks up the disk in the domain via @nodename and returns its definition. + * Optionally fills @src and @idx if provided with the specific backing chain + * element which corresponds to the node name. + */ +virDomainDiskDefPtr +qemuDomainDiskLookupByNodename(virDomainDefPtr def, + const char *nodename, + virStorageSourcePtr *src, + unsigned int *idx) +{ + size_t i; + unsigned int srcindex; + virStorageSourcePtr tmp = NULL; + + if (!idx) + idx = &srcindex; + + if (src) + *src = NULL; + + *idx = 0; + + for (i = 0; i < def->ndisks; i++) { + if ((tmp = virStorageSourceFindByNodeName(def->disks[i]->src, + nodename, idx))) { + if (src) + *src = tmp; + + return def->disks[i]; + } + } + + return NULL; +} diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h index 1dd3b1c39a..efdf393486 100644 --- a/src/qemu/qemu_domain.h +++ b/src/qemu/qemu_domain.h @@ -877,4 +877,10 @@ int qemuDomainNamespaceSetupRNG(virQEMUDriverPtr driver, int qemuDomainNamespaceTeardownRNG(virQEMUDriverPtr driver, virDomainObjPtr vm, virDomainRNGDefPtr rng); + +virDomainDiskDefPtr qemuDomainDiskLookupByNodename(virDomainDefPtr def, + const char *nodename, + virStorageSourcePtr *src, + unsigned int *idx); + #endif /* __QEMU_DOMAIN_H__ */ -- GitLab