From nobody Sat Feb 7 15:11:46 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 207.211.31.120 as permitted sender) client-ip=207.211.31.120; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-1.mimecast.com; Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 207.211.31.120 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1597640887; cv=none; d=zohomail.com; s=zohoarc; b=bNNz1akXMWJZye7JGc2yY6woHUKH4S1EKwYHYq1GlLIGn3FH8VJVAY1ioIsfiyDNjXHcJVtGNnz5hbA7HxJ/z8r+YR1VAMeSLyEe7RkexO4whWMCDXJ7Sq9sLGCTAn/FkiCPBAltI+eRl8zUsvgFz6rattnK6K8/lhRpHfrJBWA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1597640887; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=c7WmzbSEaQ01dfDdwEQPsyfAI9JB8GFS2xEVLWCvd4U=; b=D/f0yziguE6YEAlHWYHkaLf5G0AlwBmBPVXr6eWlOXu79t8xdYWK/uEtk3+jpVjSh8iIUa7cEPdMoc74QmoTZ2ORuO57lbsWnpn79P5TYK8xEE8UacjD0ts6bw1d311qJDhI71Fj9Bk90C2WOrgoguxoDPBRLbBmhfbChMsVNaE= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 207.211.31.120 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from us-smtp-1.mimecast.com (us-smtp-delivery-1.mimecast.com [207.211.31.120]) by mx.zohomail.com with SMTPS id 1597640887578695.6552920203134; Sun, 16 Aug 2020 22:08:07 -0700 (PDT) Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-245-_AraQnHEP6-RvTXBPts5DQ-1; Mon, 17 Aug 2020 01:08:04 -0400 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id D422581F01B; Mon, 17 Aug 2020 05:07:56 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id AF02421E8F; Mon, 17 Aug 2020 05:07:56 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 7D3E74EE3A; Mon, 17 Aug 2020 05:07:56 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 07H57tHx021808 for ; Mon, 17 Aug 2020 01:07:55 -0400 Received: by smtp.corp.redhat.com (Postfix) id 2A3755EDD4; Mon, 17 Aug 2020 05:07:55 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast01.extmail.prod.ext.rdu2.redhat.com [10.11.55.17]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 2590A5F266 for ; Mon, 17 Aug 2020 05:07:52 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-delivery-1.mimecast.com [205.139.110.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 5448489CD4A for ; Mon, 17 Aug 2020 05:07:52 +0000 (UTC) Received: from mail-pj1-f41.google.com (mail-pj1-f41.google.com [209.85.216.41]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-354-uhlmKFmQNVeBn2AH7C0Kww-1; Mon, 17 Aug 2020 01:07:49 -0400 Received: by mail-pj1-f41.google.com with SMTP id t6so7133006pjr.0 for ; Sun, 16 Aug 2020 22:07:49 -0700 (PDT) Received: from localhost.localdomain ([125.99.150.200]) by smtp.gmail.com with ESMTPSA id s64sm18091678pfs.111.2020.08.16.22.07.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 16 Aug 2020 22:07:47 -0700 (PDT) X-MC-Unique: _AraQnHEP6-RvTXBPts5DQ-1 X-MC-Unique: uhlmKFmQNVeBn2AH7C0Kww-1 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=c7WmzbSEaQ01dfDdwEQPsyfAI9JB8GFS2xEVLWCvd4U=; b=ik2K0Qh4T7wOQgoweicClMifQkouZqqkF6oZ674c7exX9N3vq7Xynd/cpo/Fc343HC aIeRb9TinQfd5j/HR6ZLWlVSDhas8+b0caSjKnp8vAMsKD8SXgwd0LsHhTIIwVnEf9nx PsfNbDHLiqlPvFVh6OwuJc8VTYixCnbcWl7CAQxdhl77wU8PXhXTJoL6jq2tEFMWyNcO /T9N/sLQf12EJrp8q1kTlrtM+kf3DoO8nWmvo/J+irJss28tzMi2N4SJnCwEjBmZXb/5 vv32U6oo8S24gy+2fF7SmMKhyDOiO9dhkwxc8deXoXQb2p6mgFM9gqvX8Zq2neo1GVTZ rADg== X-Gm-Message-State: AOAM5330nux2uEJlmeoO4kqYUsrC8Q0jMXAc+eCbkgaUpKo1URXI6ePY hW3TIRra11a7Em134NoS9UQbYmAq+Ny1cw== X-Google-Smtp-Source: ABdhPJxC6GshsKhRsMmirCi0Q0yjO3Nrt0xM5vmQ7pAqRx0WrjMQP2HLS5kjMhskxUft9gKo41URiw== X-Received: by 2002:a17:902:c081:: with SMTP id j1mr9785217pld.136.1597640868076; Sun, 16 Aug 2020 22:07:48 -0700 (PDT) From: Prathamesh Chavan To: libvir-list@redhat.com Subject: [GSoC][PATCH v2 6/6] qemu_domainjob: remove dependency on `qemuDomainDiskPrivatePtr` Date: Mon, 17 Aug 2020 10:37:21 +0530 Message-Id: <20200817050721.7063-7-pc44800@gmail.com> In-Reply-To: <20200817050721.7063-1-pc44800@gmail.com> References: <20200817050721.7063-1-pc44800@gmail.com> MIME-Version: 1.0 X-Mimecast-Impersonation-Protect: Policy=CLT - Impersonation Protection Definition; Similar Internal Domain=false; Similar Monitored External Domain=false; Custom External Domain=false; Mimecast External Domain=false; Newly Observed Domain=false; Internal User Name=false; Custom Display Name List=false; Reply-to Address Mismatch=false; Targeted Threat Dictionary=false; Mimecast Threat Dictionary=false; Custom Threat Dictionary=false; X-Scanned-By: MIMEDefang 2.79 on 10.11.54.5 X-loop: libvir-list@redhat.com Cc: Prathamesh Chavan X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0.002 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Dependency on qemu-specific `diskPrivatePtr` was removed by moving the funcitons `qemuDomainObjPrivateXMLParseJobNBD` and `qemuDomainObjPrivateXMLFormatNBDMigration` to `qemu_domain`, and moving their calls inside the `parseJob` and `formatJob` callback functions. Signed-off-by: Prathamesh Chavan Reviewed-by: Erik Skultety --- src/qemu/qemu_domain.c | 150 ++++++++++++++++++++++++++++++++++++- src/qemu/qemu_domainjob.c | 152 +------------------------------------- src/qemu/qemu_domainjob.h | 6 +- 3 files changed, 155 insertions(+), 153 deletions(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 677fa7ea91..615a8a293c 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -562,12 +562,70 @@ qemuJobResetPrivate(void *opaque) } =20 =20 +static int +qemuDomainObjPrivateXMLFormatNBDMigrationSource(virBufferPtr buf, + virStorageSourcePtr src, + virDomainXMLOptionPtr xmlo= pt) +{ + g_auto(virBuffer) attrBuf =3D VIR_BUFFER_INITIALIZER; + g_auto(virBuffer) childBuf =3D VIR_BUFFER_INIT_CHILD(buf); + + virBufferAsprintf(&attrBuf, " type=3D'%s' format=3D'%s'", + virStorageTypeToString(src->type), + virStorageFileFormatTypeToString(src->format)); + + if (virDomainDiskSourceFormat(&childBuf, src, "source", 0, false, + VIR_DOMAIN_DEF_FORMAT_STATUS, + false, false, xmlopt) < 0) + return -1; + + virXMLFormatElement(buf, "migrationSource", &attrBuf, &childBuf); + + return 0; +} + + +static int +qemuDomainObjPrivateXMLFormatNBDMigration(virBufferPtr buf, + virDomainObjPtr vm) +{ + qemuDomainObjPrivatePtr priv =3D vm->privateData; + size_t i; + virDomainDiskDefPtr disk; + qemuDomainDiskPrivatePtr diskPriv; + + for (i =3D 0; i < vm->def->ndisks; i++) { + g_auto(virBuffer) attrBuf =3D VIR_BUFFER_INITIALIZER; + g_auto(virBuffer) childBuf =3D VIR_BUFFER_INIT_CHILD(buf); + disk =3D vm->def->disks[i]; + diskPriv =3D QEMU_DOMAIN_DISK_PRIVATE(disk); + + virBufferAsprintf(&attrBuf, " dev=3D'%s' migrating=3D'%s'", + disk->dst, diskPriv->migrating ? "yes" : "no"); + + if (diskPriv->migrSource && + qemuDomainObjPrivateXMLFormatNBDMigrationSource(&childBuf, + diskPriv->migr= Source, + priv->driver->= xmlopt) < 0) + return -1; + + virXMLFormatElement(buf, "disk", &attrBuf, &childBuf); + } + + return 0; +} + static int qemuDomainFormatJobPrivate(virBufferPtr buf, - qemuDomainJobObjPtr job) + qemuDomainJobObjPtr job, + virDomainObjPtr vm) { qemuDomainJobPrivatePtr priv =3D job->privateData; =20 + if (job->asyncJob =3D=3D QEMU_ASYNC_JOB_MIGRATION_OUT && + qemuDomainObjPrivateXMLFormatNBDMigration(buf, vm) < 0) + return -1; + if (priv->migParams) qemuMigrationParamsFormat(buf, priv->migParams); =20 @@ -617,12 +675,100 @@ qemuDomainEventEmitJobCompleted(virQEMUDriverPtr dri= ver, virObjectEventStateQueue(driver->domainEventState, event); } =20 +static int +qemuDomainObjPrivateXMLParseJobNBDSource(xmlNodePtr node, + xmlXPathContextPtr ctxt, + virDomainDiskDefPtr disk, + virDomainXMLOptionPtr xmlopt) +{ + VIR_XPATH_NODE_AUTORESTORE(ctxt); + qemuDomainDiskPrivatePtr diskPriv =3D QEMU_DOMAIN_DISK_PRIVATE(disk); + g_autofree char *format =3D NULL; + g_autofree char *type =3D NULL; + g_autoptr(virStorageSource) migrSource =3D NULL; + xmlNodePtr sourceNode; + + ctxt->node =3D node; + + if (!(ctxt->node =3D virXPathNode("./migrationSource", ctxt))) + return 0; + + if (!(type =3D virXMLPropString(ctxt->node, "type"))) { + virReportError(VIR_ERR_XML_ERROR, "%s", + _("missing storage source type")); + return -1; + } + + if (!(format =3D virXMLPropString(ctxt->node, "format"))) { + virReportError(VIR_ERR_XML_ERROR, "%s", + _("missing storage source format")); + return -1; + } + + if (!(migrSource =3D virDomainStorageSourceParseBase(type, format, NUL= L))) + return -1; + + /* newer libvirt uses the subelement instead of formatting the + * source directly into */ + if ((sourceNode =3D virXPathNode("./source", ctxt))) + ctxt->node =3D sourceNode; + + if (virDomainStorageSourceParse(ctxt->node, ctxt, migrSource, + VIR_DOMAIN_DEF_PARSE_STATUS, xmlopt) <= 0) + return -1; + + diskPriv->migrSource =3D g_steal_pointer(&migrSource); + return 0; +} + + +static int +qemuDomainObjPrivateXMLParseJobNBD(virDomainObjPtr vm, + xmlXPathContextPtr ctxt) +{ + qemuDomainObjPrivatePtr priv =3D vm->privateData; + g_autofree xmlNodePtr *nodes =3D NULL; + size_t i; + int n; + + if ((n =3D virXPathNodeSet("./disk[@migrating=3D'yes']", ctxt, &nodes)= ) < 0) + return -1; + + if (n > 0) { + if (priv->job.asyncJob !=3D QEMU_ASYNC_JOB_MIGRATION_OUT) { + VIR_WARN("Found disks marked for migration but we were not " + "migrating"); + n =3D 0; + } + for (i =3D 0; i < n; i++) { + virDomainDiskDefPtr disk; + g_autofree char *dst =3D NULL; + + if ((dst =3D virXMLPropString(nodes[i], "dev")) && + (disk =3D virDomainDiskByTarget(vm->def, dst))) { + QEMU_DOMAIN_DISK_PRIVATE(disk)->migrating =3D true; + + if (qemuDomainObjPrivateXMLParseJobNBDSource(nodes[i], ctx= t, + disk, + priv->driver-= >xmlopt) < 0) + return -1; + } + } + } + + return 0; +} + static int qemuDomainParseJobPrivate(xmlXPathContextPtr ctxt, - qemuDomainJobObjPtr job) + qemuDomainJobObjPtr job, + virDomainObjPtr vm) { qemuDomainJobPrivatePtr priv =3D job->privateData; =20 + if (qemuDomainObjPrivateXMLParseJobNBD(vm, ctxt) < 0) + return -1; + if (qemuMigrationParamsParse(ctxt, &priv->migParams) < 0) return -1; =20 diff --git a/src/qemu/qemu_domainjob.c b/src/qemu/qemu_domainjob.c index 18abc0d986..ae4ac9e0c1 100644 --- a/src/qemu/qemu_domainjob.c +++ b/src/qemu/qemu_domainjob.c @@ -19,7 +19,7 @@ #include =20 #include "qemu_domain.h" -#include "qemu_migration.h" +#include "virmigration.h" #include "qemu_domainjob.h" #include "viralloc.h" #include "virlog.h" @@ -717,66 +717,11 @@ qemuDomainObjAbortAsyncJob(virDomainObjPtr obj) virDomainObjBroadcast(obj); } =20 - -static int -qemuDomainObjPrivateXMLFormatNBDMigrationSource(virBufferPtr buf, - virStorageSourcePtr src, - virDomainXMLOptionPtr xmlo= pt) -{ - g_auto(virBuffer) attrBuf =3D VIR_BUFFER_INITIALIZER; - g_auto(virBuffer) childBuf =3D VIR_BUFFER_INIT_CHILD(buf); - - virBufferAsprintf(&attrBuf, " type=3D'%s' format=3D'%s'", - virStorageTypeToString(src->type), - virStorageFileFormatTypeToString(src->format)); - - if (virDomainDiskSourceFormat(&childBuf, src, "source", 0, false, - VIR_DOMAIN_DEF_FORMAT_STATUS, - false, false, xmlopt) < 0) - return -1; - - virXMLFormatElement(buf, "migrationSource", &attrBuf, &childBuf); - - return 0; -} - - -static int -qemuDomainObjPrivateXMLFormatNBDMigration(virBufferPtr buf, - virDomainObjPtr vm) -{ - qemuDomainObjPrivatePtr priv =3D vm->privateData; - size_t i; - virDomainDiskDefPtr disk; - qemuDomainDiskPrivatePtr diskPriv; - - for (i =3D 0; i < vm->def->ndisks; i++) { - g_auto(virBuffer) attrBuf =3D VIR_BUFFER_INITIALIZER; - g_auto(virBuffer) childBuf =3D VIR_BUFFER_INIT_CHILD(buf); - disk =3D vm->def->disks[i]; - diskPriv =3D QEMU_DOMAIN_DISK_PRIVATE(disk); - - virBufferAsprintf(&attrBuf, " dev=3D'%s' migrating=3D'%s'", - disk->dst, diskPriv->migrating ? "yes" : "no"); - - if (diskPriv->migrSource && - qemuDomainObjPrivateXMLFormatNBDMigrationSource(&childBuf, - diskPriv->migr= Source, - priv->driver->= xmlopt) < 0) - return -1; - - virXMLFormatElement(buf, "disk", &attrBuf, &childBuf); - } - - return 0; -} - int qemuDomainObjPrivateXMLFormatJob(virBufferPtr buf, virDomainObjPtr vm) { qemuDomainObjPrivatePtr priv =3D vm->privateData; - qemuDomainJobObjPtr jobObj =3D &priv->job; g_auto(virBuffer) attrBuf =3D VIR_BUFFER_INITIALIZER; g_auto(virBuffer) childBuf =3D VIR_BUFFER_INIT_CHILD(buf); qemuDomainJob job =3D priv->job.active; @@ -801,11 +746,7 @@ qemuDomainObjPrivateXMLFormatJob(virBufferPtr buf, if (priv->job.asyncJob !=3D QEMU_ASYNC_JOB_NONE) virBufferAsprintf(&attrBuf, " flags=3D'0x%lx'", priv->job.apiFlags= ); =20 - if (priv->job.asyncJob =3D=3D QEMU_ASYNC_JOB_MIGRATION_OUT && - qemuDomainObjPrivateXMLFormatNBDMigration(&childBuf, vm) < 0) - return -1; - - if (jobObj->cb->formatJob(&childBuf, jobObj) < 0) + if (priv->job.cb->formatJob(&childBuf, &priv->job, vm) < 0) return -1; =20 virXMLFormatElement(buf, "job", &attrBuf, &childBuf); @@ -814,90 +755,6 @@ qemuDomainObjPrivateXMLFormatJob(virBufferPtr buf, } =20 =20 -static int -qemuDomainObjPrivateXMLParseJobNBDSource(xmlNodePtr node, - xmlXPathContextPtr ctxt, - virDomainDiskDefPtr disk, - virDomainXMLOptionPtr xmlopt) -{ - VIR_XPATH_NODE_AUTORESTORE(ctxt); - qemuDomainDiskPrivatePtr diskPriv =3D QEMU_DOMAIN_DISK_PRIVATE(disk); - g_autofree char *format =3D NULL; - g_autofree char *type =3D NULL; - g_autoptr(virStorageSource) migrSource =3D NULL; - xmlNodePtr sourceNode; - - ctxt->node =3D node; - - if (!(ctxt->node =3D virXPathNode("./migrationSource", ctxt))) - return 0; - - if (!(type =3D virXMLPropString(ctxt->node, "type"))) { - virReportError(VIR_ERR_XML_ERROR, "%s", - _("missing storage source type")); - return -1; - } - - if (!(format =3D virXMLPropString(ctxt->node, "format"))) { - virReportError(VIR_ERR_XML_ERROR, "%s", - _("missing storage source format")); - return -1; - } - - if (!(migrSource =3D virDomainStorageSourceParseBase(type, format, NUL= L))) - return -1; - - /* newer libvirt uses the subelement instead of formatting the - * source directly into */ - if ((sourceNode =3D virXPathNode("./source", ctxt))) - ctxt->node =3D sourceNode; - - if (virDomainStorageSourceParse(ctxt->node, ctxt, migrSource, - VIR_DOMAIN_DEF_PARSE_STATUS, xmlopt) <= 0) - return -1; - - diskPriv->migrSource =3D g_steal_pointer(&migrSource); - return 0; -} - - -static int -qemuDomainObjPrivateXMLParseJobNBD(virDomainObjPtr vm, - xmlXPathContextPtr ctxt) -{ - qemuDomainObjPrivatePtr priv =3D vm->privateData; - g_autofree xmlNodePtr *nodes =3D NULL; - size_t i; - int n; - - if ((n =3D virXPathNodeSet("./disk[@migrating=3D'yes']", ctxt, &nodes)= ) < 0) - return -1; - - if (n > 0) { - if (priv->job.asyncJob !=3D QEMU_ASYNC_JOB_MIGRATION_OUT) { - VIR_WARN("Found disks marked for migration but we were not " - "migrating"); - n =3D 0; - } - for (i =3D 0; i < n; i++) { - virDomainDiskDefPtr disk; - g_autofree char *dst =3D NULL; - - if ((dst =3D virXMLPropString(nodes[i], "dev")) && - (disk =3D virDomainDiskByTarget(vm->def, dst))) { - QEMU_DOMAIN_DISK_PRIVATE(disk)->migrating =3D true; - - if (qemuDomainObjPrivateXMLParseJobNBDSource(nodes[i], ctx= t, - disk, - priv->driver-= >xmlopt) < 0) - return -1; - } - } - } - - return 0; -} - int qemuDomainObjPrivateXMLParseJob(virDomainObjPtr vm, xmlXPathContextPtr ctxt) @@ -949,10 +806,7 @@ qemuDomainObjPrivateXMLParseJob(virDomainObjPtr vm, return -1; } =20 - if (qemuDomainObjPrivateXMLParseJobNBD(vm, ctxt) < 0) - return -1; - - if (job->cb->parseJob(ctxt, job) < 0) + if (priv->job.cb->parseJob(ctxt, job, vm) < 0) return -1; =20 return 0; diff --git a/src/qemu/qemu_domainjob.h b/src/qemu/qemu_domainjob.h index c5f68ca778..8f3dfbcf1e 100644 --- a/src/qemu/qemu_domainjob.h +++ b/src/qemu/qemu_domainjob.h @@ -105,9 +105,11 @@ typedef void *(*qemuDomainObjPrivateJobAlloc)(void); typedef void (*qemuDomainObjPrivateJobFree)(void *); typedef void (*qemuDomainObjPrivateJobReset)(void *); typedef int (*qemuDomainObjPrivateJobFormat)(virBufferPtr, - qemuDomainJobObjPtr); + qemuDomainJobObjPtr, + virDomainObjPtr); typedef int (*qemuDomainObjPrivateJobParse)(xmlXPathContextPtr, - qemuDomainJobObjPtr); + qemuDomainJobObjPtr, + virDomainObjPtr); typedef void (*qemuDomainObjJobInfoSetOperation)(qemuDomainJobObjPtr, virDomainJobOperation); typedef void (*qemuDomainObjCurrentJobInfoInit)(qemuDomainJobObjPtr, --=20 2.25.1