From 6cd6434ab5772a1b42cbacc02b894e51bc26056c Mon Sep 17 00:00:00 2001 Message-Id: <6cd6434ab5772a1b42cbacc02b894e51bc26056c@dist-git> From: Laine Stump Date: Thu, 11 Apr 2019 15:14:42 -0400 Subject: [PATCH] qemu_hotplug: pull qemuDomainUpdateDeviceList out of qemuDomainDetachDeviceLive qemuDomainDetachDeviceLive() is called from two places in qemu_driver.c, and qemuDomainUpdateDeviceList() is called from the end of qemuDomainDetachDeviceLive(), which is now in qemu_hotplug.c This patch replaces the single call to qemuDomainUpdateDeviceList() with two calls to it immediately after return from qemuDomainDetachDeviceLive(). This is only done if the return from that function is exactly 0, in order to exactly preserve previous behavior. Removing that one call from qemuDomainDetachDeviceList() will permit us to call it from the test driver hotplug test, replacing the separate calls to qemuDomainDetachDeviceDiskLive(), qemuDomainDetachChrDevice(), qemuDomainDetachShmemDevice() and qemuDomainDetachWatchdog(). We want to do this so that part of the common functionality of those three functions (and the rest of the device-specific Detach functions) can be pulled up into qemuDomainDetachDeviceLive() without breaking the test. (This is done in the next patch). NB: Almost certainly this is "not the best place" to call qemuDomainUpdateDeviceList() (actually, it is provably the *wrong* place), since it's purpose is to retrieve an "up to date" list of aliases for all devices from qemu, and if the guest OS hasn't yet processed the detach request, the now-being-removed device may still be on that list. It would arguably be better to instead call qemuDomainUpdateDevicesList() later during the response to the DEVICE_DELETED event for the device. But removing the call from the current point in the detach could have some unforeseen ill effect due to changed timing, so the change to move it into qemuDomainRemove*Device() will be done in a separate patch (in order to make it easily revertible in case it causes a regression). Signed-off-by: Laine Stump ACKed-by: Peter Krempa (cherry picked from commit b20494186578fb779547b714fff77f07e2ca03ea) Partially-Resolves: https://bugzilla.redhat.com/1658198 Signed-off-by: Laine Stump Signed-off-by: Laine Stump Message-Id: <20190411191453.24055-31-laine@redhat.com> Acked-by: Michal Privoznik --- src/qemu/qemu_driver.c | 14 ++++++++++++-- src/qemu/qemu_hotplug.c | 3 --- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 4cdc68a83a..e11f57a56a 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -8681,8 +8681,14 @@ qemuDomainDetachDeviceLiveAndConfig(virQEMUDriverPtr driver, } if (flags & VIR_DOMAIN_AFFECT_LIVE) { - if (qemuDomainDetachDeviceLive(vm, dev_copy, driver, false) < 0) + int rc; + + if ((rc = qemuDomainDetachDeviceLive(vm, dev_copy, driver, false)) < 0) goto cleanup; + + if (rc == 0 && qemuDomainUpdateDeviceList(driver, vm, QEMU_ASYNC_JOB_NONE) < 0) + goto cleanup; + /* * update domain status forcibly because the domain status may be * changed even if we failed to attach the device. For example, @@ -8759,11 +8765,15 @@ qemuDomainDetachDeviceAliasLiveAndConfig(virQEMUDriverPtr driver, if (def) { virDomainDeviceDef dev; + int rc; if (virDomainDefFindDevice(def, alias, &dev, true) < 0) goto cleanup; - if (qemuDomainDetachDeviceLive(vm, &dev, driver, true) < 0) + if ((rc = qemuDomainDetachDeviceLive(vm, &dev, driver, true)) < 0) + goto cleanup; + + if (rc == 0 && qemuDomainUpdateDeviceList(driver, vm, QEMU_ASYNC_JOB_NONE) < 0) goto cleanup; } diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index 1b15116a9f..fd78f4ca01 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -5714,9 +5714,6 @@ qemuDomainDetachDeviceLive(virDomainObjPtr vm, break; } - if (ret == 0) - ret = qemuDomainUpdateDeviceList(driver, vm, QEMU_ASYNC_JOB_NONE); - return ret; } -- 2.21.0