[PATCH] qemu: Fix guest-sync response time in qga command

The current implementation sets the guest-sync timeout to the smaller value between the default value (QEMU_AGENT_WAIT_TIME) and agent->timeout, without considering the timeout passed via the qga command. This patch enhances the guest-sync timeout logic to use the minimum value among the default value, agent->timeout, and the timeout passed via the qga command. Resolves: https://gitlab.com/libvirt/libvirt/-/issues/590 Signed-off-by: ray <honglei.wang@smartx.com> --- src/qemu/qemu_agent.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/qemu/qemu_agent.c b/src/qemu/qemu_agent.c index f9bcf38dfb..47d735dfa3 100644 --- a/src/qemu/qemu_agent.c +++ b/src/qemu/qemu_agent.c @@ -835,6 +835,7 @@ qemuAgentGuestSyncSend(qemuAgent *agent, /** * qemuAgentGuestSync: * @agent: agent object + * @seconds: qemu agent command timeout value * * Send guest-sync with unique ID * and wait for reply. If we get one, check if @@ -844,9 +845,9 @@ qemuAgentGuestSyncSend(qemuAgent *agent, * -1 otherwise */ static int -qemuAgentGuestSync(qemuAgent *agent) +qemuAgentGuestSync(qemuAgent *agent, int seconds) { - int timeout = VIR_DOMAIN_QEMU_AGENT_COMMAND_DEFAULT; + int timeout = QEMU_AGENT_WAIT_TIME; int rc; if (agent->inSync) @@ -854,9 +855,15 @@ qemuAgentGuestSync(qemuAgent *agent) /* if user specified a custom agent timeout that is lower than the * default timeout, use the shorter timeout instead */ - if ((agent->timeout >= 0) && (agent->timeout < QEMU_AGENT_WAIT_TIME)) + if ((agent->timeout >= 0) && (agent->timeout < timeout)) timeout = agent->timeout; + /* If user specified a timeout parameter smaller than both default + * value and agent->timeout in qga APIs(such as qemu-agent-command), + * use the parameter timeout value */ + if ((seconds >= 0) && (seconds < timeout)) + timeout = seconds; + if ((rc = qemuAgentGuestSyncSend(agent, timeout, true)) < 0) return -1; @@ -1022,7 +1029,7 @@ qemuAgentCommandFull(qemuAgent *agent, goto cleanup; } - if (qemuAgentGuestSync(agent) < 0) + if (qemuAgentGuestSync(agent, seconds) < 0) goto cleanup; if (!(cmdstr = virJSONValueToString(cmd, false))) -- 2.43.0

On 2/21/24 15:45, ray wrote:
The current implementation sets the guest-sync timeout to the smaller value between the default value (QEMU_AGENT_WAIT_TIME) and agent->timeout, without considering the timeout passed via the qga command.
This patch enhances the guest-sync timeout logic to use the minimum value among the default value, agent->timeout, and the timeout passed via the qga command.
Resolves: https://gitlab.com/libvirt/libvirt/-/issues/590 Signed-off-by: ray <honglei.wang@smartx.com> --- src/qemu/qemu_agent.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-)
Reviewed-by: Michal Privoznik <mprivozn@redhat.com> and merged. Congratulations on your first libvirt contribution! Michal
participants (2)
-
Michal Prívozník
-
ray