[GSoC][PATCH v4 5/8] qemu_domainjob: `qemuDomainJobPrivateJobCallbacks` structure nested

Prathamesh Chavan pc44800 at gmail.com
Wed Aug 26 06:09:39 UTC 2020


`qemuDomainJobPrivateJobCallbacks` structure was nested inside
`qemuDomainJobPrivateCallbacks` structure, so that in future
we may add generic callbacks that we can't really categorize
into the later callback structure.

Signed-off-by: Prathamesh Chavan <pc44800 at gmail.com>
---
 src/qemu/qemu_domain.c    |  8 ++++++--
 src/qemu/qemu_domainjob.c | 40 +++++++++++++++++++--------------------
 src/qemu/qemu_domainjob.h | 39 ++++++++++++++++++++++----------------
 3 files changed, 49 insertions(+), 38 deletions(-)

diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index d64c262971..82638cfcd9 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -806,7 +806,7 @@ qemuDomainGetMaxQueuedJobs(virDomainObjPtr vm)
     return cfg->maxQueuedJobs;
 }
 
-static qemuDomainObjPrivateJobCallbacks qemuPrivateJobCallbacks = {
+static qemuDomainJobPrivateJobCallbacks qemuJobPrivateJobCallbacks = {
     .allocJobPrivate = qemuJobAllocPrivate,
     .freeJobPrivate = qemuJobFreePrivate,
     .resetJobPrivate = qemuJobResetPrivate,
@@ -820,6 +820,10 @@ static qemuDomainObjPrivateJobCallbacks qemuPrivateJobCallbacks = {
     .getMaxQueuedJobs = qemuDomainGetMaxQueuedJobs,
 };
 
+static qemuDomainJobPrivateCallbacks qemuJobPrivateCallbacks = {
+    .jobcb = &qemuJobPrivateJobCallbacks,
+};
+
 /**
  * qemuDomainObjFromDomain:
  * @domain: Domain pointer that has to be looked up
@@ -2271,7 +2275,7 @@ qemuDomainObjPrivateAlloc(void *opaque)
     if (VIR_ALLOC(priv) < 0)
         return NULL;
 
-    if (qemuDomainObjInitJob(&priv->job, &qemuPrivateJobCallbacks) < 0) {
+    if (qemuDomainObjInitJob(&priv->job, &qemuJobPrivateCallbacks) < 0) {
         virReportSystemError(errno, "%s",
                              _("Unable to init qemu driver mutexes"));
         goto error;
diff --git a/src/qemu/qemu_domainjob.c b/src/qemu/qemu_domainjob.c
index dbc9c06d33..6405a6ffc1 100644
--- a/src/qemu/qemu_domainjob.c
+++ b/src/qemu/qemu_domainjob.c
@@ -117,21 +117,21 @@ qemuDomainAsyncJobPhaseFromString(qemuDomainAsyncJob job,
 
 int
 qemuDomainObjInitJob(qemuDomainJobObjPtr job,
-                     qemuDomainObjPrivateJobCallbacksPtr cb)
+                     qemuDomainJobPrivateCallbacksPtr cb)
 {
     memset(job, 0, sizeof(*job));
     job->cb = cb;
 
-    if (!(job->privateData = job->cb->allocJobPrivate()))
+    if (!(job->privateData = job->cb->jobcb->allocJobPrivate()))
         return -1;
 
     if (virCondInit(&job->cond) < 0) {
-        job->cb->freeJobPrivate(job->privateData);
+        job->cb->jobcb->freeJobPrivate(job->privateData);
         return -1;
     }
 
     if (virCondInit(&job->asyncCond) < 0) {
-        job->cb->freeJobPrivate(job->privateData);
+        job->cb->jobcb->freeJobPrivate(job->privateData);
         virCondDestroy(&job->cond);
         return -1;
     }
@@ -171,7 +171,7 @@ qemuDomainObjResetAsyncJob(qemuDomainJobObjPtr job)
     job->mask = QEMU_JOB_DEFAULT_MASK;
     job->abortJob = false;
     VIR_FREE(job->error);
-    job->cb->resetJobPrivate(job->privateData);
+    job->cb->jobcb->resetJobPrivate(job->privateData);
     job->apiFlags = 0;
 }
 
@@ -190,7 +190,7 @@ qemuDomainObjRestoreJob(virDomainObjPtr obj,
     job->privateData = g_steal_pointer(&priv->job.privateData);
     job->apiFlags = priv->job.apiFlags;
 
-    if (!(priv->job.privateData = priv->job.cb->allocJobPrivate()))
+    if (!(priv->job.privateData = priv->job.cb->jobcb->allocJobPrivate()))
         return -1;
     job->cb = priv->job.cb;
 
@@ -204,7 +204,7 @@ qemuDomainObjFreeJob(qemuDomainJobObjPtr job)
 {
     qemuDomainObjResetJob(job);
     qemuDomainObjResetAsyncJob(job);
-    job->cb->freeJobPrivate(job->privateData);
+    job->cb->jobcb->freeJobPrivate(job->privateData);
     virCondDestroy(&job->cond);
     virCondDestroy(&job->asyncCond);
 }
@@ -364,13 +364,13 @@ qemuDomainObjBeginJobInternal(virQEMUDriverPtr driver,
     if (virTimeMillisNow(&now) < 0)
         return -1;
 
-    priv->job.cb->increaseJobsQueued(obj);
+    priv->job.cb->jobcb->increaseJobsQueued(obj);
     then = now + QEMU_JOB_WAIT_TIME;
 
  retry:
     if ((!async && job != QEMU_JOB_DESTROY) &&
-        priv->job.cb->getMaxQueuedJobs(obj) &&
-        priv->job.cb->getJobsQueued(obj) > priv->job.cb->getMaxQueuedJobs(obj)) {
+        priv->job.cb->jobcb->getMaxQueuedJobs(obj) &&
+        priv->job.cb->jobcb->getJobsQueued(obj) > priv->job.cb->jobcb->getMaxQueuedJobs(obj)) {
         goto error;
     }
 
@@ -416,7 +416,7 @@ qemuDomainObjBeginJobInternal(virQEMUDriverPtr driver,
                       qemuDomainAsyncJobTypeToString(asyncJob),
                       obj, obj->def->name);
             qemuDomainObjResetAsyncJob(&priv->job);
-            priv->job.cb->currentJobInfoInit(&priv->job, now);
+            priv->job.cb->jobcb->currentJobInfoInit(&priv->job, now);
             priv->job.asyncJob = asyncJob;
             priv->job.asyncOwner = virThreadSelfID();
             priv->job.asyncOwnerAPI = virThreadJobGet();
@@ -500,8 +500,8 @@ qemuDomainObjBeginJobInternal(virQEMUDriverPtr driver,
                            _("cannot acquire state change lock"));
         }
         ret = -2;
-    } else if (priv->job.cb->getMaxQueuedJobs(obj) &&
-               priv->job.cb->getJobsQueued(obj) > priv->job.cb->getMaxQueuedJobs(obj)) {
+    } else if (priv->job.cb->jobcb->getMaxQueuedJobs(obj) &&
+               priv->job.cb->jobcb->getJobsQueued(obj) > priv->job.cb->jobcb->getMaxQueuedJobs(obj)) {
         if (blocker && agentBlocker) {
             virReportError(VIR_ERR_OPERATION_FAILED,
                            _("cannot acquire state change "
@@ -531,7 +531,7 @@ qemuDomainObjBeginJobInternal(virQEMUDriverPtr driver,
     }
 
  cleanup:
-    priv->job.cb->decreaseJobsQueued(obj);
+    priv->job.cb->jobcb->decreaseJobsQueued(obj);
     return ret;
 }
 
@@ -586,7 +586,7 @@ int qemuDomainObjBeginAsyncJob(virQEMUDriverPtr driver,
         return -1;
 
     priv = obj->privateData;
-    priv->job.cb->setJobInfoOperation(&priv->job, operation);
+    priv->job.cb->jobcb->setJobInfoOperation(&priv->job, operation);
     priv->job.apiFlags = apiFlags;
     return 0;
 }
@@ -652,7 +652,7 @@ qemuDomainObjEndJob(virQEMUDriverPtr driver, virDomainObjPtr obj)
     qemuDomainObjPrivatePtr priv = obj->privateData;
     qemuDomainJob job = priv->job.active;
 
-    priv->job.cb->decreaseJobsQueued(obj);
+    priv->job.cb->jobcb->decreaseJobsQueued(obj);
 
     VIR_DEBUG("Stopping job: %s (async=%s vm=%p name=%s)",
               qemuDomainJobTypeToString(job),
@@ -673,7 +673,7 @@ qemuDomainObjEndAgentJob(virDomainObjPtr obj)
     qemuDomainObjPrivatePtr priv = obj->privateData;
     qemuDomainAgentJob agentJob = priv->job.agentActive;
 
-    priv->job.cb->decreaseJobsQueued(obj);
+    priv->job.cb->jobcb->decreaseJobsQueued(obj);
 
     VIR_DEBUG("Stopping agent job: %s (async=%s vm=%p name=%s)",
               qemuDomainAgentJobTypeToString(agentJob),
@@ -691,7 +691,7 @@ qemuDomainObjEndAsyncJob(virQEMUDriverPtr driver, virDomainObjPtr obj)
 {
     qemuDomainObjPrivatePtr priv = obj->privateData;
 
-    priv->job.cb->decreaseJobsQueued(obj);
+    priv->job.cb->jobcb->decreaseJobsQueued(obj);
 
     VIR_DEBUG("Stopping async job: %s (vm=%p name=%s)",
               qemuDomainAsyncJobTypeToString(priv->job.asyncJob),
@@ -744,7 +744,7 @@ qemuDomainObjPrivateXMLFormatJob(virBufferPtr buf,
     if (priv->job.asyncJob != QEMU_ASYNC_JOB_NONE)
         virBufferAsprintf(&attrBuf, " flags='0x%lx'", priv->job.apiFlags);
 
-    if (priv->job.cb->formatJob(&childBuf, &priv->job, vm) < 0)
+    if (priv->job.cb->jobcb->formatJob(&childBuf, &priv->job, vm) < 0)
         return -1;
 
     virXMLFormatElement(buf, "job", &attrBuf, &childBuf);
@@ -804,7 +804,7 @@ qemuDomainObjPrivateXMLParseJob(virDomainObjPtr vm,
         return -1;
     }
 
-    if (priv->job.cb->parseJob(ctxt, job, vm) < 0)
+    if (priv->job.cb->jobcb->parseJob(ctxt, job, vm) < 0)
         return -1;
 
     return 0;
diff --git a/src/qemu/qemu_domainjob.h b/src/qemu/qemu_domainjob.h
index f3d9218ec0..211503b439 100644
--- a/src/qemu/qemu_domainjob.h
+++ b/src/qemu/qemu_domainjob.h
@@ -118,20 +118,27 @@ typedef void (*qemuDomainObjIncreaseJobsQueued)(virDomainObjPtr);
 typedef void (*qemuDomainObjDecreaseJobsQueued)(virDomainObjPtr);
 typedef int (*qemuDomainObjGetMaxQueuedJobs)(virDomainObjPtr);
 
-typedef struct _qemuDomainObjPrivateJobCallbacks qemuDomainObjPrivateJobCallbacks;
-typedef qemuDomainObjPrivateJobCallbacks *qemuDomainObjPrivateJobCallbacksPtr;
-struct _qemuDomainObjPrivateJobCallbacks {
-   qemuDomainObjPrivateJobAlloc allocJobPrivate;
-   qemuDomainObjPrivateJobFree freeJobPrivate;
-   qemuDomainObjPrivateJobReset resetJobPrivate;
-   qemuDomainObjPrivateJobFormat formatJob;
-   qemuDomainObjPrivateJobParse parseJob;
-   qemuDomainObjJobInfoSetOperation setJobInfoOperation;
-   qemuDomainObjCurrentJobInfoInit currentJobInfoInit;
-   qemuDomainObjGetJobsQueued getJobsQueued;
-   qemuDomainObjIncreaseJobsQueued increaseJobsQueued;
-   qemuDomainObjDecreaseJobsQueued decreaseJobsQueued;
-   qemuDomainObjGetMaxQueuedJobs getMaxQueuedJobs;
+typedef struct _qemuDomainJobPrivateJobCallbacks qemuDomainJobPrivateJobCallbacks;
+typedef qemuDomainJobPrivateJobCallbacks *qemuDomainJobPrivateJobCallbacksPtr;
+struct _qemuDomainJobPrivateJobCallbacks {
+    qemuDomainObjPrivateJobAlloc allocJobPrivate;
+    qemuDomainObjPrivateJobFree freeJobPrivate;
+    qemuDomainObjPrivateJobReset resetJobPrivate;
+    qemuDomainObjPrivateJobFormat formatJob;
+    qemuDomainObjPrivateJobParse parseJob;
+    qemuDomainObjJobInfoSetOperation setJobInfoOperation;
+    qemuDomainObjCurrentJobInfoInit currentJobInfoInit;
+    qemuDomainObjGetJobsQueued getJobsQueued;
+    qemuDomainObjIncreaseJobsQueued increaseJobsQueued;
+    qemuDomainObjDecreaseJobsQueued decreaseJobsQueued;
+    qemuDomainObjGetMaxQueuedJobs getMaxQueuedJobs;
+};
+
+typedef struct _qemuDomainJobPrivateCallbacks qemuDomainJobPrivateCallbacks;
+typedef qemuDomainJobPrivateCallbacks *qemuDomainJobPrivateCallbacksPtr;
+struct _qemuDomainJobPrivateCallbacks {
+    /* Job related callbacks */
+    qemuDomainJobPrivateJobCallbacksPtr jobcb;
 };
 
 struct _qemuDomainJobObj {
@@ -162,7 +169,7 @@ struct _qemuDomainJobObj {
     unsigned long apiFlags; /* flags passed to the API which started the async job */
 
     void *privateData;                  /* job specific collection of data */
-    qemuDomainObjPrivateJobCallbacksPtr cb;
+    qemuDomainJobPrivateCallbacksPtr cb;
 };
 
 const char *qemuDomainAsyncJobPhaseToString(qemuDomainAsyncJob job,
@@ -216,7 +223,7 @@ void qemuDomainObjFreeJob(qemuDomainJobObjPtr job);
 
 int
 qemuDomainObjInitJob(qemuDomainJobObjPtr job,
-                     qemuDomainObjPrivateJobCallbacksPtr cb);
+                     qemuDomainJobPrivateCallbacksPtr cb);
 
 bool qemuDomainJobAllowed(qemuDomainJobObjPtr jobs, qemuDomainJob newJob);
 
-- 
2.25.1




More information about the libvir-list mailing list