From nobody Wed May 14 10:24:58 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1526294759917464.3856590844066; Mon, 14 May 2018 03:45:59 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 9A02A3003E61; Mon, 14 May 2018 10:45:58 +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 6704017CFF; Mon, 14 May 2018 10:45:58 +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 215563FA5B; Mon, 14 May 2018 10:45:58 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w4EAjtRE004205 for ; Mon, 14 May 2018 06:45:55 -0400 Received: by smtp.corp.redhat.com (Postfix) id 1CFF12166BAD; Mon, 14 May 2018 10:45:55 +0000 (UTC) Received: from angien.brq.redhat.com (unknown [10.43.2.136]) by smtp.corp.redhat.com (Postfix) with ESMTP id 99042215CDA7 for ; Mon, 14 May 2018 10:45:54 +0000 (UTC) From: Peter Krempa To: libvir-list@redhat.com Date: Mon, 14 May 2018 12:45:45 +0200 Message-Id: In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.78 on 10.11.54.6 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 12/13] util: storage: Store PR manager alias in the definition 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: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.42]); Mon, 14 May 2018 10:45:59 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Rather than always re-generating the alias store it in the definition and in the status XML. Signed-off-by: Peter Krempa --- src/qemu/qemu_command.c | 23 +++------------------ src/qemu/qemu_command.h | 3 +-- src/qemu/qemu_domain.c | 16 +++++++++++++-- src/qemu/qemu_hotplug.c | 34 ++++++++++-----------------= ---- src/util/virstoragefile.c | 1 + src/util/virstoragefile.h | 3 +++ tests/qemustatusxml2xmldata/modern-in.xml | 4 ++++ 7 files changed, 37 insertions(+), 47 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index c38dde5a60..84d7d51c7c 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -9669,7 +9669,6 @@ qemuBuildPanicCommandLine(virCommandPtr cmd, * qemuBuildPRManagerInfoProps: * @disk: disk definition * @propsret: Returns JSON object containing properties of the pr-manager-= helper object - * @aliasret: alias of the pr-manager-helper object * * Build the JSON properties for the pr-manager object. * @@ -9678,32 +9677,19 @@ qemuBuildPanicCommandLine(virCommandPtr cmd, */ int qemuBuildPRManagerInfoProps(const virDomainDiskDef *disk, - virJSONValuePtr *propsret, - char **aliasret) + virJSONValuePtr *propsret) { - char *alias =3D NULL; int ret =3D -1; *propsret =3D NULL; - *aliasret =3D NULL; - - if (virStoragePRDefIsManaged(disk->src->pr)) { - if (VIR_STRDUP(alias, qemuDomainGetManagedPRAlias()) < 0) - goto cleanup; - } else { - if (!(alias =3D qemuDomainGetUnmanagedPRAlias(disk->info.alias))) - goto cleanup; - } if (virJSONValueObjectCreate(propsret, "s:path", disk->src->pr->path, NULL) < 0) goto cleanup; - VIR_STEAL_PTR(*aliasret, alias); ret =3D 0; cleanup: - VIR_FREE(alias); return ret; } @@ -9715,7 +9701,6 @@ qemuBuildMasterPRCommandLine(virCommandPtr cmd, size_t i; bool managedAdded =3D false; virJSONValuePtr props =3D NULL; - char *alias =3D NULL; char *tmp =3D NULL; int ret =3D -1; @@ -9732,14 +9717,13 @@ qemuBuildMasterPRCommandLine(virCommandPtr cmd, managedAdded =3D true; } - if (qemuBuildPRManagerInfoProps(disk, &props, &alias) < 0) + if (qemuBuildPRManagerInfoProps(disk, &props) < 0) goto cleanup; if (!(tmp =3D virQEMUBuildObjectCommandlineFromJSON("pr-manager-he= lper", - alias, + disk->src->pr->m= gralias, props))) goto cleanup; - VIR_FREE(alias); virJSONValueFree(props); props =3D NULL; @@ -9749,7 +9733,6 @@ qemuBuildMasterPRCommandLine(virCommandPtr cmd, ret =3D 0; cleanup: - VIR_FREE(alias); virJSONValueFree(props); return ret; } diff --git a/src/qemu/qemu_command.h b/src/qemu/qemu_command.h index 621592cd79..28bc33558b 100644 --- a/src/qemu/qemu_command.h +++ b/src/qemu/qemu_command.h @@ -56,8 +56,7 @@ virCommandPtr qemuBuildCommandLine(virQEMUDriverPtr drive= r, /* Generate the object properties for pr-manager */ int qemuBuildPRManagerInfoProps(const virDomainDiskDef *disk, - virJSONValuePtr *propsret, - char **alias); + virJSONValuePtr *propsret); /* Generate the object properties for a secret */ int qemuBuildSecretInfoProps(qemuDomainSecretInfoPtr secinfo, diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 92217e66fe..1572ce5c2d 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -1941,6 +1941,9 @@ qemuStorageSourcePrivateDataParse(xmlXPathContextPtr = ctxt, src->nodestorage =3D virXPathString("string(./nodenames/nodename[@type= =3D'storage']/@name)", ctxt); src->nodeformat =3D virXPathString("string(./nodenames/nodename[@type= =3D'format']/@name)", ctxt); + if (src->pr) + src->pr->mgralias =3D virXPathString("string(./reservations/@mgral= ias)", ctxt); + if (virStorageSourcePrivateDataParseRelPath(ctxt, src) < 0) return -1; @@ -1961,6 +1964,9 @@ qemuStorageSourcePrivateDataFormat(virStorageSourcePt= r src, virBufferAddLit(buf, "\n"); } + if (src->pr) + virBufferAsprintf(buf, "\n", src->p= r->mgralias); + if (virStorageSourcePrivateDataFormatRelPath(src, buf) < 0) return -1; @@ -11932,7 +11938,8 @@ qemuDomainPrepareDiskCachemode(virDomainDiskDefPtr = disk) static int qemuDomainPrepareStorageSourcePR(virStorageSourcePtr src, - qemuDomainObjPrivatePtr priv) + qemuDomainObjPrivatePtr priv, + const char *parentalias) { if (!src->pr) return 0; @@ -11940,6 +11947,11 @@ qemuDomainPrepareStorageSourcePR(virStorageSourceP= tr src, if (virStoragePRDefIsManaged(src->pr)) { if (!(src->pr->path =3D qemuDomainGetManagedPRSocketPath(priv))) return -1; + if (VIR_STRDUP(src->pr->mgralias, qemuDomainGetManagedPRAlias()) <= 0) + return -1; + } else { + if (!(src->pr->mgralias =3D qemuDomainGetUnmanagedPRAlias(parental= ias))) + return -1; } return 0; @@ -11962,7 +11974,7 @@ qemuDomainPrepareDiskSource(virDomainDiskDefPtr dis= k, if (qemuDomainPrepareDiskSourceChain(disk, NULL, cfg, priv->qemuCaps) = < 0) return -1; - if (qemuDomainPrepareStorageSourcePR(disk->src, priv) < 0) + if (qemuDomainPrepareStorageSourcePR(disk->src, priv, disk->info.alias= ) < 0) return -1; return 0; diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index 6557711ec1..9481123c19 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -387,13 +387,11 @@ qemuDomainMaybeStartPRDaemon(virDomainObjPtr vm, static int qemuMaybeBuildPRManagerInfoProps(virDomainObjPtr vm, const virDomainDiskDef *disk, - virJSONValuePtr *propsret, - char **aliasret) + virJSONValuePtr *propsret) { qemuDomainObjPrivatePtr priv =3D vm->privateData; *propsret =3D NULL; - *aliasret =3D NULL; if (!disk->src->pr) return 0; @@ -404,7 +402,7 @@ qemuMaybeBuildPRManagerInfoProps(virDomainObjPtr vm, return 0; } - return qemuBuildPRManagerInfoProps(disk, propsret, aliasret); + return qemuBuildPRManagerInfoProps(disk, propsret); } @@ -425,7 +423,6 @@ qemuDomainAttachDiskGeneric(virQEMUDriverPtr driver, char *devstr =3D NULL; char *drivestr =3D NULL; char *drivealias =3D NULL; - char *prmgrAlias =3D NULL; bool driveAdded =3D false; bool secobjAdded =3D false; bool encobjAdded =3D false; @@ -462,7 +459,7 @@ qemuDomainAttachDiskGeneric(virQEMUDriverPtr driver, if (encinfo && qemuBuildSecretInfoProps(encinfo, &encobjProps) < 0) goto error; - if (qemuMaybeBuildPRManagerInfoProps(vm, disk, &prmgrProps, &prmgrAlia= s) < 0) + if (qemuMaybeBuildPRManagerInfoProps(vm, disk, &prmgrProps) < 0) goto error; /* Start daemon only after prmgrProps is built. Otherwise @@ -511,7 +508,8 @@ qemuDomainAttachDiskGeneric(virQEMUDriverPtr driver, } if (prmgrProps) { - rv =3D qemuMonitorAddObject(priv->mon, "pr-manager-helper", prmgrA= lias, + rv =3D qemuMonitorAddObject(priv->mon, "pr-manager-helper", + disk->src->pr->mgralias, prmgrProps); prmgrProps =3D NULL; /* qemuMonitorAddObject consumes */ if (rv < 0) @@ -541,7 +539,6 @@ qemuDomainAttachDiskGeneric(virQEMUDriverPtr driver, virJSONValueFree(encobjProps); virJSONValueFree(secobjProps); qemuDomainSecretDiskDestroy(disk); - VIR_FREE(prmgrAlias); VIR_FREE(drivealias); VIR_FREE(drivestr); VIR_FREE(devstr); @@ -559,7 +556,7 @@ qemuDomainAttachDiskGeneric(virQEMUDriverPtr driver, if (encobjAdded) ignore_value(qemuMonitorDelObject(priv->mon, encinfo->s.aes.alias)= ); if (prmgrAdded) - ignore_value(qemuMonitorDelObject(priv->mon, prmgrAlias)); + ignore_value(qemuMonitorDelObject(priv->mon, disk->src->pr->mgrali= as)); if (qemuDomainObjExitMonitor(driver, vm) < 0) ret =3D -2; virErrorRestore(&orig_err); @@ -3832,22 +3829,18 @@ static bool qemuIsMultiFunctionDevice(virDomainDefP= tr def, static int qemuDomainDiskNeedRemovePR(virDomainObjPtr vm, virDomainDiskDefPtr disk, - char **aliasret, bool *stopDaemon) { qemuDomainObjPrivatePtr priv =3D vm->privateData; size_t i; - *aliasret =3D NULL; *stopDaemon =3D false; if (!disk->src->pr) return 0; - if (!virStoragePRDefIsManaged(disk->src->pr)) { - *aliasret =3D qemuDomainGetUnmanagedPRAlias(disk->info.alias); - return *aliasret ? 0 : -1; - } + if (!virStoragePRDefIsManaged(disk->src->pr)) + return 0; for (i =3D 0; i < vm->def->ndisks; i++) { const virDomainDiskDef *domainDisk =3D vm->def->disks[i]; @@ -3862,9 +3855,6 @@ qemuDomainDiskNeedRemovePR(virDomainObjPtr vm, if (i !=3D vm->def->ndisks) return 0; - if (VIR_STRDUP(*aliasret, qemuDomainGetManagedPRAlias()) < 0) - return -1; - if (priv->prDaemonRunning) *stopDaemon =3D true; @@ -3885,7 +3875,6 @@ qemuDomainRemoveDiskDevice(virQEMUDriverPtr driver, char *drivestr; char *objAlias =3D NULL; char *encAlias =3D NULL; - char *prmgrAlias =3D NULL; bool stopPRDaemon =3D false; VIR_DEBUG("Removing disk %s from domain %p %s", @@ -3924,7 +3913,7 @@ qemuDomainRemoveDiskDevice(virQEMUDriverPtr driver, } } - if (qemuDomainDiskNeedRemovePR(vm, disk, &prmgrAlias, &stopPRDaemon) <= 0) + if (qemuDomainDiskNeedRemovePR(vm, disk, &stopPRDaemon) < 0) return -1; qemuDomainObjEnterMonitor(driver, vm); @@ -3943,9 +3932,8 @@ qemuDomainRemoveDiskDevice(virQEMUDriverPtr driver, VIR_FREE(encAlias); /* If it fails, then so be it - it was a best shot */ - if (prmgrAlias) - ignore_value(qemuMonitorDelObject(priv->mon, prmgrAlias)); - VIR_FREE(prmgrAlias); + if (disk->src->pr) + ignore_value(qemuMonitorDelObject(priv->mon, disk->src->pr->mgrali= as)); if (disk->src->haveTLS) ignore_value(qemuMonitorDelObject(priv->mon, disk->src->tlsAlias)); diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c index dbbe758f30..54de2c1c30 100644 --- a/src/util/virstoragefile.c +++ b/src/util/virstoragefile.c @@ -1899,6 +1899,7 @@ virStoragePRDefFree(virStoragePRDefPtr prd) return; VIR_FREE(prd->path); + VIR_FREE(prd->mgralias); VIR_FREE(prd); } diff --git a/src/util/virstoragefile.h b/src/util/virstoragefile.h index 3a90c60fa5..1631c4cf66 100644 --- a/src/util/virstoragefile.h +++ b/src/util/virstoragefile.h @@ -221,6 +221,9 @@ typedef virStoragePRDef *virStoragePRDefPtr; struct _virStoragePRDef { int managed; /* enum virTristateBool */ char *path; + + /* manager object alias */ + char *mgralias; }; typedef struct _virStorageDriverData virStorageDriverData; diff --git a/tests/qemustatusxml2xmldata/modern-in.xml b/tests/qemustatusxm= l2xmldata/modern-in.xml index d57e1f605f..d63fcf79f1 100644 --- a/tests/qemustatusxml2xmldata/modern-in.xml +++ b/tests/qemustatusxml2xmldata/modern-in.xml @@ -308,11 +308,15 @@ + + + + base.qcow2 --=20 2.16.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list