On Thu, Aug 26, 2021 at 04:11:15PM +0200, Ján Tomko wrote:
On a Wednesday in 2021, Masayoshi Mizuma wrote:
> From: Masayoshi Mizuma <m.mizuma(a)jp.fujitsu.com>
>
> The VM is terminated abnormally when <transient shareBacking='yes'/>
> is set to the disk option and the qemu doesn't have set-action capability.
>
> # virsh start guest01
> error: Failed to start domain 'guest01'
> error: internal error: qemu unexpectedly closed the monitor
>
> #
>
> Add checking the capability before system_reset QMP command is sent
> so that the VM can stop correctly when the qemu doesn't have the cap.
>
From the commit message it's hard to see the connection between missing
QEMU_CAPS_SET_ACTION and not calling the system_reset command, since
the command was present long before set-action.
Is this the same issue?
https://listman.redhat.com/archives/libvir-list/2021-July/msg00119.html
I'm sorry I didn't make it clear enough. It's a similar issue, but it
isn't
the same issue. This patch tried to fix a new issue which was introduced
the lifecycle event series.
If I understand correctly, even after Peter's lifecycle event series
we cannot support the combination of:
* -no-reboot on the command line (which is still done for QEMUs without
SET_ACTION, i.e. older than 6.0)
* transient shareBacking disks
In that case, this can be rejected much sooner in qemuValidate, before
even trying to start the QEMU process.
That seems a great idea, thanks! I'll post the v2 to add check in the validation.
Like as follows:
diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c
index 8906aa52d9..47f12944aa 100644
--- a/src/qemu/qemu_validate.c
+++ b/src/qemu/qemu_validate.c
@@ -3033,6 +3033,13 @@ qemuValidateDomainDeviceDefDiskTransient(const virDomainDiskDef
*disk,
}
if (disk->transientShareBacking == VIR_TRISTATE_BOOL_YES) {
+ if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_SET_ACTION)) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+ _("transiend disk backing image sharing isn't supported
by this QEMU binary (%s)"),
+ disk->dst);
+ return -1;
+ }
+
/* sharing the backing file requires hotplug of the disk in the qemu driver */
switch (disk->bus) {
case VIR_DOMAIN_DISK_BUS_USB:
---
- Masa
> Signed-off-by: Masayoshi Mizuma <m.mizuma(a)jp.fujitsu.com>
> ---
> src/qemu/qemu_process.c | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
> index 3b4af61bf8..4bedd04679 100644
> --- a/src/qemu/qemu_process.c
> +++ b/src/qemu/qemu_process.c
> @@ -7010,6 +7010,9 @@ qemuProcessSetupDisksTransientHotplug(virDomainObj *vm,
> if (hasHotpluggedDisk) {
> int rc;
>
> + if (!(virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_SET_ACTION)))
The error message is missing.
Jano
> + return -1;
> +
> if (qemuDomainObjEnterMonitorAsync(priv->driver, vm, asyncJob) < 0)
> return -1;
>
> --
> 2.27.0
>