From a3edda6b9eed7c5ea2518ba778a5fe3c19bbb239 Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Thu, 1 Jul 2021 16:03:57 +0200 Subject: [PATCH] qemu: Prevent two threshold events when it was registered with index Remember whether the user passed an explicit index when registering the event so that we can avoid the top level event when it isn't needed. Signed-off-by: Peter Krempa Reviewed-by: Michal Privoznik --- src/qemu/qemu_driver.c | 4 ++++ src/qemu/qemu_process.c | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 72f550bf8d..df44c3fbd0 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -19623,6 +19623,10 @@ qemuDomainSetBlockThreshold(virDomainPtr dom, if (qemuDomainObjExitMonitor(driver, vm) < 0 || rc < 0) goto endjob; + /* we need to remember whether the threshold was registered with an explicit + * index to fire the correct event */ + src->thresholdEventWithIndex = !!strchr(dev, '['); + ret = 0; endjob: diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 3693796b06..7487e12640 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -1487,7 +1487,8 @@ qemuProcessHandleBlockThreshold(qemuMonitor *mon G_GNUC_UNUSED, if (virStorageSourceIsLocalStorage(src)) path = src->path; - if (src == disk->src) { + if (src == disk->src && + !src->thresholdEventWithIndex) { g_autofree char *dev = qemuDomainDiskBackingStoreGetName(disk, 0); eventDevice = virDomainEventBlockThresholdNewFromObj(vm, dev, path,