From nobody Sat May 4 22:03:11 2024 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 ARC-Seal: i=1; a=rsa-sha256; t=1569110683; cv=none; d=zoho.com; s=zohoarc; b=jgV0V24UUWCpSY595pqzYhrD+x97gO68Wg05xJCj4XxKNdDKyASBuk/NYIg4ESvlJcWmg+4LEz/ry9lc4GWL8ipzNOfR1Edwgvmx7RlV/27kURb3z5aBqf2lQ+MTkexiZxihcuVchWU3rp0P3gLox3FDmXnAkqH6Ob3eiAOxsfE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1569110683; 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:ARC-Authentication-Results; bh=1icE9QZqwJWUySx2dEKOQR/rmtJHehk2eynCvEzwYOw=; b=cx1+WVzs+v883r2WBMxAsGUkrv8OuJwzWxn7El/+ty3RSVeYg9EJSnIaJY5iVPMdYq4UyBG7e/X4NYu1MBzfsE688cbwiDpz6Z8UQkMAtn+J6eu22arEicfVOCieQaX/QQ9uHeJ8ez7Ar/e23tnQ6UjP0GNAL2NTsA+3Kuaz91w= ARC-Authentication-Results: i=1; mx.zoho.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 header.from= (p=none dis=none) header.from= Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 156911068315336.10853063093407; Sat, 21 Sep 2019 17:04:43 -0700 (PDT) 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 mx1.redhat.com (Postfix) with ESMTPS id B30B8550CF; Sun, 22 Sep 2019 00:04:41 +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 827045C1B5; Sun, 22 Sep 2019 00:04:41 +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 0BB434E58A; Sun, 22 Sep 2019 00:04:41 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id x8M00AHu009211 for ; Sat, 21 Sep 2019 20:00:10 -0400 Received: by smtp.corp.redhat.com (Postfix) id 44F755DA21; Sun, 22 Sep 2019 00:00:10 +0000 (UTC) Received: from vhost2.laine.org (ovpn-116-86.phx2.redhat.com [10.3.116.86]) by smtp.corp.redhat.com (Postfix) with ESMTP id DB522612B1; Sun, 22 Sep 2019 00:00:09 +0000 (UTC) From: Laine Stump To: libvir-list@redhat.com Date: Sat, 21 Sep 2019 19:59:56 -0400 Message-Id: <20190921235957.31265-2-laine@redhat.com> In-Reply-To: <20190921235957.31265-1-laine@redhat.com> References: <20190921235957.31265-1-laine@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 1/2] conf: take advantage of VIR_AUTO* in virDomainNetCreatePort() 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: , 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.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.29]); Sun, 22 Sep 2019 00:04:42 +0000 (UTC) Content-Type: text/plain; charset="utf-8" Before adding new code to this function that will be made easier by using auto-cleaning pointers, update it to use auto-cleaning pointers (and the more modern virErrorPreserveLast()). Signed-off-by: Laine Stump Reviewed-by: Michal Privoznik --- src/conf/domain_conf.c | 53 ++++++++++++++---------------------- src/conf/virnetworkportdef.h | 1 + 2 files changed, 21 insertions(+), 33 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 76aaa63f57..b6fa802523 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -30873,60 +30873,47 @@ virDomainNetCreatePort(virConnectPtr conn, virDomainNetDefPtr iface, unsigned int flags) { - virNetworkPtr net =3D NULL; - int ret =3D -1; - virNetworkPortDefPtr portdef =3D NULL; - virNetworkPortPtr port =3D NULL; - char *portxml =3D NULL; - virErrorPtr saved; + virErrorPtr save_err; + VIR_AUTOUNREF(virNetworkPtr) net =3D NULL; + VIR_AUTOPTR(virNetworkPortDef) portdef =3D NULL; + VIR_AUTOUNREF(virNetworkPortPtr) port =3D NULL; + VIR_AUTOFREE(char *) portxml =3D NULL; =20 if (!(net =3D virNetworkLookupByName(conn, iface->data.network.name))) return -1; =20 if (flags & VIR_NETWORK_PORT_CREATE_RECLAIM) { if (!(portdef =3D virDomainNetDefActualToNetworkPort(dom, iface))) - goto cleanup; + return -1; } else { if (!(portdef =3D virDomainNetDefToNetworkPort(dom, iface))) - goto cleanup; + return -1; } =20 if (!(portxml =3D virNetworkPortDefFormat(portdef))) - goto cleanup; + return -1; =20 + /* prepare to re-use portdef */ virNetworkPortDefFree(portdef); portdef =3D NULL; =20 if (!(port =3D virNetworkPortCreateXML(net, portxml, flags))) - goto cleanup; + return -1; =20 + /* prepare to re-use portxml */ VIR_FREE(portxml); =20 - if (!(portxml =3D virNetworkPortGetXMLDesc(port, 0))) - goto deleteport; - - if (!(portdef =3D virNetworkPortDefParseString(portxml))) - goto deleteport; - - if (virDomainNetDefActualFromNetworkPort(iface, portdef) < 0) - goto deleteport; + if (!(portxml =3D virNetworkPortGetXMLDesc(port, 0)) || + !(portdef =3D virNetworkPortDefParseString(portxml)) || + virDomainNetDefActualFromNetworkPort(iface, portdef) < 0) { + virErrorPreserveLast(&save_err); + virNetworkPortDelete(port, 0); + virErrorRestore(&save_err); + return -1; + } =20 virNetworkPortGetUUID(port, iface->data.network.portid); - - ret =3D 0; - cleanup: - virNetworkPortDefFree(portdef); - VIR_FREE(portxml); - virObjectUnref(port); - virObjectUnref(net); - return ret; - - deleteport: - saved =3D virSaveLastError(); - virNetworkPortDelete(port, 0); - virSetError(saved); - virFreeError(saved); - goto cleanup; + return 0; } =20 int diff --git a/src/conf/virnetworkportdef.h b/src/conf/virnetworkportdef.h index 3d42b9b6a2..796e269fe0 100644 --- a/src/conf/virnetworkportdef.h +++ b/src/conf/virnetworkportdef.h @@ -82,6 +82,7 @@ struct _virNetworkPortDef { =20 void virNetworkPortDefFree(virNetworkPortDefPtr port); +VIR_DEFINE_AUTOPTR_FUNC(virNetworkPortDef, virNetworkPortDefFree); =20 virNetworkPortDefPtr virNetworkPortDefParseNode(xmlDocPtr xml, --=20 2.21.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sat May 4 22:03:11 2024 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 ARC-Seal: i=1; a=rsa-sha256; t=1569110688; cv=none; d=zoho.com; s=zohoarc; b=bP+PDoY1MJ28Ygzqf9HfOu0v+/wc0hMSDQZ3j5lq4w0lk0wxUgszGiWjmDGE8DRSXVWlkgaCOQet1lOgN96dbFXRGd2rizp9mRTFcng9iUr+BpOo2lEb8kDF1lK5Gen/OdVPvWg206CYc7Xv0/p6/asEakaah9ZZ12MtYDxNTIg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1569110688; 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:ARC-Authentication-Results; bh=4aefr2U4OMjToNE4MnfZIqUJ29V4wxjY9ToQCaQUOUQ=; b=Q27yy1+GL5Wb1dgVY0VMOyHnqEjpDp7usdlbw+mvSG5ZL+pHjQuuTVRaYG0OyE9hObcm86xs1KAvze2cuMIn0MQ2kkUtwLNWitLXD486LzleEXV+8CTawpba+QI1RMHrUKLZkmCzmj5VVgymrTWVamayQdI1m8kecG9oelVvbhE= ARC-Authentication-Results: i=1; mx.zoho.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 header.from= (p=none dis=none) header.from= Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1569110688764227.97768020446836; Sat, 21 Sep 2019 17:04:48 -0700 (PDT) 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 mx1.redhat.com (Postfix) with ESMTPS id 3458810CC1F1; Sun, 22 Sep 2019 00:04:47 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 0CCC345C4; Sun, 22 Sep 2019 00:04:47 +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 C106B18005A0; Sun, 22 Sep 2019 00:04:46 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id x8M00AXD009217 for ; Sat, 21 Sep 2019 20:00:10 -0400 Received: by smtp.corp.redhat.com (Postfix) id CCED25DAAC; Sun, 22 Sep 2019 00:00:10 +0000 (UTC) Received: from vhost2.laine.org (ovpn-116-86.phx2.redhat.com [10.3.116.86]) by smtp.corp.redhat.com (Postfix) with ESMTP id 6DDD85D9E5; Sun, 22 Sep 2019 00:00:10 +0000 (UTC) From: Laine Stump To: libvir-list@redhat.com Date: Sat, 21 Sep 2019 19:59:57 -0400 Message-Id: <20190921235957.31265-3-laine@redhat.com> In-Reply-To: <20190921235957.31265-1-laine@redhat.com> References: <20190921235957.31265-1-laine@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 2/2] conf: refresh network ports missing from network driver on restart 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: , Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.6.2 (mx1.redhat.com [10.5.110.65]); Sun, 22 Sep 2019 00:04:47 +0000 (UTC) Content-Type: text/plain; charset="utf-8" Before the refactoring that properly separated the network driver from the hypervisor driver and forced all interaction to go through public APIs, all network usage counters were zeroed when the network driver was initialized, and the network driver's now-deprecated "semi-private" API networkNotifyActualDevice() was called for every interface of every domain as each hypervisor "reconnected" its domains during a libvirtd restart, and this would refresh the usage count for each network. Post-driver-split, during libvirtd restart/reconnection of the running domains, the function virDomainNetNotifyActualDevice() is called by each hypervisor driver for every interface of every domain restart, and this function has code to re-register interfaces, but it only calls into the network driver to re-register those ports that don't already have a valid portid (ie. one that is not simply all 0), assuming that those with valid portids are already known (and counted) by the network driver. commit 7ab9bdd47 recently modified the network driver so that, in most cases, it properly resyncs each network's connection count during libvirtd (or maybe virtnetworkd) restart by iterating through the network's port list. This doesn't account for the case where a network is destroyed and restarted while there are running domains that have active ports on the network. In that case, the entire port list and connection count for that network is lost, and now even a restart of libvirtd/virtnetworkd/virtqemud, which in the past would resync the connection count, doesn't help (the network driver thinks there are no active ports, while the hypervisor driver knows about all the active ports, but mistakenly believes that the network driver also knows). The solution to this is to not just bypass valid portids during the call to virDomainNetworkNotifyActualDevice(). Instead, we query the network driver about the portid that was preserved in the domain status, and if it is not registered, we register it. (NB: while it would technically be correct to just generate a new portid for these cases, it makes for less churn in portids (and thus may make troubleshooting simpler) if we make the small fix to virDomainNetDefActualToNetworkPort() that preserves existing valid portids rather than unconditionally generating a new one.) Signed-off-by: Laine Stump Reviewed-by: Michal Privoznik --- src/conf/domain_conf.c | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index b6fa802523..d1e7ac84e8 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -30749,8 +30749,9 @@ virDomainNetDefActualToNetworkPort(virDomainDefPtr = dom, if (VIR_ALLOC(port) < 0) return NULL; =20 - /* Bad - we need to preserve original port uuid */ - if (virUUIDGenerate(port->uuid) < 0) { + if (virUUIDIsValid(iface->data.network.portid)) { + memcpy(port->uuid, iface->data.network.portid, VIR_UUID_BUFLEN); + } else if (virUUIDGenerate(port->uuid) < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("Failed to generate UUID")); goto error; @@ -30883,6 +30884,23 @@ virDomainNetCreatePort(virConnectPtr conn, return -1; =20 if (flags & VIR_NETWORK_PORT_CREATE_RECLAIM) { + char uuidstr[VIR_UUID_STRING_BUFLEN]; + char macstr[VIR_MAC_STRING_BUFLEN]; + + virUUIDFormat(iface->data.network.portid, uuidstr); + virMacAddrFormat(&iface->mac, macstr); + + /* if the port is already registered, then we are done */ + if (virUUIDIsValid(iface->data.network.portid) && + (port =3D virNetworkPortLookupByUUID(net, iface->data.network.= portid))) { + VIR_DEBUG("network: %s domain: %s mac: %s port: %s - already r= egistered, skipping", + iface->data.network.name, dom->name, macstr, uuidstr= ); + return 0; + } + + /* otherwise we need to create a new port */ + VIR_DEBUG("network: %s domain: %s mac: %s port: %s - not found, re= claiming", + iface->data.network.name, dom->name, macstr, uuidstr); if (!(portdef =3D virDomainNetDefActualToNetworkPort(dom, iface))) return -1; } else { @@ -30931,10 +30949,9 @@ virDomainNetNotifyActualDevice(virConnectPtr conn, { virDomainNetType actualType =3D virDomainNetGetActualType(iface); =20 - if (!virUUIDIsValid(iface->data.network.portid)) { - if (virDomainNetCreatePort(conn, dom, iface, - VIR_NETWORK_PORT_CREATE_RECLAIM) < 0) - return; + if (virDomainNetCreatePort(conn, dom, iface, + VIR_NETWORK_PORT_CREATE_RECLAIM) < 0) { + return; } =20 if (actualType =3D=3D VIR_DOMAIN_NET_TYPE_NETWORK || --=20 2.21.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sat May 4 22:03:11 2024 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 ARC-Seal: i=1; a=rsa-sha256; t=1569200933; cv=none; d=zoho.com; s=zohoarc; b=Q0xczFCIi6HFgr+Hx+sY2ohJ7pKSCZ/nXLSFtBfomx8IfUmqd1bLqkuuotH3gfdbdCsVyQVj5wl/fBEmK0JkCvxbPT9tPPM34Km0I1Pgt9CxRzUVLeUGhvEJlzaKyqRYzx7uYSokVEn3PBd7PLSX5OiSAildPOyIgMRW6aHZxdo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1569200933; 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:ARC-Authentication-Results; bh=2LAGfgyApSvprndTz7W5apopZYB25LXzr26mGgJT1D4=; b=fB6Eu2k0Dp3eVrnYiTIN5IlxrRs+xm6gc0RAoq4i+m5PB1zaR9gbSjZezYPtIllmRoqpN/yjKDOd6O5G+CcfilCOk7PaMXhTp1qrclXXIX+utG3t2Bwnqo2lqsNTkiErYvGmUC8/ivpCdBkWF5abe+aWJkBadWZxYYYtA4056pU= ARC-Authentication-Results: i=1; mx.zoho.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 header.from= (p=none dis=none) header.from= Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1569200933121549.258713689996; Sun, 22 Sep 2019 18:08:53 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 0726D4E919; Mon, 23 Sep 2019 01:08:51 +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 CAAE35D704; Mon, 23 Sep 2019 01:08:46 +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 589284A486; Mon, 23 Sep 2019 01:08:42 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id x8N18eFs001384 for ; Sun, 22 Sep 2019 21:08:40 -0400 Received: by smtp.corp.redhat.com (Postfix) id 4D80C60167; Mon, 23 Sep 2019 01:08:40 +0000 (UTC) Received: from vhost2.laine.org (ovpn-116-86.phx2.redhat.com [10.3.116.86]) by smtp.corp.redhat.com (Postfix) with ESMTP id D23F860166; Mon, 23 Sep 2019 01:08:37 +0000 (UTC) From: Laine Stump To: libvir-list@redhat.com Date: Sun, 22 Sep 2019 21:08:33 -0400 Message-Id: <20190923010833.18442-1-laine@redhat.com> In-Reply-To: <20190921235957.31265-1-laine@redhat.com> References: <20190921235957.31265-1-laine@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 1.5/3] conf: use VIR_AUTOPTR as much as possible for virNetworkPortDefPtr 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: , 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.15 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.38]); Mon, 23 Sep 2019 01:08:52 +0000 (UTC) Content-Type: text/plain; charset="utf-8" Since the VIR_DEFINE_AUTOPTR_FUNC() was added for virNetworkPortDefPtr, I decided to convert all uses of virNetworkPortDefPtr that were appropriate to use VIR_AUTOPTR. This could be squashed into patch 1/2, or left separate, or just completely dropped. Signed-off-by: Laine Stump Reviewed-by: Michal Privoznik --- src/conf/domain_conf.c | 58 ++++++++++++++----------------- src/conf/virnetworkobj.c | 3 +- src/conf/virnetworkportdef.c | 52 +++++++++++++-------------- tests/virnetworkportxml2xmltest.c | 3 +- 4 files changed, 53 insertions(+), 63 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index d1e7ac84e8..d638c455d0 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -30565,7 +30565,8 @@ virNetworkPortDefPtr virDomainNetDefToNetworkPort(virDomainDefPtr dom, virDomainNetDefPtr iface) { - virNetworkPortDefPtr port; + VIR_AUTOPTR(virNetworkPortDef) port =3D NULL; + virNetworkPortDefPtr portret =3D NULL; =20 if (iface->type !=3D VIR_DOMAIN_NET_TYPE_NETWORK) { virReportError(VIR_ERR_INTERNAL_ERROR, @@ -30580,34 +30581,31 @@ virDomainNetDefToNetworkPort(virDomainDefPtr dom, if (virUUIDGenerate(port->uuid) < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("Failed to generate UUID")); - goto error; + return NULL; } =20 memcpy(port->owneruuid, dom->uuid, VIR_UUID_BUFLEN); if (VIR_STRDUP(port->ownername, dom->name) < 0) - goto error; + return NULL; =20 if (VIR_STRDUP(port->group, iface->data.network.portgroup) < 0) - goto error; + return NULL; =20 memcpy(&port->mac, &iface->mac, VIR_MAC_BUFLEN); =20 if (virNetDevVPortProfileCopy(&port->virtPortProfile, iface->virtPortP= rofile) < 0) - goto error; + return NULL; =20 if (virNetDevBandwidthCopy(&port->bandwidth, iface->bandwidth) < 0) - goto error; + return NULL; =20 if (virNetDevVlanCopy(&port->vlan, &iface->vlan) < 0) - goto error; + return NULL; =20 port->trustGuestRxFilters =3D iface->trustGuestRxFilters; =20 - return port; - - error: - virNetworkPortDefFree(port); - return NULL; + VIR_STEAL_PTR(portret, port); + return portret; } =20 int @@ -30728,7 +30726,8 @@ virDomainNetDefActualToNetworkPort(virDomainDefPtr = dom, virDomainNetDefPtr iface) { virDomainActualNetDefPtr actual; - virNetworkPortDefPtr port; + VIR_AUTOPTR(virNetworkPortDef) port =3D NULL; + virNetworkPortDefPtr portret =3D NULL; =20 if (!iface->data.network.actual) { virReportError(VIR_ERR_INTERNAL_ERROR, @@ -30754,15 +30753,15 @@ virDomainNetDefActualToNetworkPort(virDomainDefPt= r dom, } else if (virUUIDGenerate(port->uuid) < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("Failed to generate UUID")); - goto error; + return NULL; } =20 memcpy(port->owneruuid, dom->uuid, VIR_UUID_BUFLEN); if (VIR_STRDUP(port->ownername, dom->name) < 0) - goto error; + return NULL; =20 if (VIR_STRDUP(port->group, iface->data.network.portgroup) < 0) - goto error; + return NULL; =20 memcpy(&port->mac, &iface->mac, VIR_MAC_BUFLEN); =20 @@ -30771,7 +30770,7 @@ virDomainNetDefActualToNetworkPort(virDomainDefPtr = dom, port->plugtype =3D VIR_NETWORK_PORT_PLUG_TYPE_NETWORK; if (VIR_STRDUP(port->plug.bridge.brname, actual->data.bridge.brname) < 0) - goto error; + return NULL; port->plug.bridge.macTableManager =3D actual->data.bridge.macTable= Manager; break; =20 @@ -30779,7 +30778,7 @@ virDomainNetDefActualToNetworkPort(virDomainDefPtr = dom, port->plugtype =3D VIR_NETWORK_PORT_PLUG_TYPE_BRIDGE; if (VIR_STRDUP(port->plug.bridge.brname, actual->data.bridge.brname) < 0) - goto error; + return NULL; port->plug.bridge.macTableManager =3D actual->data.bridge.macTable= Manager; break; =20 @@ -30787,7 +30786,7 @@ virDomainNetDefActualToNetworkPort(virDomainDefPtr = dom, port->plugtype =3D VIR_NETWORK_PORT_PLUG_TYPE_DIRECT; if (VIR_STRDUP(port->plug.direct.linkdev, actual->data.direct.linkdev) < 0) - goto error; + return NULL; port->plug.direct.mode =3D actual->data.direct.mode; break; =20 @@ -30798,7 +30797,7 @@ virDomainNetDefActualToNetworkPort(virDomainDefPtr = dom, virReportError(VIR_ERR_INTERNAL_ERROR, _("Actual interface '%s' hostdev was not a PCI = device"), iface->ifname); - goto error; + return NULL; } port->plug.hostdevpci.managed =3D virTristateBoolFromBool(actual->= data.hostdev.def.managed); port->plug.hostdevpci.addr =3D actual->data.hostdev.def.source.sub= sys.u.pci.addr; @@ -30824,7 +30823,7 @@ virDomainNetDefActualToNetworkPort(virDomainDefPtr = dom, default: virReportEnumRangeError(virDomainHostdevSubsysPCIBackendType, actual->data.hostdev.def.source.subsys= .u.pci.backend); - goto error; + return NULL; } =20 break; @@ -30840,31 +30839,28 @@ virDomainNetDefActualToNetworkPort(virDomainDefPt= r dom, virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("Unexpected network port type %s"), virDomainNetTypeToString(virDomainNetGetActualType(= iface))); - goto error; + return NULL; =20 case VIR_DOMAIN_NET_TYPE_LAST: default: virReportEnumRangeError(virNetworkPortPlugType, port->plugtype); - goto error; + return NULL; } =20 if (virNetDevVPortProfileCopy(&port->virtPortProfile, actual->virtPort= Profile) < 0) - goto error; + return NULL; =20 if (virNetDevBandwidthCopy(&port->bandwidth, actual->bandwidth) < 0) - goto error; + return NULL; =20 if (virNetDevVlanCopy(&port->vlan, &actual->vlan) < 0) - goto error; + return NULL; =20 port->class_id =3D actual->class_id; port->trustGuestRxFilters =3D actual->trustGuestRxFilters; =20 - return port; - - error: - virNetworkPortDefFree(port); - return NULL; + VIR_STEAL_PTR(portret, port); + return portret; } =20 =20 diff --git a/src/conf/virnetworkobj.c b/src/conf/virnetworkobj.c index ca1d598cf9..69a962b466 100644 --- a/src/conf/virnetworkobj.c +++ b/src/conf/virnetworkobj.c @@ -1887,7 +1887,7 @@ virNetworkObjLoadAllPorts(virNetworkObjPtr net, int ret =3D -1; int rc; char uuidstr[VIR_UUID_STRING_BUFLEN]; - virNetworkPortDefPtr portdef =3D NULL; + VIR_AUTOPTR(virNetworkPortDef) portdef =3D NULL; =20 if (!(dir =3D virNetworkObjGetPortStatusDir(net, stateDir))) goto cleanup; @@ -1925,6 +1925,5 @@ virNetworkObjLoadAllPorts(virNetworkObjPtr net, ret =3D 0; cleanup: VIR_DIR_CLOSE(dh); - virNetworkPortDefFree(portdef); return ret; } diff --git a/src/conf/virnetworkportdef.c b/src/conf/virnetworkportdef.c index 2e20bff66e..36e2c2c444 100644 --- a/src/conf/virnetworkportdef.c +++ b/src/conf/virnetworkportdef.c @@ -75,7 +75,8 @@ virNetworkPortDefFree(virNetworkPortDefPtr def) static virNetworkPortDefPtr virNetworkPortDefParseXML(xmlXPathContextPtr ctxt) { - virNetworkPortDefPtr def; + VIR_AUTOPTR(virNetworkPortDef) def =3D NULL; + virNetworkPortDefPtr defret =3D NULL; VIR_AUTOFREE(char *) uuid =3D NULL; xmlNodePtr virtPortNode; xmlNodePtr vlanNode; @@ -96,19 +97,19 @@ virNetworkPortDefParseXML(xmlXPathContextPtr ctxt) if (!uuid) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("network port has no uuid")); - goto error; + return NULL; } if (virUUIDParse(uuid, def->uuid) < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, _("Unable to parse UUID '%s'"), uuid); - goto error; + return NULL; } =20 def->ownername =3D virXPathString("string(./owner/name)", ctxt); if (!def->ownername) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("network port has no owner name")); - goto error; + return NULL; } =20 VIR_FREE(uuid); @@ -116,13 +117,13 @@ virNetworkPortDefParseXML(xmlXPathContextPtr ctxt) if (!uuid) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("network port has no owner UUID")); - goto error; + return NULL; } =20 if (virUUIDParse(uuid, def->owneruuid) < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, _("Unable to parse UUID '%s'"), uuid); - goto error; + return NULL; } =20 def->group =3D virXPathString("string(./group)", ctxt); @@ -130,19 +131,19 @@ virNetworkPortDefParseXML(xmlXPathContextPtr ctxt) virtPortNode =3D virXPathNode("./virtualport", ctxt); if (virtPortNode && (!(def->virtPortProfile =3D virNetDevVPortProfileParse(virtPortNod= e, 0)))) { - goto error; + return NULL; } =20 mac =3D virXPathString("string(./mac/@address)", ctxt); if (!mac) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("network port has no mac")); - goto error; + return NULL; } if (virMacAddrParse(mac, &def->mac) < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, _("Unable to parse MAC '%s'"), mac); - goto error; + return NULL; } =20 bandwidthNode =3D virXPathNode("./bandwidth", ctxt); @@ -155,11 +156,11 @@ virNetworkPortDefParseXML(xmlXPathContextPtr ctxt) if (bandwidthNode && virNetDevBandwidthParse(&def->bandwidth, &def->class_id, bandwidthNode, true) < 0) - goto error; + return NULL; =20 vlanNode =3D virXPathNode("./vlan", ctxt); if (vlanNode && virNetDevVlanParse(vlanNode, ctxt, &def->vlan) < 0) - goto error; + return NULL; =20 =20 trustGuestRxFilters @@ -170,7 +171,7 @@ virNetworkPortDefParseXML(xmlXPathContextPtr ctxt) virReportError(VIR_ERR_XML_ERROR, _("Invalid guest rx filters trust setting '%s' = "), trustGuestRxFilters); - goto error; + return NULL; } } =20 @@ -191,7 +192,7 @@ virNetworkPortDefParseXML(xmlXPathContextPtr ctxt) if (!(def->plug.bridge.brname =3D virXPathString("string(./plug/@b= ridge)", ctxt))) { virReportError(VIR_ERR_XML_ERROR, "%s", _("Missing network port bridge name")); - goto error; + return NULL; } macmgr =3D virXPathString("string(./plug/@macTableManager)", ctxt); if (macmgr && @@ -200,7 +201,7 @@ virNetworkPortDefParseXML(xmlXPathContextPtr ctxt) virReportError(VIR_ERR_XML_ERROR, _("Invalid macTableManager setting '%s' " "in network port"), macmgr); - goto error; + return NULL; } break; =20 @@ -208,7 +209,7 @@ virNetworkPortDefParseXML(xmlXPathContextPtr ctxt) if (!(def->plug.direct.linkdev =3D virXPathString("string(./plug/@= dev)", ctxt))) { virReportError(VIR_ERR_XML_ERROR, "%s", _("Missing network port link device name")); - goto error; + return NULL; } mode =3D virXPathString("string(./plug/@mode)", ctxt); if (mode && @@ -216,7 +217,7 @@ virNetworkPortDefParseXML(xmlXPathContextPtr ctxt) virNetDevMacVLanModeTypeFromString(mode)) < 0) { virReportError(VIR_ERR_XML_ERROR, _("Invalid mode setting '%s' in network port"),= mode); - goto error; + return NULL; } break; =20 @@ -227,7 +228,7 @@ virNetworkPortDefParseXML(xmlXPathContextPtr ctxt) virTristateBoolTypeFromString(managed)) < 0) { virReportError(VIR_ERR_XML_ERROR, _("Invalid managed setting '%s' in network port= "), mode); - goto error; + return NULL; } driver =3D virXPathString("string(./plug/driver/@name)", ctxt); if (driver && @@ -235,31 +236,26 @@ virNetworkPortDefParseXML(xmlXPathContextPtr ctxt) virNetworkForwardDriverNameTypeFromString(driver)) <=3D 0) { virReportError(VIR_ERR_XML_ERROR, "%s", _("Missing network port driver name")); - goto error; + return NULL; } if (!(addressNode =3D virXPathNode("./plug/address", ctxt))) { virReportError(VIR_ERR_XML_ERROR, "%s", _("Missing network port PCI address")); - goto error; + return NULL; } =20 if (virPCIDeviceAddressParseXML(addressNode, &def->plug.hostdevpci= .addr) < 0) - goto error; + return NULL; break; =20 case VIR_NETWORK_PORT_PLUG_TYPE_LAST: default: virReportEnumRangeError(virNetworkPortPlugType, def->plugtype); - goto error; + return NULL; } =20 - cleanup: - return def; - - error: - virNetworkPortDefFree(def); - def =3D NULL; - goto cleanup; + VIR_STEAL_PTR(defret, def); + return defret; } =20 =20 diff --git a/tests/virnetworkportxml2xmltest.c b/tests/virnetworkportxml2xm= ltest.c index bb0ae8a8d5..9cbb327d92 100644 --- a/tests/virnetworkportxml2xmltest.c +++ b/tests/virnetworkportxml2xmltest.c @@ -38,7 +38,7 @@ testCompareXMLToXMLFiles(const char *expected) { char *actual =3D NULL; int ret =3D -1; - virNetworkPortDefPtr dev =3D NULL; + VIR_AUTOPTR(virNetworkPortDef) dev =3D NULL; =20 if (!(dev =3D virNetworkPortDefParseFile(expected))) goto cleanup; @@ -52,7 +52,6 @@ testCompareXMLToXMLFiles(const char *expected) ret =3D 0; cleanup: VIR_FREE(actual); - virNetworkPortDefFree(dev); return ret; } =20 --=20 2.21.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list