From nobody Sun Feb 8 23:41:57 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) client-ip=170.10.129.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1642772057; cv=none; d=zohomail.com; s=zohoarc; b=lOwgNOHKxyzykvtDsuvmK/pDl9t8roYtJ45TfP0hgPkynTsbF34aA6X4G0BvO8N9Mgh9V3qDKkGLnKdp+Eo4WFdt+y2kxmeYQgDBLOevg3G/IcctOe4fNYm2ap1RQ1t52QavC6xqpKk7AZfL/W43GyPQkYJo/MLe1otKs6BXyNA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1642772057; h=Content-Type:Content-Transfer-Encoding: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=mGpKBVB432VsoI2ExJBowALi44YLhrId2F9HvRD0kpk=; b=dofy+I2mWfxxd+D5pBYX1WT3TRO9+su5bidmwTVP32syGKifb2IKdC7cWBoAc0kWYx+jIzxIpi42Bpdi2Sk9k1we5TeciR+qpDbPKDrK0ah6lEU5PJp64KKBjpJNdTdKG9EBJGjLdNy6JCMG7PkVdqir+mJe0acVJaWkrqGZ178= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by mx.zohomail.com with SMTPS id 1642772057126950.6368554926172; Fri, 21 Jan 2022 05:34:17 -0800 (PST) Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-643-YAbwyDAUOi6g1h7xIfsd6g-1; Fri, 21 Jan 2022 08:34:14 -0500 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 128B41091DBB; Fri, 21 Jan 2022 13:34:09 +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 E0C7A7B6C7; Fri, 21 Jan 2022 13:34:08 +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 A700D4A707; Fri, 21 Jan 2022 13:34:08 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 20LDSWgg011998 for ; Fri, 21 Jan 2022 08:28:32 -0500 Received: by smtp.corp.redhat.com (Postfix) id 4955C109004C; Fri, 21 Jan 2022 13:28:32 +0000 (UTC) Received: from maggie.redhat.com (unknown [10.43.2.56]) by smtp.corp.redhat.com (Postfix) with ESMTP id C71D41090033 for ; Fri, 21 Jan 2022 13:28:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1642772056; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=mGpKBVB432VsoI2ExJBowALi44YLhrId2F9HvRD0kpk=; b=Kt2/uC3MezCQaG3hPV2I7LvTP5L6cOcxgK/zxVGjm0TFk8Shjl2SlqT2uUmKFvW/GOM/jo 9wMlY3jEXNUdgUxCJnwmdkw8BstvFU3g9WN+GdlaORTeOsZPLtfKTIMX40YnLz0AmqP11R WaZKklj5uSDm4SqyR0iAQMO6xHEoY8w= X-MC-Unique: YAbwyDAUOi6g1h7xIfsd6g-1 From: Michal Privoznik To: libvir-list@redhat.com Subject: [PATCH 09/12] conf: Convert virDomainFSDefParseXML() to virXMLProp*() Date: Fri, 21 Jan 2022 14:28:16 +0100 Message-Id: In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 X-loop: libvir-list@redhat.com 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.79 on 10.5.11.16 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1642772059020100001 Content-Type: text/plain; charset="utf-8" After previous cleanups, the virDomainFSDefParseXML() function uses a mixture of virXMLProp*() and the old virXMLPropString() + virXXXTypeFromString() patterns. Rework it so that virXMLProp*() is used. Signed-off-by: Michal Privoznik --- src/bhyve/bhyve_command.c | 2 +- src/conf/domain_conf.c | 127 +++++++++++++-------------------- src/conf/domain_conf.h | 10 +-- src/lxc/lxc_container.c | 3 + src/qemu/qemu_domain_address.c | 2 +- 5 files changed, 60 insertions(+), 84 deletions(-) diff --git a/src/bhyve/bhyve_command.c b/src/bhyve/bhyve_command.c index 3368d20a04..af8ec30fe7 100644 --- a/src/bhyve/bhyve_command.c +++ b/src/bhyve/bhyve_command.c @@ -577,7 +577,7 @@ bhyveBuildFSArgStr(const virDomainDef *def G_GNUC_UNUSE= D, { g_auto(virBuffer) params =3D VIR_BUFFER_INITIALIZER; =20 - switch ((virDomainFSType) fs->type) { + switch (fs->type) { case VIR_DOMAIN_FS_TYPE_MOUNT: break; case VIR_DOMAIN_FS_TYPE_BLOCK: diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 30f0a13e2a..f4b05b1c21 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -9759,86 +9759,66 @@ virDomainFSDefParseXML(virDomainXMLOption *xmlopt, virDomainFSDef *def; xmlNodePtr driver_node =3D NULL; xmlNodePtr source_node =3D NULL; - g_autofree char *type =3D NULL; g_autofree char *source =3D NULL; g_autofree char *target =3D NULL; g_autofree char *format =3D NULL; - g_autofree char *accessmode =3D NULL; g_autofree char *usage =3D NULL; g_autofree char *units =3D NULL; - g_autofree char *model =3D NULL; - g_autofree char *multidevs =3D NULL; - g_autofree char *fmode =3D NULL; - g_autofree char *dmode =3D NULL; g_autofree char *sock =3D NULL; + int rv; =20 ctxt->node =3D node; =20 if (!(def =3D virDomainFSDefNew(xmlopt))) return NULL; =20 - type =3D virXMLPropString(node, "type"); - if (type) { - if ((def->type =3D virDomainFSTypeFromString(type)) < 0) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("unknown filesystem type '%s'"), type); - goto error; - } - } else { - def->type =3D VIR_DOMAIN_FS_TYPE_MOUNT; - } + if (virXMLPropEnum(node, "type", + virDomainFSTypeFromString, + VIR_XML_PROP_NONE, + &def->type) < 0) + goto error; =20 - accessmode =3D virXMLPropString(node, "accessmode"); - if (accessmode) { - if ((def->accessmode =3D virDomainFSAccessModeTypeFromString(acces= smode)) < 0) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("unknown accessmode '%s'"), accessmode); - goto error; - } - } else { - def->accessmode =3D VIR_DOMAIN_FS_ACCESSMODE_DEFAULT; - } + if (virXMLPropEnum(node, "accessmode", + virDomainFSAccessModeTypeFromString, + VIR_XML_PROP_NONE, + &def->accessmode) < 0) + goto error; =20 - fmode =3D virXMLPropString(node, "fmode"); - if (fmode) { - if ((virStrToLong_uip(fmode, NULL, 8, &def->fmode) < 0) || - (def->fmode > 0777)) { + if ((rv =3D virXMLPropUInt(node, "fmode", 8, + VIR_XML_PROP_NONE, + &def->fmode)) < 0) { + goto error; + } else if (rv > 0) { + if (def->fmode > 0777) { virReportError(VIR_ERR_XML_ERROR, - _("invalid fmode: '%s'"), fmode); + _("invalid fmode: '0%o'"), def->fmode); goto error; } } =20 - dmode =3D virXMLPropString(node, "dmode"); - if (dmode) { - if ((virStrToLong_uip(dmode, NULL, 8, &def->dmode) < 0) || - (def->dmode > 0777)) { + if ((rv =3D virXMLPropUInt(node, "dmode", 8, + VIR_XML_PROP_NONE, + &def->dmode)) < 0) { + goto error; + } else if (rv > 0) { + if (def->dmode > 0777) { virReportError(VIR_ERR_XML_ERROR, - _("invalid dmode: '%s'"), dmode); + _("invalid dmode: '0%o'"), def->dmode); goto error; } } =20 - model =3D virXMLPropString(node, "model"); - if (model) { - if ((def->model =3D virDomainFSModelTypeFromString(model)) < 0 || - def->model =3D=3D VIR_DOMAIN_FS_MODEL_DEFAULT) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("unknown model '%s'"), model); - goto error; - } - } + if (virXMLPropEnum(node, "model", + virDomainFSModelTypeFromString, + VIR_XML_PROP_NONZERO, + &def->model) < 0) + goto error; =20 - multidevs =3D virXMLPropString(node, "multidevs"); - if (multidevs) { - if ((def->multidevs =3D virDomainFSMultidevsTypeFromString(multide= vs)) < 0) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("unknown multidevs '%s'"), multidevs); - goto error; - } - } else { - def->multidevs =3D VIR_DOMAIN_FS_MULTIDEVS_DEFAULT; - } + if (virXMLPropEnum(node, "multidevs", + virDomainFSMultidevsTypeFromString, + VIR_XML_PROP_NONE, + &def->multidevs) < 0) + goto error; =20 if (virParseScaledValue("./space_hard_limit[1]", NULL, ctxt, &def->space_hard_limit, @@ -9901,11 +9881,10 @@ virDomainFSDefParseXML(virDomainXMLOption *xmlopt, if (def->fsdriver =3D=3D VIR_DOMAIN_FS_DRIVER_TYPE_VIRTIOFS) { g_autofree char *queue_size =3D virXPathString("string(./driver/@q= ueue)", ctxt); g_autofree char *binary =3D virXPathString("string(./binary/@path)= ", ctxt); - g_autofree char *cache =3D virXPathString("string(./binary/cache/@= mode)", ctxt); - g_autofree char *sandbox =3D virXPathString("string(./binary/sandb= ox/@mode)", ctxt); xmlNodePtr binary_node =3D virXPathNode("./binary", ctxt); xmlNodePtr binary_lock_node =3D virXPathNode("./binary/lock", ctxt= ); - int val; + xmlNodePtr binary_cache_node =3D virXPathNode("./binary/cache", ct= xt); + xmlNodePtr binary_sandbox_node =3D virXPathNode("./binary/sandbox"= , ctxt); =20 if (queue_size && virStrToLong_ull(queue_size, NULL, 10, &def->que= ue_size) < 0) { virReportError(VIR_ERR_XML_ERROR, @@ -9932,26 +9911,17 @@ virDomainFSDefParseXML(virDomainXMLOption *xmlopt, &def->flock) < 0) goto error; =20 - if (cache) { - if ((val =3D virDomainFSCacheModeTypeFromString(cache)) <=3D 0= ) { - virReportError(VIR_ERR_XML_ERROR, - _("cannot parse cache mode '%s' for virtiof= s"), - cache); - goto error; - } - def->cache =3D val; - } - - if (sandbox) { - if ((val =3D virDomainFSSandboxModeTypeFromString(sandbox)) <= =3D 0) { - virReportError(VIR_ERR_XML_ERROR, - _("cannot parse sandbox mode '%s' for virti= ofs"), - sandbox); - goto error; - } - def->sandbox =3D val; - } + if (virXMLPropEnum(binary_cache_node, "mode", + virDomainFSCacheModeTypeFromString, + VIR_XML_PROP_NONZERO, + &def->cache) < 0) + goto error; =20 + if (virXMLPropEnum(binary_sandbox_node, "mode", + virDomainFSSandboxModeTypeFromString, + VIR_XML_PROP_NONZERO, + &def->sandbox) < 0) + goto error; } =20 if (source =3D=3D NULL && def->type !=3D VIR_DOMAIN_FS_TYPE_RAM @@ -24188,6 +24158,9 @@ virDomainFSDefFormat(virBuffer *buf, virBufferEscapeString(buf, " volume=3D'%s'", def->src->srcpool->vo= lume); virBufferAddLit(buf, "/>\n"); break; + + case VIR_DOMAIN_FS_TYPE_LAST: + break; } =20 virBufferEscapeString(buf, "\n", diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 584e15b6c7..bbb2f463e2 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -787,7 +787,7 @@ struct _virDomainControllerDef { =20 /* Types of disk backends */ typedef enum { - VIR_DOMAIN_FS_TYPE_MOUNT, /* Mounts (binds) a host dir on a guest dir = */ + VIR_DOMAIN_FS_TYPE_MOUNT =3D 0, /* Mounts (binds) a host dir on a gues= t dir */ VIR_DOMAIN_FS_TYPE_BLOCK, /* Mounts a host block dev on a guest dir */ VIR_DOMAIN_FS_TYPE_FILE, /* Loopback mounts a host file on a guest di= r */ VIR_DOMAIN_FS_TYPE_TEMPLATE, /* Expands a OS template to a guest dir */ @@ -867,15 +867,15 @@ typedef enum { } virDomainFSSandboxMode; =20 struct _virDomainFSDef { - int type; + virDomainFSType type; virDomainFSDriverType fsdriver; - int accessmode; /* enum virDomainFSAccessMode */ + virDomainFSAccessMode accessmode; int format; /* virStorageFileFormat */ virDomainFSWrpolicy wrpolicy; - int model; /* virDomainFSModel */ + virDomainFSModel model; unsigned int fmode; unsigned int dmode; - int multidevs; /* virDomainFSMultidevs */ + virDomainFSMultidevs multidevs; unsigned long long usage; /* in bytes */ virStorageSource *src; char *sock; diff --git a/src/lxc/lxc_container.c b/src/lxc/lxc_container.c index 3f38c55fc6..d5410e9fa6 100644 --- a/src/lxc/lxc_container.c +++ b/src/lxc/lxc_container.c @@ -1447,6 +1447,9 @@ static int lxcContainerMountFS(virDomainFSDef *fs, _("Unexpected filesystem type %s"), virDomainFSTypeToString(fs->type)); return -1; + case VIR_DOMAIN_FS_TYPE_TEMPLATE: + case VIR_DOMAIN_FS_TYPE_VOLUME: + case VIR_DOMAIN_FS_TYPE_LAST: default: virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("Cannot mount filesystem type %s"), diff --git a/src/qemu/qemu_domain_address.c b/src/qemu/qemu_domain_address.c index 18fc34d049..3e6eed6ec9 100644 --- a/src/qemu/qemu_domain_address.c +++ b/src/qemu/qemu_domain_address.c @@ -705,7 +705,7 @@ qemuDomainDeviceCalculatePCIConnectFlags(virDomainDevic= eDef *dev, case VIR_DOMAIN_FS_DRIVER_TYPE_PATH: case VIR_DOMAIN_FS_DRIVER_TYPE_HANDLE: /* these drivers are handled by virtio-9p-pci */ - switch ((virDomainFSModel) dev->data.fs->model) { + switch (dev->data.fs->model) { case VIR_DOMAIN_FS_MODEL_VIRTIO_TRANSITIONAL: /* Transitional devices only work in conventional PCI slot= s */ return pciFlags; --=20 2.34.1