From fe3df84a9c044bc2cb056f11c5460655d02cc9d8 Mon Sep 17 00:00:00 2001 From: Kristina Hanicova Date: Wed, 10 Aug 2022 14:57:01 +0200 Subject: [PATCH] hypervisor: domain_job: add maxQueuedJobs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This patch adds a new variable maxQueuedJobs into the job object as it is the last hypervisor-based part of the begin job. Since this patch, it will not be necessary to propagate driver structure into the job functions. Signed-off-by: Kristina Hanicova Reviewed-by: Ján Tomko Signed-off-by: Ján Tomko --- src/hypervisor/domain_job.h | 1 + src/qemu/qemu_domain.c | 3 +++ src/qemu/qemu_domainjob.c | 11 +++++------ 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/hypervisor/domain_job.h b/src/hypervisor/domain_job.h index 838cfd16e3..7f35d5ee85 100644 --- a/src/hypervisor/domain_job.h +++ b/src/hypervisor/domain_job.h @@ -155,6 +155,7 @@ struct _virDomainJobObj { virCond cond; /* Use to coordinate jobs */ int jobsQueued; + unsigned int maxQueuedJobs; /* The following members are for VIR_JOB_* */ virDomainJob active; /* currently running job */ diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 94b50420fe..7ac7c3c05a 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -1758,6 +1758,7 @@ static void * qemuDomainObjPrivateAlloc(void *opaque) { g_autoptr(qemuDomainObjPrivate) priv = g_new0(qemuDomainObjPrivate, 1); + g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(opaque); if (virDomainObjInitJob(&priv->job, &qemuPrivateJobCallbacks) < 0) { virReportSystemError(errno, "%s", @@ -1770,6 +1771,8 @@ qemuDomainObjPrivateAlloc(void *opaque) priv->blockjobs = virHashNew(virObjectUnref); + priv->job.maxQueuedJobs = cfg->maxQueuedJobs; + /* agent commands block by default, user can choose different behavior */ priv->agentTimeout = VIR_DOMAIN_AGENT_RESPONSE_TIMEOUT_BLOCK; priv->migMaxBandwidth = QEMU_DOMAIN_MIG_BANDWIDTH_MAX; diff --git a/src/qemu/qemu_domainjob.c b/src/qemu/qemu_domainjob.c index 11f30de136..0e1c7210c5 100644 --- a/src/qemu/qemu_domainjob.c +++ b/src/qemu/qemu_domainjob.c @@ -723,7 +723,7 @@ qemuDomainObjReleaseAsyncJob(virDomainObj *obj) * -1 otherwise. */ static int ATTRIBUTE_NONNULL(1) -qemuDomainObjBeginJobInternal(virQEMUDriver *driver, +qemuDomainObjBeginJobInternal(virQEMUDriver *driver G_GNUC_UNUSED, virDomainObj *obj, virDomainJob job, virDomainAgentJob agentJob, @@ -734,7 +734,6 @@ qemuDomainObjBeginJobInternal(virQEMUDriver *driver, unsigned long long now; unsigned long long then; bool nested = job == VIR_JOB_ASYNC_NESTED; - g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver); const char *blocker = NULL; const char *agentBlocker = NULL; int ret = -1; @@ -763,8 +762,8 @@ qemuDomainObjBeginJobInternal(virQEMUDriver *driver, retry: if (job != VIR_JOB_ASYNC && job != VIR_JOB_DESTROY && - cfg->maxQueuedJobs && - priv->job.jobsQueued > cfg->maxQueuedJobs) { + priv->job.maxQueuedJobs && + priv->job.jobsQueued > priv->job.maxQueuedJobs) { goto error; } @@ -907,8 +906,8 @@ qemuDomainObjBeginJobInternal(virQEMUDriver *driver, _("cannot acquire state change lock")); } ret = -2; - } else if (cfg->maxQueuedJobs && - priv->job.jobsQueued > cfg->maxQueuedJobs) { + } else if (priv->job.maxQueuedJobs && + priv->job.jobsQueued > priv->job.maxQueuedJobs) { if (blocker && agentBlocker) { virReportError(VIR_ERR_OPERATION_FAILED, _("cannot acquire state change "