This patch also adds support for addressing backing stores by index for
this API.
Signed-off-by: Jiri Denemark <jdenemar(a)redhat.com>
---
Notes:
- should probably be just squashed into the previous patch
src/qemu/qemu_driver.c | 17 ++++++++++++-----
1 file changed, 12 insertions(+), 5 deletions(-)
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 4ed1123..5910ac9 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -14865,6 +14865,8 @@ qemuDomainBlockJobImpl(virDomainObjPtr vm,
virObjectEventPtr event = NULL;
int idx;
virDomainDiskDefPtr disk;
+ virStorageSourcePtr baseSource = NULL;
+ unsigned int baseIndex = 0;
if (!virDomainObjIsActive(vm)) {
virReportError(VIR_ERR_OPERATION_INVALID, "%s",
@@ -14926,12 +14928,17 @@ qemuDomainBlockJobImpl(virDomainObjPtr vm,
goto endjob;
}
+ if (base &&
+ (virStorageFileParseChainIndex(disk->dst, base, &baseIndex) < 0 ||
+ !(baseSource = virStorageFileChainLookup(&disk->src,
+ disk->src.backingStore,
+ base, baseIndex, NULL))))
+ goto endjob;
+
qemuDomainObjEnterMonitor(driver, vm);
- /* XXX - libvirt should really be tracking the backing file chain
- * itself, and validating that base is on the chain, rather than
- * relying on qemu to do this. */
- ret = qemuMonitorBlockJob(priv->mon, device, base, bandwidth, info, mode,
- async);
+ ret = qemuMonitorBlockJob(priv->mon, device,
+ baseIndex ? baseSource->path : base,
+ bandwidth, info, mode, async);
qemuDomainObjExitMonitor(driver, vm);
if (ret < 0)
goto endjob;
--
1.9.2