From nobody Tue Apr 30 15:15:48 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.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; Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 14933283393531016.7847401137022; Thu, 27 Apr 2017 14:25:39 -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 2CCA225BF67; Thu, 27 Apr 2017 21:25:37 +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 0377C7DFE0; Thu, 27 Apr 2017 21:25:37 +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 A015A18521C7; Thu, 27 Apr 2017 21:25:36 +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 v3RLPVJa032237 for ; Thu, 27 Apr 2017 17:25:31 -0400 Received: by smtp.corp.redhat.com (Postfix) id 902DA1869B; Thu, 27 Apr 2017 21:25:31 +0000 (UTC) Received: from vhost2.laine.org (ovpn-116-170.phx2.redhat.com [10.3.116.170]) by smtp.corp.redhat.com (Postfix) with ESMTP id 3A05317D99; Thu, 27 Apr 2017 21:25:31 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 2CCA225BF67 Authentication-Results: ext-mx05.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=laine.org Authentication-Results: ext-mx05.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=libvir-list-bounces@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 2CCA225BF67 From: Laine Stump To: libvir-list@redhat.com Date: Thu, 27 Apr 2017 17:25:22 -0400 Message-Id: <20170427212523.15911-2-laine@laine.org> In-Reply-To: <20170427212523.15911-1-laine@laine.org> References: <20170427212523.15911-1-laine@laine.org> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 1/2] qemu: don't kill qemu process on restart if networkNotify fails 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.15 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.29]); Thu, 27 Apr 2017 21:25:38 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Nothing that could happen during networkNotifyActualDevice() could justify unceremoniously killing the qemu process, but that's what we were doing. In particular, new code added in commit 85bcc022 (first appearred in libvirt-3.2.0) attempts to reattach tap devices to their assigned bridge devices when libvirtd restarts (to make it easier to recover from a restart of a libvirt network). But if the network has been stopped and *not* restarted, the bridge device won't exist and networkNotifyActualDevice() will fail. This patch changes networkNotifyActualDevice() and qemuProcessNotifyNets() to return void, so that qemuProcessReconnect() will soldier on regardless of what happens (any errors will still be logged though). Partially resolves: https://bugzilla.redhat.com/1442700 --- Change from V1: change networkNotifyActualDevice() so that it also returns void (requested by jferlan). I didn't remove the "error" label in that function though, both for consistency with networkAllocateActualDevice(), and to avoid the large number of changes (error =3D=3D> cleanup) that would do nothing more than create opportunities for merge conflicts. src/network/bridge_driver.c | 10 ++++------ src/network/bridge_driver.h | 7 +++---- src/qemu/qemu_process.c | 9 +++------ 3 files changed, 10 insertions(+), 16 deletions(-) diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c index d2d8557..d18b15b 100644 --- a/src/network/bridge_driver.c +++ b/src/network/bridge_driver.c @@ -4649,9 +4649,9 @@ networkAllocateActualDevice(virDomainDefPtr dom, * order, or re-attach the interface's tap device to the network's * bridge. * - * Returns 0 on success, -1 on failure. + * No return value (but does log any failures) */ -int +void networkNotifyActualDevice(virDomainDefPtr dom, virDomainNetDefPtr iface) { @@ -4661,11 +4661,10 @@ networkNotifyActualDevice(virDomainDefPtr dom, virNetworkDefPtr netdef; virNetworkForwardIfDefPtr dev =3D NULL; size_t i; - int ret =3D -1; char *master =3D NULL; =20 if (iface->type !=3D VIR_DOMAIN_NET_TYPE_NETWORK) - return 0; + return; =20 network =3D virNetworkObjFindByName(driver->networks, iface->data.netw= ork.name); if (!network) { @@ -4841,11 +4840,10 @@ networkNotifyActualDevice(virDomainDefPtr dom, } networkLogAllocation(netdef, actualType, dev, iface, true); =20 - ret =3D 0; cleanup: virNetworkObjEndAPI(&network); VIR_FREE(master); - return ret; + return; =20 error: goto cleanup; diff --git a/src/network/bridge_driver.h b/src/network/bridge_driver.h index fbc7634..7832b60 100644 --- a/src/network/bridge_driver.h +++ b/src/network/bridge_driver.h @@ -37,8 +37,8 @@ int networkRegister(void); int networkAllocateActualDevice(virDomainDefPtr dom, virDomainNetDefPtr iface) ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2); -int networkNotifyActualDevice(virDomainDefPtr dom, - virDomainNetDefPtr iface) +void networkNotifyActualDevice(virDomainDefPtr dom, + virDomainNetDefPtr iface) ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2); int networkReleaseActualDevice(virDomainDefPtr dom, virDomainNetDefPtr iface) @@ -72,11 +72,10 @@ int networkBandwidthUpdate(virDomainNetDefPtr iface, # define networkDnsmasqConfContents(network, pidfile, configstr, \ dctx, caps) 0 =20 -static inline int +static inline void networkNotifyActualDevice(virDomainDefPtr dom ATTRIBUTE_UNUSED, virDomainNetDefPtr iface ATTRIBUTE_UNUSED) { - return 0; } =20 static inline int diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 53170d7..fcb5763 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -2825,7 +2825,7 @@ int qemuProcessStopCPUs(virQEMUDriverPtr driver, =20 =20 =20 -static int +static void qemuProcessNotifyNets(virDomainDefPtr def) { size_t i; @@ -2840,10 +2840,8 @@ qemuProcessNotifyNets(virDomainDefPtr def) if (virDomainNetGetActualType(net) =3D=3D VIR_DOMAIN_NET_TYPE_DIRE= CT) ignore_value(virNetDevMacVLanReserveName(net->ifname, false)); =20 - if (networkNotifyActualDevice(def, net) < 0) - return -1; + networkNotifyActualDevice(def, net); } - return 0; } =20 static int @@ -3480,8 +3478,7 @@ qemuProcessReconnect(void *opaque) if (qemuSecurityReserveLabel(driver->securityManager, obj->def, obj->p= id) < 0) goto error; =20 - if (qemuProcessNotifyNets(obj->def) < 0) - goto error; + qemuProcessNotifyNets(obj->def); =20 if (qemuProcessFiltersInstantiate(obj->def)) goto error; --=20 2.9.3 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Tue Apr 30 15:15:48 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.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; Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 14933283367981005.6704489167636; Thu, 27 Apr 2017 14:25:36 -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 67B3FC04B31B; Thu, 27 Apr 2017 21:25:35 +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 44E317DFE1; Thu, 27 Apr 2017 21:25:35 +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 EFB5318521CD; Thu, 27 Apr 2017 21:25:34 +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 v3RLPW33032242 for ; Thu, 27 Apr 2017 17:25:32 -0400 Received: by smtp.corp.redhat.com (Postfix) id 1E56018A49; Thu, 27 Apr 2017 21:25:32 +0000 (UTC) Received: from vhost2.laine.org (ovpn-116-170.phx2.redhat.com [10.3.116.170]) by smtp.corp.redhat.com (Postfix) with ESMTP id BAADB17D99; Thu, 27 Apr 2017 21:25:31 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 67B3FC04B31B Authentication-Results: ext-mx07.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=laine.org Authentication-Results: ext-mx07.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=libvir-list-bounces@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 67B3FC04B31B From: Laine Stump To: libvir-list@redhat.com Date: Thu, 27 Apr 2017 17:25:23 -0400 Message-Id: <20170427212523.15911-3-laine@laine.org> In-Reply-To: <20170427212523.15911-1-laine@laine.org> References: <20170427212523.15911-1-laine@laine.org> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 2/2] network: better log message when network is inactive during reconnect 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.15 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.31]); Thu, 27 Apr 2017 21:25:36 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" If the network isn't active during networkNotifyActualDevice(), we would log an error message stating that the bridge device didn't exist. This patch adds a check to see if the network is active, making the logs more useful in the case that it isn't. Partially resolves: https://bugzilla.redhat.com/1442700 --- No change from V1. src/network/bridge_driver.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c index d18b15b..3ba7018 100644 --- a/src/network/bridge_driver.c +++ b/src/network/bridge_driver.c @@ -4675,6 +4675,13 @@ networkNotifyActualDevice(virDomainDefPtr dom, } netdef =3D network->def; =20 + if (!virNetworkObjIsActive(network)) { + virReportError(VIR_ERR_OPERATION_INVALID, + _("network '%s' is not active"), + netdef->name); + goto error; + } + /* if we're restarting libvirtd after an upgrade from a version * that didn't save bridge name in actualNetDef for * actualType=3D=3Dnetwork, we need to copy it in so that it will be --=20 2.9.3 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list