From nobody Mon Apr 29 05:54:30 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 1496399148716945.1713352895505; Fri, 2 Jun 2017 03:25:48 -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 7239F142A65; Fri, 2 Jun 2017 10:25:46 +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 2A9539E8F1; Fri, 2 Jun 2017 10:25: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 3F86F4BB74; Fri, 2 Jun 2017 10:25:44 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v52APgdX029077 for ; Fri, 2 Jun 2017 06:25:42 -0400 Received: by smtp.corp.redhat.com (Postfix) id E42EB1822B; Fri, 2 Jun 2017 10:25:42 +0000 (UTC) Received: from localhost.localdomain.com (ovpn-116-108.phx2.redhat.com [10.3.116.108]) by smtp.corp.redhat.com (Postfix) with ESMTP id A24B05C549 for ; Fri, 2 Jun 2017 10:25:42 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 7239F142A65 Authentication-Results: ext-mx10.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx10.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 7239F142A65 From: John Ferlan To: libvir-list@redhat.com Date: Fri, 2 Jun 2017 06:25:22 -0400 Message-Id: <20170602102538.14991-2-jferlan@redhat.com> In-Reply-To: <20170602102538.14991-1-jferlan@redhat.com> References: <20170602102538.14991-1-jferlan@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 01/17] nwfilter: Fix return value comparison for virNWFilterTriggerVMFilterRebuild 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.39]); Fri, 02 Jun 2017 10:25:47 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Should compare < 0 to be correct. Signed-off-by: John Ferlan --- src/conf/virnwfilterobj.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/conf/virnwfilterobj.c b/src/conf/virnwfilterobj.c index b5aaa6b..0027d45 100644 --- a/src/conf/virnwfilterobj.c +++ b/src/conf/virnwfilterobj.c @@ -253,7 +253,7 @@ virNWFilterObjTestUnassignDef(virNWFilterObjPtr obj) =20 obj->wantRemoved =3D true; /* trigger the update on VMs referencing the filter */ - if (virNWFilterTriggerVMFilterRebuild()) + if (virNWFilterTriggerVMFilterRebuild() < 0) rc =3D -1; =20 obj->wantRemoved =3D false; @@ -345,7 +345,7 @@ virNWFilterObjListAssignDef(virNWFilterObjListPtr nwfil= ters, =20 obj->newDef =3D def; /* trigger the update on VMs referencing the filter */ - if (virNWFilterTriggerVMFilterRebuild()) { + if (virNWFilterTriggerVMFilterRebuild() < 0) { obj->newDef =3D NULL; virNWFilterObjUnlock(obj); return NULL; --=20 2.9.4 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Mon Apr 29 05:54:30 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 149639914869958.96021543766187; Fri, 2 Jun 2017 03:25:48 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 81F793D959; Fri, 2 Jun 2017 10:25:46 +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 2B25087E59; Fri, 2 Jun 2017 10:25: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 64413180BAF5; Fri, 2 Jun 2017 10:25:44 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v52APhgh029082 for ; Fri, 2 Jun 2017 06:25:43 -0400 Received: by smtp.corp.redhat.com (Postfix) id 5B25B1822B; Fri, 2 Jun 2017 10:25:43 +0000 (UTC) Received: from localhost.localdomain.com (ovpn-116-108.phx2.redhat.com [10.3.116.108]) by smtp.corp.redhat.com (Postfix) with ESMTP id 18A865C549 for ; Fri, 2 Jun 2017 10:25:43 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 81F793D959 Authentication-Results: ext-mx06.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx06.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 81F793D959 From: John Ferlan To: libvir-list@redhat.com Date: Fri, 2 Jun 2017 06:25:23 -0400 Message-Id: <20170602102538.14991-3-jferlan@redhat.com> In-Reply-To: <20170602102538.14991-1-jferlan@redhat.com> References: <20170602102538.14991-1-jferlan@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 02/17] nwfilter: Fix possible corruption on failure path during LoadConfig 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.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.30]); Fri, 02 Jun 2017 10:25:47 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" If the virNWFilterSaveConfig in virNWFilterObjListLoadConfig, then jumping to the error label would free the @def owned by the object, but the object is still on the list. Fix this by following proper procedure to clear @def and create a new variable @objdef to handle the object's def after successful assignment. Signed-off-by: John Ferlan --- src/conf/virnwfilterobj.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/conf/virnwfilterobj.c b/src/conf/virnwfilterobj.c index 0027d45..3fb6046 100644 --- a/src/conf/virnwfilterobj.c +++ b/src/conf/virnwfilterobj.c @@ -485,6 +485,7 @@ virNWFilterObjListLoadConfig(virNWFilterObjListPtr nwfi= lters, { virNWFilterDefPtr def =3D NULL; virNWFilterObjPtr obj; + virNWFilterDefPtr objdef; char *configFile =3D NULL; =20 if (!(configFile =3D virFileBuildPath(configDir, name, ".xml"))) @@ -503,10 +504,12 @@ virNWFilterObjListLoadConfig(virNWFilterObjListPtr nw= filters, =20 if (!(obj =3D virNWFilterObjListAssignDef(nwfilters, def))) goto error; + def =3D NULL; + objdef =3D obj->def; =20 /* We generated a UUID, make it permanent by saving the config to disk= */ - if (!def->uuid_specified && - virNWFilterSaveConfig(configDir, def) < 0) + if (!objdef->uuid_specified && + virNWFilterSaveConfig(configDir, objdef) < 0) goto error; =20 VIR_FREE(configFile); --=20 2.9.4 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Mon Apr 29 05:54:30 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 149639916041381.72166672270464; Fri, 2 Jun 2017 03:26:00 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id DB7D9232044; Fri, 2 Jun 2017 10:25:57 +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 A086777719; Fri, 2 Jun 2017 10:25:57 +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 4AB14180BAF8; Fri, 2 Jun 2017 10:25:57 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v52APhxU029092 for ; Fri, 2 Jun 2017 06:25:43 -0400 Received: by smtp.corp.redhat.com (Postfix) id C64441822B; Fri, 2 Jun 2017 10:25:43 +0000 (UTC) Received: from localhost.localdomain.com (ovpn-116-108.phx2.redhat.com [10.3.116.108]) by smtp.corp.redhat.com (Postfix) with ESMTP id 8280C5C892 for ; Fri, 2 Jun 2017 10:25:43 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com DB7D9232044 Authentication-Results: ext-mx09.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx09.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 DB7D9232044 From: John Ferlan To: libvir-list@redhat.com Date: Fri, 2 Jun 2017 06:25:24 -0400 Message-Id: <20170602102538.14991-4-jferlan@redhat.com> In-Reply-To: <20170602102538.14991-1-jferlan@redhat.com> References: <20170602102538.14991-1-jferlan@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 03/17] nwfilter: Fix possible locking problem in LoadConfig error path 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.13 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.38]); Fri, 02 Jun 2017 10:25:58 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" After returning from virNWFilterObjListAssignDef the @obj is locked; however, if virNWFilterSaveConfig fails to save the generated UUID the code jumped to error and returns NULL meaning the caller will not call virNWFilterObjUnlock on the object leaving the object locked on list and ripe for a deadlock on any subsequent Find of all objects or object removal. So rather than jumping to error alter the comment prior to the virNWFilterSaveConfig and just provide a VIR_INFO message for anyone that cares, but allow the code to continue and a subsequent LoadConfig to once again attempt the save of a newly generated UUID. Signed-off-by: John Ferlan --- src/conf/virnwfilterobj.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/conf/virnwfilterobj.c b/src/conf/virnwfilterobj.c index 3fb6046..0343c0a 100644 --- a/src/conf/virnwfilterobj.c +++ b/src/conf/virnwfilterobj.c @@ -507,10 +507,13 @@ virNWFilterObjListLoadConfig(virNWFilterObjListPtr nw= filters, def =3D NULL; objdef =3D obj->def; =20 - /* We generated a UUID, make it permanent by saving the config to disk= */ + /* We generated a UUID, atttempt to make it permanent by saving the + * config to disk. If not successful, no need to fail or remove the + * object as a future load would regenerate a UUID and try again, + * but the existing config would still exist and can be used. */ if (!objdef->uuid_specified && virNWFilterSaveConfig(configDir, objdef) < 0) - goto error; + VIR_INFO("failed to save generated UUID for filter '%s'", objdef->= name); =20 VIR_FREE(configFile); return obj; --=20 2.9.4 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Mon Apr 29 05:54:30 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 1496399165560318.04196159488345; Fri, 2 Jun 2017 03:26:05 -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 77C503D970; Fri, 2 Jun 2017 10:26:03 +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 477B67B52D; Fri, 2 Jun 2017 10:26:03 +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 D28824A491; Fri, 2 Jun 2017 10:26:02 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v52APiRI029097 for ; Fri, 2 Jun 2017 06:25:44 -0400 Received: by smtp.corp.redhat.com (Postfix) id 3CEB24DA01; Fri, 2 Jun 2017 10:25:44 +0000 (UTC) Received: from localhost.localdomain.com (ovpn-116-108.phx2.redhat.com [10.3.116.108]) by smtp.corp.redhat.com (Postfix) with ESMTP id F06BC5C54A for ; Fri, 2 Jun 2017 10:25:43 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 77C503D970 Authentication-Results: ext-mx06.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx06.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 77C503D970 From: John Ferlan To: libvir-list@redhat.com Date: Fri, 2 Jun 2017 06:25:25 -0400 Message-Id: <20170602102538.14991-5-jferlan@redhat.com> In-Reply-To: <20170602102538.14991-1-jferlan@redhat.com> References: <20170602102538.14991-1-jferlan@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 04/17] nwfilter: Remove need for virNWFilterSaveXML 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.30]); Fri, 02 Jun 2017 10:26:04 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Merge code into virNWFilterSaveConfig Signed-off-by: John Ferlan --- src/conf/nwfilter_conf.c | 30 +++++++----------------------- src/conf/nwfilter_conf.h | 5 ----- 2 files changed, 7 insertions(+), 28 deletions(-) diff --git a/src/conf/nwfilter_conf.c b/src/conf/nwfilter_conf.c index 032700c..fba792a 100644 --- a/src/conf/nwfilter_conf.c +++ b/src/conf/nwfilter_conf.c @@ -2767,13 +2767,16 @@ virNWFilterDefParseFile(const char *filename) =20 =20 int -virNWFilterSaveXML(const char *configDir, - virNWFilterDefPtr def, - const char *xml) +virNWFilterSaveConfig(const char *configDir, + virNWFilterDefPtr def) { + int ret =3D -1; + char *xml; char uuidstr[VIR_UUID_STRING_BUFLEN]; char *configFile =3D NULL; - int ret =3D -1; + + if (!(xml =3D virNWFilterDefFormat(def))) + goto cleanup; =20 if (!(configFile =3D virFileBuildPath(configDir, def->name, ".xml"))) goto cleanup; @@ -2785,25 +2788,6 @@ virNWFilterSaveXML(const char *configDir, =20 cleanup: VIR_FREE(configFile); - return ret; -} - - -int -virNWFilterSaveConfig(const char *configDir, - virNWFilterDefPtr def) -{ - int ret =3D -1; - char *xml; - - if (!(xml =3D virNWFilterDefFormat(def))) - goto cleanup; - - if (virNWFilterSaveXML(configDir, def, xml) < 0) - goto cleanup; - - ret =3D 0; - cleanup: VIR_FREE(xml); return ret; } diff --git a/src/conf/nwfilter_conf.h b/src/conf/nwfilter_conf.h index 5cac260..4bf5b7c 100644 --- a/src/conf/nwfilter_conf.h +++ b/src/conf/nwfilter_conf.h @@ -581,11 +581,6 @@ char * virNWFilterDefFormat(const virNWFilterDef *def); =20 int -virNWFilterSaveXML(const char *configDir, - virNWFilterDefPtr def, - const char *xml); - -int virNWFilterSaveConfig(const char *configDir, virNWFilterDefPtr def); =20 --=20 2.9.4 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Mon Apr 29 05:54:30 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 1496399171042993.6560271339514; Fri, 2 Jun 2017 03:26:11 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id CCA785702C; Fri, 2 Jun 2017 10:26:08 +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 9FC4384401; Fri, 2 Jun 2017 10:26: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 C3C76181A72C; Fri, 2 Jun 2017 10:26:07 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v52APinC029102 for ; Fri, 2 Jun 2017 06:25:44 -0400 Received: by smtp.corp.redhat.com (Postfix) id A4FF64DA01; Fri, 2 Jun 2017 10:25:44 +0000 (UTC) Received: from localhost.localdomain.com (ovpn-116-108.phx2.redhat.com [10.3.116.108]) by smtp.corp.redhat.com (Postfix) with ESMTP id 646E91822B for ; Fri, 2 Jun 2017 10:25:44 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com CCA785702C Authentication-Results: ext-mx04.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx04.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 CCA785702C From: John Ferlan To: libvir-list@redhat.com Date: Fri, 2 Jun 2017 06:25:26 -0400 Message-Id: <20170602102538.14991-6-jferlan@redhat.com> In-Reply-To: <20170602102538.14991-1-jferlan@redhat.com> References: <20170602102538.14991-1-jferlan@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 05/17] nwfilter: Move virNWFilterSaveConfig virnwfilterobj 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.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.28]); Fri, 02 Jun 2017 10:26:09 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Move the function into nwfilterobj, rename it to virNWFilterObjSaveConfig, and alter the order of the arguments. Signed-off-by: John Ferlan --- src/conf/nwfilter_conf.c | 27 --------------------------- src/conf/nwfilter_conf.h | 4 ---- src/conf/virnwfilterobj.c | 30 +++++++++++++++++++++++++++++- src/conf/virnwfilterobj.h | 4 ++++ src/libvirt_private.syms | 2 +- src/nwfilter/nwfilter_driver.c | 2 +- 6 files changed, 35 insertions(+), 34 deletions(-) diff --git a/src/conf/nwfilter_conf.c b/src/conf/nwfilter_conf.c index fba792a..bcff4b6 100644 --- a/src/conf/nwfilter_conf.c +++ b/src/conf/nwfilter_conf.c @@ -2766,33 +2766,6 @@ virNWFilterDefParseFile(const char *filename) } =20 =20 -int -virNWFilterSaveConfig(const char *configDir, - virNWFilterDefPtr def) -{ - int ret =3D -1; - char *xml; - char uuidstr[VIR_UUID_STRING_BUFLEN]; - char *configFile =3D NULL; - - if (!(xml =3D virNWFilterDefFormat(def))) - goto cleanup; - - if (!(configFile =3D virFileBuildPath(configDir, def->name, ".xml"))) - goto cleanup; - - virUUIDFormat(def->uuid, uuidstr); - ret =3D virXMLSaveFile(configFile, - virXMLPickShellSafeComment(def->name, uuidstr), - "nwfilter-edit", xml); - - cleanup: - VIR_FREE(configFile); - VIR_FREE(xml); - return ret; -} - - int nCallbackDriver; #define MAX_CALLBACK_DRIVER 10 static virNWFilterCallbackDriverPtr callbackDrvArray[MAX_CALLBACK_DRIVER]; diff --git a/src/conf/nwfilter_conf.h b/src/conf/nwfilter_conf.h index 4bf5b7c..ac6aee9 100644 --- a/src/conf/nwfilter_conf.h +++ b/src/conf/nwfilter_conf.h @@ -580,10 +580,6 @@ virNWFilterDefParseNode(xmlDocPtr xml, char * virNWFilterDefFormat(const virNWFilterDef *def); =20 -int -virNWFilterSaveConfig(const char *configDir, - virNWFilterDefPtr def); - virNWFilterDefPtr virNWFilterDefParseString(const char *xml); =20 diff --git a/src/conf/virnwfilterobj.c b/src/conf/virnwfilterobj.c index 0343c0a..5834b9d 100644 --- a/src/conf/virnwfilterobj.c +++ b/src/conf/virnwfilterobj.c @@ -478,6 +478,34 @@ virNWFilterObjListExport(virConnectPtr conn, } =20 =20 +int +virNWFilterObjSaveConfig(virNWFilterObjPtr obj, + const char *configDir) +{ + virNWFilterDefPtr def =3D obj->def; + int ret =3D -1; + char *xml; + char uuidstr[VIR_UUID_STRING_BUFLEN]; + char *configFile =3D NULL; + + if (!(xml =3D virNWFilterDefFormat(def))) + goto cleanup; + + if (!(configFile =3D virFileBuildPath(configDir, def->name, ".xml"))) + goto cleanup; + + virUUIDFormat(def->uuid, uuidstr); + ret =3D virXMLSaveFile(configFile, + virXMLPickShellSafeComment(def->name, uuidstr), + "nwfilter-edit", xml); + + cleanup: + VIR_FREE(configFile); + VIR_FREE(xml); + return ret; +} + + static virNWFilterObjPtr virNWFilterObjListLoadConfig(virNWFilterObjListPtr nwfilters, const char *configDir, @@ -512,7 +540,7 @@ virNWFilterObjListLoadConfig(virNWFilterObjListPtr nwfi= lters, * object as a future load would regenerate a UUID and try again, * but the existing config would still exist and can be used. */ if (!objdef->uuid_specified && - virNWFilterSaveConfig(configDir, objdef) < 0) + virNWFilterObjSaveConfig(objdef, configDir) < 0) VIR_INFO("failed to save generated UUID for filter '%s'", objdef->= name); =20 VIR_FREE(configFile); diff --git a/src/conf/virnwfilterobj.h b/src/conf/virnwfilterobj.h index 29d9086..16f4e1b 100644 --- a/src/conf/virnwfilterobj.h +++ b/src/conf/virnwfilterobj.h @@ -98,6 +98,10 @@ virNWFilterObjListExport(virConnectPtr conn, virNWFilterObjListFilter aclfilter); =20 int +virNWFilterObjSaveConfig(virNWFilterObjPtr obj, + const char *configDir); + +int virNWFilterObjListLoadAllConfigs(virNWFilterObjListPtr nwfilters, const char *configDir); =20 diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 429b095..cda5f92 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -744,7 +744,6 @@ virNWFilterRuleIsProtocolEthernet; virNWFilterRuleIsProtocolIPv4; virNWFilterRuleIsProtocolIPv6; virNWFilterRuleProtocolTypeToString; -virNWFilterSaveConfig; virNWFilterTriggerVMFilterRebuild; virNWFilterUnlockFilterUpdates; virNWFilterUnRegisterCallbackDriver; @@ -979,6 +978,7 @@ virNWFilterObjListNew; virNWFilterObjListNumOfNWFilters; virNWFilterObjListRemove; virNWFilterObjLock; +virNWFilterObjSaveConfig; virNWFilterObjTestUnassignDef; virNWFilterObjUnlock; virNWFilterObjWantRemoved; diff --git a/src/nwfilter/nwfilter_driver.c b/src/nwfilter/nwfilter_driver.c index 5e62023..c6139d9 100644 --- a/src/nwfilter/nwfilter_driver.c +++ b/src/nwfilter/nwfilter_driver.c @@ -517,7 +517,7 @@ nwfilterDefineXML(virConnectPtr conn, def =3D NULL; objdef =3D virNWFilterObjGetDef(obj); =20 - if (virNWFilterSaveConfig(driver->configDir, objdef) < 0) { + if (virNWFilterObjSaveConfig(obj, driver->configDir) < 0) { virNWFilterObjListRemove(driver->nwfilters, obj); goto cleanup; } --=20 2.9.4 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Mon Apr 29 05:54:30 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 149639918242382.95226253005546; Fri, 2 Jun 2017 03:26:22 -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 6473F37EEC; Fri, 2 Jun 2017 10:26:20 +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 38EB77813B; Fri, 2 Jun 2017 10:26:20 +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 60E20181A104; Fri, 2 Jun 2017 10:26:13 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v52APjO7029116 for ; Fri, 2 Jun 2017 06:25:45 -0400 Received: by smtp.corp.redhat.com (Postfix) id 1EB3C1822B; Fri, 2 Jun 2017 10:25:45 +0000 (UTC) Received: from localhost.localdomain.com (ovpn-116-108.phx2.redhat.com [10.3.116.108]) by smtp.corp.redhat.com (Postfix) with ESMTP id D14D24DA1D for ; Fri, 2 Jun 2017 10:25:44 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 6473F37EEC Authentication-Results: ext-mx05.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com 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 6473F37EEC From: John Ferlan To: libvir-list@redhat.com Date: Fri, 2 Jun 2017 06:25:27 -0400 Message-Id: <20170602102538.14991-7-jferlan@redhat.com> In-Reply-To: <20170602102538.14991-1-jferlan@redhat.com> References: <20170602102538.14991-1-jferlan@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 06/17] nwfilter: Add configFile into virNWFilterObj 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.29]); Fri, 02 Jun 2017 10:26:21 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" When creating an object, save the configFile name in the object rather than needing to build it up each time for the SaveConfig. This involves adding a @configDir parameter to virNWFilterObjListAssignDef and removing the @configDir from virNWFilterObjSaveConfig. Signed-off-by: John Ferlan --- src/conf/virnwfilterobj.c | 38 ++++++++++++++++++++------------------ src/conf/virnwfilterobj.h | 6 +++--- src/nwfilter/nwfilter_driver.c | 5 +++-- 3 files changed, 26 insertions(+), 23 deletions(-) diff --git a/src/conf/virnwfilterobj.c b/src/conf/virnwfilterobj.c index 5834b9d..ac99f47 100644 --- a/src/conf/virnwfilterobj.c +++ b/src/conf/virnwfilterobj.c @@ -40,6 +40,8 @@ struct _virNWFilterObj { =20 virNWFilterDefPtr def; virNWFilterDefPtr newDef; + + char *configFile; }; =20 struct _virNWFilterObjList { @@ -95,6 +97,7 @@ virNWFilterObjFree(virNWFilterObjPtr obj) if (!obj) return; =20 + VIR_FREE(obj->configFile); virNWFilterDefFree(obj->def); virNWFilterDefFree(obj->newDef); =20 @@ -296,7 +299,8 @@ virNWFilterDefEqual(const virNWFilterDef *def1, =20 virNWFilterObjPtr virNWFilterObjListAssignDef(virNWFilterObjListPtr nwfilters, - virNWFilterDefPtr def) + virNWFilterDefPtr def, + const char *configDir) { virNWFilterObjPtr obj; virNWFilterDefPtr objdef; @@ -360,15 +364,20 @@ virNWFilterObjListAssignDef(virNWFilterObjListPtr nwf= ilters, if (!(obj =3D virNWFilterObjNew())) return NULL; =20 - if (VIR_APPEND_ELEMENT_COPY(nwfilters->objs, - nwfilters->count, obj) < 0) { - virNWFilterObjUnlock(obj); - virNWFilterObjFree(obj); - return NULL; - } + if (!(obj->configFile =3D virFileBuildPath(configDir, def->name, ".xml= "))) + goto error; + + if (VIR_APPEND_ELEMENT_COPY(nwfilters->objs, nwfilters->count, obj) < = 0) + goto error; + obj->def =3D def; =20 return obj; + + error: + virNWFilterObjUnlock(obj); + virNWFilterObjFree(obj); + return NULL; } =20 =20 @@ -479,28 +488,22 @@ virNWFilterObjListExport(virConnectPtr conn, =20 =20 int -virNWFilterObjSaveConfig(virNWFilterObjPtr obj, - const char *configDir) +virNWFilterObjSaveConfig(virNWFilterObjPtr obj) { virNWFilterDefPtr def =3D obj->def; int ret =3D -1; char *xml; char uuidstr[VIR_UUID_STRING_BUFLEN]; - char *configFile =3D NULL; =20 if (!(xml =3D virNWFilterDefFormat(def))) goto cleanup; =20 - if (!(configFile =3D virFileBuildPath(configDir, def->name, ".xml"))) - goto cleanup; - virUUIDFormat(def->uuid, uuidstr); - ret =3D virXMLSaveFile(configFile, + ret =3D virXMLSaveFile(obj->configFile, virXMLPickShellSafeComment(def->name, uuidstr), "nwfilter-edit", xml); =20 cleanup: - VIR_FREE(configFile); VIR_FREE(xml); return ret; } @@ -530,7 +533,7 @@ virNWFilterObjListLoadConfig(virNWFilterObjListPtr nwfi= lters, goto error; } =20 - if (!(obj =3D virNWFilterObjListAssignDef(nwfilters, def))) + if (!(obj =3D virNWFilterObjListAssignDef(nwfilters, def, configDir))) goto error; def =3D NULL; objdef =3D obj->def; @@ -539,8 +542,7 @@ virNWFilterObjListLoadConfig(virNWFilterObjListPtr nwfi= lters, * config to disk. If not successful, no need to fail or remove the * object as a future load would regenerate a UUID and try again, * but the existing config would still exist and can be used. */ - if (!objdef->uuid_specified && - virNWFilterObjSaveConfig(objdef, configDir) < 0) + if (!objdef->uuid_specified && virNWFilterObjSaveConfig(obj) < 0) VIR_INFO("failed to save generated UUID for filter '%s'", objdef->= name); =20 VIR_FREE(configFile); diff --git a/src/conf/virnwfilterobj.h b/src/conf/virnwfilterobj.h index 16f4e1b..e4dadda 100644 --- a/src/conf/virnwfilterobj.h +++ b/src/conf/virnwfilterobj.h @@ -70,7 +70,8 @@ virNWFilterObjListFindByName(virNWFilterObjListPtr nwfilt= ers, =20 virNWFilterObjPtr virNWFilterObjListAssignDef(virNWFilterObjListPtr nwfilters, - virNWFilterDefPtr def); + virNWFilterDefPtr def, + const char *configDir); =20 int virNWFilterObjTestUnassignDef(virNWFilterObjPtr obj); @@ -98,8 +99,7 @@ virNWFilterObjListExport(virConnectPtr conn, virNWFilterObjListFilter aclfilter); =20 int -virNWFilterObjSaveConfig(virNWFilterObjPtr obj, - const char *configDir); +virNWFilterObjSaveConfig(virNWFilterObjPtr obj); =20 int virNWFilterObjListLoadAllConfigs(virNWFilterObjListPtr nwfilters, diff --git a/src/nwfilter/nwfilter_driver.c b/src/nwfilter/nwfilter_driver.c index c6139d9..c740c53 100644 --- a/src/nwfilter/nwfilter_driver.c +++ b/src/nwfilter/nwfilter_driver.c @@ -512,12 +512,13 @@ nwfilterDefineXML(virConnectPtr conn, if (virNWFilterDefineXMLEnsureACL(conn, def) < 0) goto cleanup; =20 - if (!(obj =3D virNWFilterObjListAssignDef(driver->nwfilters, def))) + if (!(obj =3D virNWFilterObjListAssignDef(driver->nwfilters, def, + driver->configDir))) goto cleanup; def =3D NULL; objdef =3D virNWFilterObjGetDef(obj); =20 - if (virNWFilterObjSaveConfig(obj, driver->configDir) < 0) { + if (virNWFilterObjSaveConfig(obj) < 0) { virNWFilterObjListRemove(driver->nwfilters, obj); goto cleanup; } --=20 2.9.4 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Mon Apr 29 05:54:30 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 1496399199820280.1906136798833; Fri, 2 Jun 2017 03:26:39 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id D6E246525; Fri, 2 Jun 2017 10:26: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 A901C83EBB; Fri, 2 Jun 2017 10:26: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 BA1CA18521CB; Fri, 2 Jun 2017 10:26:17 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v52APjcf029128 for ; Fri, 2 Jun 2017 06:25:45 -0400 Received: by smtp.corp.redhat.com (Postfix) id 8BDE91822B; Fri, 2 Jun 2017 10:25:45 +0000 (UTC) Received: from localhost.localdomain.com (ovpn-116-108.phx2.redhat.com [10.3.116.108]) by smtp.corp.redhat.com (Postfix) with ESMTP id 47BD75C549 for ; Fri, 2 Jun 2017 10:25:45 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com D6E246525 Authentication-Results: ext-mx10.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx10.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 D6E246525 From: John Ferlan To: libvir-list@redhat.com Date: Fri, 2 Jun 2017 06:25:28 -0400 Message-Id: <20170602102538.14991-8-jferlan@redhat.com> In-Reply-To: <20170602102538.14991-1-jferlan@redhat.com> References: <20170602102538.14991-1-jferlan@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 07/17] nwfilter: Add @def into virNWFilterObjNew 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.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.39]); Fri, 02 Jun 2017 10:26:38 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Modify the virNWFilterObjNew to take @def as a parameter and consume it. Signed-off-by: John Ferlan --- src/conf/virnwfilterobj.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/conf/virnwfilterobj.c b/src/conf/virnwfilterobj.c index ac99f47..c86b1a9 100644 --- a/src/conf/virnwfilterobj.c +++ b/src/conf/virnwfilterobj.c @@ -51,7 +51,7 @@ struct _virNWFilterObjList { =20 =20 static virNWFilterObjPtr -virNWFilterObjNew(void) +virNWFilterObjNew(virNWFilterDefPtr def) { virNWFilterObjPtr obj; =20 @@ -66,6 +66,8 @@ virNWFilterObjNew(void) } =20 virNWFilterObjLock(obj); + obj->def =3D def; + return obj; } =20 @@ -361,20 +363,21 @@ virNWFilterObjListAssignDef(virNWFilterObjListPtr nwf= ilters, return obj; } =20 - if (!(obj =3D virNWFilterObjNew())) + if (!(obj =3D virNWFilterObjNew(def))) return NULL; + def =3D NULL; + objdef =3D obj->def; =20 - if (!(obj->configFile =3D virFileBuildPath(configDir, def->name, ".xml= "))) + if (!(obj->configFile =3D virFileBuildPath(configDir, objdef->name, ".= xml"))) goto error; =20 if (VIR_APPEND_ELEMENT_COPY(nwfilters->objs, nwfilters->count, obj) < = 0) goto error; =20 - obj->def =3D def; - return obj; =20 error: + obj->def =3D NULL; virNWFilterObjUnlock(obj); virNWFilterObjFree(obj); return NULL; --=20 2.9.4 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Mon Apr 29 05:54:30 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 1496399160462921.7820581736005; Fri, 2 Jun 2017 03:26:00 -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 5EE1137EE1; Fri, 2 Jun 2017 10:25:58 +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 2B83C7A4C0; Fri, 2 Jun 2017 10:25: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 AEB37180BAF7; Fri, 2 Jun 2017 10:25:57 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v52APkep029133 for ; Fri, 2 Jun 2017 06:25:46 -0400 Received: by smtp.corp.redhat.com (Postfix) id 0170E1822B; Fri, 2 Jun 2017 10:25:46 +0000 (UTC) Received: from localhost.localdomain.com (ovpn-116-108.phx2.redhat.com [10.3.116.108]) by smtp.corp.redhat.com (Postfix) with ESMTP id B30F35C549 for ; Fri, 2 Jun 2017 10:25:45 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 5EE1137EE1 Authentication-Results: ext-mx05.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com 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 5EE1137EE1 From: John Ferlan To: libvir-list@redhat.com Date: Fri, 2 Jun 2017 06:25:29 -0400 Message-Id: <20170602102538.14991-9-jferlan@redhat.com> In-Reply-To: <20170602102538.14991-1-jferlan@redhat.com> References: <20170602102538.14991-1-jferlan@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 08/17] nwfilter: Clean up a couple nwfilter_driver error paths 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]); Fri, 02 Jun 2017 10:25:59 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" No need to goto cleanup and check "if (obj)" if we know (obj) isn't there, so just return immediately. Signed-off-by: John Ferlan --- src/nwfilter/nwfilter_driver.c | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/src/nwfilter/nwfilter_driver.c b/src/nwfilter/nwfilter_driver.c index c740c53..d527769 100644 --- a/src/nwfilter/nwfilter_driver.c +++ b/src/nwfilter/nwfilter_driver.c @@ -391,7 +391,7 @@ nwfilterLookupByUUID(virConnectPtr conn, nwfilterDriverUnlock(); =20 if (!obj) - goto cleanup; + return NULL; def =3D virNWFilterObjGetDef(obj); =20 if (virNWFilterLookupByUUIDEnsureACL(conn, def) < 0) @@ -400,8 +400,7 @@ nwfilterLookupByUUID(virConnectPtr conn, ret =3D virGetNWFilter(conn, def->name, def->uuid); =20 cleanup: - if (obj) - virNWFilterObjUnlock(obj); + virNWFilterObjUnlock(obj); return ret; } =20 @@ -421,7 +420,7 @@ nwfilterLookupByName(virConnectPtr conn, if (!obj) { virReportError(VIR_ERR_NO_NWFILTER, _("no nwfilter with matching name '%s'"), name); - goto cleanup; + return NULL; } def =3D virNWFilterObjGetDef(obj); =20 @@ -431,8 +430,7 @@ nwfilterLookupByName(virConnectPtr conn, ret =3D virGetNWFilter(conn, def->name, def->uuid); =20 cleanup: - if (obj) - virNWFilterObjUnlock(obj); + virNWFilterObjUnlock(obj); return ret; } =20 @@ -595,7 +593,7 @@ nwfilterGetXMLDesc(virNWFilterPtr nwfilter, nwfilterDriverUnlock(); =20 if (!obj) - goto cleanup; + return NULL; def =3D virNWFilterObjGetDef(obj); =20 if (virNWFilterGetXMLDescEnsureACL(nwfilter->conn, def) < 0) @@ -604,8 +602,7 @@ nwfilterGetXMLDesc(virNWFilterPtr nwfilter, ret =3D virNWFilterDefFormat(def); =20 cleanup: - if (obj) - virNWFilterObjUnlock(obj); + virNWFilterObjUnlock(obj); return ret; } =20 --=20 2.9.4 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Mon Apr 29 05:54:30 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 1496399205842462.5041939079489; Fri, 2 Jun 2017 03:26:45 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id E824F40F04; Fri, 2 Jun 2017 10:26:43 +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 B2DF57D553; Fri, 2 Jun 2017 10:26:43 +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 02C24180BAFF; Fri, 2 Jun 2017 10:26:22 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v52APkTQ029139 for ; Fri, 2 Jun 2017 06:25:46 -0400 Received: by smtp.corp.redhat.com (Postfix) id 94B031822B; Fri, 2 Jun 2017 10:25:46 +0000 (UTC) Received: from localhost.localdomain.com (ovpn-116-108.phx2.redhat.com [10.3.116.108]) by smtp.corp.redhat.com (Postfix) with ESMTP id 51CD34DA0B for ; Fri, 2 Jun 2017 10:25:46 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com E824F40F04 Authentication-Results: ext-mx06.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx06.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 E824F40F04 From: John Ferlan To: libvir-list@redhat.com Date: Fri, 2 Jun 2017 06:25:30 -0400 Message-Id: <20170602102538.14991-10-jferlan@redhat.com> In-Reply-To: <20170602102538.14991-1-jferlan@redhat.com> References: <20170602102538.14991-1-jferlan@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 09/17] nwfilter: Consistently name virNWFilterPtr in driver 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.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.30]); Fri, 02 Jun 2017 10:26:44 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Use @nwfilter always for the name Signed-off-by: John Ferlan --- src/nwfilter/nwfilter_driver.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/nwfilter/nwfilter_driver.c b/src/nwfilter/nwfilter_driver.c index d527769..7db4f87 100644 --- a/src/nwfilter/nwfilter_driver.c +++ b/src/nwfilter/nwfilter_driver.c @@ -384,7 +384,7 @@ nwfilterLookupByUUID(virConnectPtr conn, { virNWFilterObjPtr obj; virNWFilterDefPtr def; - virNWFilterPtr ret =3D NULL; + virNWFilterPtr nwfilter =3D NULL; =20 nwfilterDriverLock(); obj =3D nwfilterObjFromNWFilter(uuid); @@ -397,11 +397,11 @@ nwfilterLookupByUUID(virConnectPtr conn, if (virNWFilterLookupByUUIDEnsureACL(conn, def) < 0) goto cleanup; =20 - ret =3D virGetNWFilter(conn, def->name, def->uuid); + nwfilter =3D virGetNWFilter(conn, def->name, def->uuid); =20 cleanup: virNWFilterObjUnlock(obj); - return ret; + return nwfilter; } =20 =20 @@ -411,7 +411,7 @@ nwfilterLookupByName(virConnectPtr conn, { virNWFilterObjPtr obj; virNWFilterDefPtr def; - virNWFilterPtr ret =3D NULL; + virNWFilterPtr nwfilter =3D NULL; =20 nwfilterDriverLock(); obj =3D virNWFilterObjListFindByName(driver->nwfilters, name); @@ -427,11 +427,11 @@ nwfilterLookupByName(virConnectPtr conn, if (virNWFilterLookupByNameEnsureACL(conn, def) < 0) goto cleanup; =20 - ret =3D virGetNWFilter(conn, def->name, def->uuid); + nwfilter =3D virGetNWFilter(conn, def->name, def->uuid); =20 cleanup: virNWFilterObjUnlock(obj); - return ret; + return nwfilter; } =20 =20 @@ -467,7 +467,7 @@ nwfilterConnectListNWFilters(virConnectPtr conn, =20 static int nwfilterConnectListAllNWFilters(virConnectPtr conn, - virNWFilterPtr **filters, + virNWFilterPtr **nwfilters, unsigned int flags) { int ret; @@ -478,7 +478,7 @@ nwfilterConnectListAllNWFilters(virConnectPtr conn, return -1; =20 nwfilterDriverLock(); - ret =3D virNWFilterObjListExport(conn, driver->nwfilters, filters, + ret =3D virNWFilterObjListExport(conn, driver->nwfilters, nwfilters, virConnectListAllNWFiltersCheckACL); nwfilterDriverUnlock(); =20 @@ -492,7 +492,7 @@ nwfilterDefineXML(virConnectPtr conn, virNWFilterDefPtr def; virNWFilterObjPtr obj =3D NULL; virNWFilterDefPtr objdef; - virNWFilterPtr ret =3D NULL; + virNWFilterPtr nwfilter =3D NULL; =20 if (!driver->privileged) { virReportError(VIR_ERR_OPERATION_INVALID, "%s", @@ -521,7 +521,7 @@ nwfilterDefineXML(virConnectPtr conn, goto cleanup; } =20 - ret =3D virGetNWFilter(conn, objdef->name, objdef->uuid); + nwfilter =3D virGetNWFilter(conn, objdef->name, objdef->uuid); =20 cleanup: virNWFilterDefFree(def); @@ -531,7 +531,7 @@ nwfilterDefineXML(virConnectPtr conn, virNWFilterCallbackDriversUnlock(); virNWFilterUnlockFilterUpdates(); nwfilterDriverUnlock(); - return ret; + return nwfilter; } =20 =20 --=20 2.9.4 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Mon Apr 29 05:54:30 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 1496399161131666.7400100236995; Fri, 2 Jun 2017 03:26:01 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id EB23880C2A; Fri, 2 Jun 2017 10:25: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 A897587E5D; Fri, 2 Jun 2017 10:25: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 39CA54A48E; Fri, 2 Jun 2017 10:25:58 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v52APlhT029144 for ; Fri, 2 Jun 2017 06:25:47 -0400 Received: by smtp.corp.redhat.com (Postfix) id 0DB1E1822B; Fri, 2 Jun 2017 10:25:47 +0000 (UTC) Received: from localhost.localdomain.com (ovpn-116-108.phx2.redhat.com [10.3.116.108]) by smtp.corp.redhat.com (Postfix) with ESMTP id BF9E04DA1D for ; Fri, 2 Jun 2017 10:25:46 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com EB23880C2A Authentication-Results: ext-mx02.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx02.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 EB23880C2A From: John Ferlan To: libvir-list@redhat.com Date: Fri, 2 Jun 2017 06:25:31 -0400 Message-Id: <20170602102538.14991-11-jferlan@redhat.com> In-Reply-To: <20170602102538.14991-1-jferlan@redhat.com> References: <20170602102538.14991-1-jferlan@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 10/17] nwfilter: Rename virNWFilterInstantiate 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.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.26]); Fri, 02 Jun 2017 10:25:59 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Rename to virNWFilterDoInstantiate to better describe the action. Also fix the @vmuuid parameter to not have the ATTRIBUTE_UNUSED since it is used in the call to virNWFilterDHCPSnoopReq. Signed-off-by: John Ferlan --- src/nwfilter/nwfilter_gentech_driver.c | 46 +++++++++++++++---------------= ---- 1 file changed, 20 insertions(+), 26 deletions(-) diff --git a/src/nwfilter/nwfilter_gentech_driver.c b/src/nwfilter/nwfilter= _gentech_driver.c index 82e20de..9c11cb3 100644 --- a/src/nwfilter/nwfilter_gentech_driver.c +++ b/src/nwfilter/nwfilter_gentech_driver.c @@ -59,7 +59,7 @@ static virNWFilterTechDriverPtr filter_tech_drivers[] =3D= { /* Serializes instantiation of filters. This is necessary * to avoid lock ordering deadlocks. eg __virNWFilterInstantiateFilter * will hold a lock on a virNWFilterObjPtr. This in turn invokes - * virNWFilterInstantiate which invokes virNWFilterDetermineMissingVarsRec + * virNWFilterDoInstantiate which invokes virNWFilterDetermineMissingVarsR= ec * which invokes virNWFilterObjListFindByName. This iterates over every si= ngle * virNWFilterObjPtr in the list. So if 2 threads try to instantiate a * filter in parallel, they'll both hold 1 lock at the top level in @@ -604,7 +604,7 @@ virNWFilterDetermineMissingVarsRec(virNWFilterDefPtr fi= lter, =20 =20 /** - * virNWFilterInstantiate: + * virNWFilterDoInstantiate: * @vmuuid: The UUID of the VM * @techdriver: The driver to use for instantiation * @filter: The filter to instantiate @@ -624,18 +624,19 @@ virNWFilterDetermineMissingVarsRec(virNWFilterDefPtr = filter, * Call this function while holding the NWFilter filter update lock */ static int -virNWFilterInstantiate(const unsigned char *vmuuid ATTRIBUTE_UNUSED, - virNWFilterTechDriverPtr techdriver, - virNWFilterDefPtr filter, - const char *ifname, - int ifindex, - const char *linkdev, - virNWFilterHashTablePtr vars, - enum instCase useNewFilter, bool *foundNewFilter, - bool teardownOld, - const virMacAddr *macaddr, - virNWFilterDriverStatePtr driver, - bool forceWithPendingReq) +virNWFilterDoInstantiate(const unsigned char *vmuuid, + virNWFilterTechDriverPtr techdriver, + virNWFilterDefPtr filter, + const char *ifname, + int ifindex, + const char *linkdev, + virNWFilterHashTablePtr vars, + enum instCase useNewFilter, + bool *foundNewFilter, + bool teardownOld, + const virMacAddr *macaddr, + virNWFilterDriverStatePtr driver, + bool forceWithPendingReq) { int rc; virNWFilterInst inst; @@ -867,18 +868,11 @@ __virNWFilterInstantiateFilter(virNWFilterDriverState= Ptr driver, break; } =20 - rc =3D virNWFilterInstantiate(vmuuid, - techdriver, - filter, - ifname, - ifindex, - linkdev, - vars, - useNewFilter, foundNewFilter, - teardownOld, - macaddr, - driver, - forceWithPendingReq); + rc =3D virNWFilterDoInstantiate(vmuuid, techdriver, filter, + ifname, ifindex, linkdev, + vars, useNewFilter, foundNewFilter, + teardownOld, macaddr, driver, + forceWithPendingReq); =20 virNWFilterHashTableFree(vars); =20 --=20 2.9.4 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Mon Apr 29 05:54:30 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 1496399166497254.93872626618554; Fri, 2 Jun 2017 03:26:06 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 5162480F95; Fri, 2 Jun 2017 10:26:04 +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 18FA783EBC; Fri, 2 Jun 2017 10:26:04 +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 9E51A180BAFC; Fri, 2 Jun 2017 10:26:03 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v52APl0x029149 for ; Fri, 2 Jun 2017 06:25:47 -0400 Received: by smtp.corp.redhat.com (Postfix) id 781761822B; Fri, 2 Jun 2017 10:25:47 +0000 (UTC) Received: from localhost.localdomain.com (ovpn-116-108.phx2.redhat.com [10.3.116.108]) by smtp.corp.redhat.com (Postfix) with ESMTP id 3759B5C549 for ; Fri, 2 Jun 2017 10:25:47 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 5162480F95 Authentication-Results: ext-mx03.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx03.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 5162480F95 From: John Ferlan To: libvir-list@redhat.com Date: Fri, 2 Jun 2017 06:25:32 -0400 Message-Id: <20170602102538.14991-12-jferlan@redhat.com> In-Reply-To: <20170602102538.14991-1-jferlan@redhat.com> References: <20170602102538.14991-1-jferlan@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 11/17] nwfilter: Rename __virNWFilterInstantiateFilter 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.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.27]); Fri, 02 Jun 2017 10:26:05 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Rename to virNWFilterInstantiateFilterUpdate and alter the callers to not have one parameter per line. Signed-off-by: John Ferlan --- src/nwfilter/nwfilter_gentech_driver.c | 62 +++++++++++++-----------------= ---- 1 file changed, 24 insertions(+), 38 deletions(-) diff --git a/src/nwfilter/nwfilter_gentech_driver.c b/src/nwfilter/nwfilter= _gentech_driver.c index 9c11cb3..81b12bb 100644 --- a/src/nwfilter/nwfilter_gentech_driver.c +++ b/src/nwfilter/nwfilter_gentech_driver.c @@ -57,13 +57,13 @@ static virNWFilterTechDriverPtr filter_tech_drivers[] = =3D { }; =20 /* Serializes instantiation of filters. This is necessary - * to avoid lock ordering deadlocks. eg __virNWFilterInstantiateFilter + * to avoid lock ordering deadlocks. eg virNWFilterInstantiateFilterUpdate * will hold a lock on a virNWFilterObjPtr. This in turn invokes * virNWFilterDoInstantiate which invokes virNWFilterDetermineMissingVarsR= ec * which invokes virNWFilterObjListFindByName. This iterates over every si= ngle * virNWFilterObjPtr in the list. So if 2 threads try to instantiate a * filter in parallel, they'll both hold 1 lock at the top level in - * __virNWFilterInstantiateFilter which will cause the other thread + * virNWFilterInstantiateFilterUpdate which will cause the other thread * to deadlock in virNWFilterObjListFindByName. * * XXX better long term solution is to make virNWFilterObjList use a @@ -776,18 +776,18 @@ virNWFilterDoInstantiate(const unsigned char *vmuuid, * Call this function while holding the NWFilter filter update lock */ static int -__virNWFilterInstantiateFilter(virNWFilterDriverStatePtr driver, - const unsigned char *vmuuid, - bool teardownOld, - const char *ifname, - int ifindex, - const char *linkdev, - const virMacAddr *macaddr, - const char *filtername, - virNWFilterHashTablePtr filterparams, - enum instCase useNewFilter, - bool forceWithPendingReq, - bool *foundNewFilter) +virNWFilterInstantiateFilterUpdate(virNWFilterDriverStatePtr driver, + const unsigned char *vmuuid, + bool teardownOld, + const char *ifname, + int ifindex, + const char *linkdev, + const virMacAddr *macaddr, + const char *filtername, + virNWFilterHashTablePtr filterparams, + enum instCase useNewFilter, + bool forceWithPendingReq, + bool *foundNewFilter) { int rc; const char *drvname =3D EBIPTABLES_DRIVER_ID; @@ -917,18 +917,11 @@ _virNWFilterInstantiateFilter(virNWFilterDriverStateP= tr driver, goto cleanup; } =20 - rc =3D __virNWFilterInstantiateFilter(driver, - vmuuid, - teardownOld, - net->ifname, - ifindex, - linkdev, - &net->mac, - net->filter, - net->filterparams, - useNewFilter, - false, - foundNewFilter); + rc =3D virNWFilterInstantiateFilterUpdate(driver, vmuuid, teardownOld, + net->ifname, ifindex, linkdev, + &net->mac, net->filter, + net->filterparams, useNewFilte= r, + false, foundNewFilter); =20 cleanup: virMutexUnlock(&updateMutex); @@ -953,18 +946,11 @@ virNWFilterInstantiateFilterLate(virNWFilterDriverSta= tePtr driver, virNWFilterReadLockFilterUpdates(); virMutexLock(&updateMutex); =20 - rc =3D __virNWFilterInstantiateFilter(driver, - vmuuid, - true, - ifname, - ifindex, - linkdev, - macaddr, - filtername, - filterparams, - INSTANTIATE_ALWAYS, - true, - &foundNewFilter); + rc =3D virNWFilterInstantiateFilterUpdate(driver, vmuuid, true, + ifname, ifindex, linkdev, + macaddr, filtername, filterpar= ams, + INSTANTIATE_ALWAYS, true, + &foundNewFilter); if (rc < 0) { /* something went wrong... 'DOWN' the interface */ if ((virNetDevValidateConfig(ifname, NULL, ifindex) <=3D 0) || --=20 2.9.4 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Mon Apr 29 05:54:30 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 1496399166824858.3189372093055; Fri, 2 Jun 2017 03:26:06 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id CB26EC04B940; Fri, 2 Jun 2017 10:26:04 +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 8624191002; Fri, 2 Jun 2017 10:26:04 +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 1DC8A4A494; Fri, 2 Jun 2017 10:26:04 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v52APlLR029162 for ; Fri, 2 Jun 2017 06:25:47 -0400 Received: by smtp.corp.redhat.com (Postfix) id E610B4DA01; Fri, 2 Jun 2017 10:25:47 +0000 (UTC) Received: from localhost.localdomain.com (ovpn-116-108.phx2.redhat.com [10.3.116.108]) by smtp.corp.redhat.com (Postfix) with ESMTP id A14CD1822B for ; Fri, 2 Jun 2017 10:25:47 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com CB26EC04B940 Authentication-Results: ext-mx07.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com 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 CB26EC04B940 From: John Ferlan To: libvir-list@redhat.com Date: Fri, 2 Jun 2017 06:25:33 -0400 Message-Id: <20170602102538.14991-13-jferlan@redhat.com> In-Reply-To: <20170602102538.14991-1-jferlan@redhat.com> References: <20170602102538.14991-1-jferlan@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 12/17] nwfilter: Rename _virNWFilterInstantiateFilter 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.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.31]); Fri, 02 Jun 2017 10:26:05 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" New API will be virNWFilterInstantiateFilterInternal as it's called from the virNWFilterInstantiateFilter and virNWFilterUpdateInstantiateFilter. Signed-off-by: John Ferlan --- src/nwfilter/nwfilter_gentech_driver.c | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/nwfilter/nwfilter_gentech_driver.c b/src/nwfilter/nwfilter= _gentech_driver.c index 81b12bb..5798371 100644 --- a/src/nwfilter/nwfilter_gentech_driver.c +++ b/src/nwfilter/nwfilter_gentech_driver.c @@ -890,12 +890,12 @@ virNWFilterInstantiateFilterUpdate(virNWFilterDriverS= tatePtr driver, =20 =20 static int -_virNWFilterInstantiateFilter(virNWFilterDriverStatePtr driver, - const unsigned char *vmuuid, - const virDomainNetDef *net, - bool teardownOld, - enum instCase useNewFilter, - bool *foundNewFilter) +virNWFilterInstantiateFilterInternal(virNWFilterDriverStatePtr driver, + const unsigned char *vmuuid, + const virDomainNetDef *net, + bool teardownOld, + enum instCase useNewFilter, + bool *foundNewFilter) { const char *linkdev =3D (net->type =3D=3D VIR_DOMAIN_NET_TYPE_DIRECT) ? net->data.direct.linkdev @@ -975,10 +975,10 @@ virNWFilterInstantiateFilter(virNWFilterDriverStatePt= r driver, { bool foundNewFilter =3D false; =20 - return _virNWFilterInstantiateFilter(driver, vmuuid, net, - 1, - INSTANTIATE_ALWAYS, - &foundNewFilter); + return virNWFilterInstantiateFilterInternal(driver, vmuuid, net, + 1, + INSTANTIATE_ALWAYS, + &foundNewFilter); } =20 =20 @@ -990,10 +990,10 @@ virNWFilterUpdateInstantiateFilter(virNWFilterDriverS= tatePtr driver, { bool foundNewFilter =3D false; =20 - int rc =3D _virNWFilterInstantiateFilter(driver, vmuuid, net, - 0, - INSTANTIATE_FOLLOW_NEWFILTER, - &foundNewFilter); + int rc =3D virNWFilterInstantiateFilterInternal(driver, vmuuid, net, + 0, + INSTANTIATE_FOLLOW_NEWFI= LTER, + &foundNewFilter); =20 *skipIface =3D !foundNewFilter; return rc; --=20 2.9.4 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Mon Apr 29 05:54:30 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 1496399217170134.01895899423528; Fri, 2 Jun 2017 03:26:57 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 2CB47804F1; Fri, 2 Jun 2017 10:26:55 +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 00CC27D553; Fri, 2 Jun 2017 10:26:55 +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 BD4EB41F65; Fri, 2 Jun 2017 10:26:26 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v52APmuX029172 for ; Fri, 2 Jun 2017 06:25:48 -0400 Received: by smtp.corp.redhat.com (Postfix) id 5C7AD1822B; Fri, 2 Jun 2017 10:25:48 +0000 (UTC) Received: from localhost.localdomain.com (ovpn-116-108.phx2.redhat.com [10.3.116.108]) by smtp.corp.redhat.com (Postfix) with ESMTP id 1926B4DA20 for ; Fri, 2 Jun 2017 10:25:48 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 2CB47804F1 Authentication-Results: ext-mx03.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx03.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 2CB47804F1 From: John Ferlan To: libvir-list@redhat.com Date: Fri, 2 Jun 2017 06:25:34 -0400 Message-Id: <20170602102538.14991-14-jferlan@redhat.com> In-Reply-To: <20170602102538.14991-1-jferlan@redhat.com> References: <20170602102538.14991-1-jferlan@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 13/17] nwfilter: Introduce virNWFilterObjListFindInstantiateFilter 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.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.27]); Fri, 02 Jun 2017 10:26:56 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Create a common API to handle the instantiation path filter lookup. Signed-off-by: John Ferlan --- src/conf/virnwfilterobj.c | 23 +++++++ src/conf/virnwfilterobj.h | 4 ++ src/libvirt_private.syms | 1 + src/nwfilter/nwfilter_gentech_driver.c | 119 ++++++++++++-----------------= ---- 4 files changed, 70 insertions(+), 77 deletions(-) diff --git a/src/conf/virnwfilterobj.c b/src/conf/virnwfilterobj.c index c86b1a9..b21b570 100644 --- a/src/conf/virnwfilterobj.c +++ b/src/conf/virnwfilterobj.c @@ -195,6 +195,29 @@ virNWFilterObjListFindByName(virNWFilterObjListPtr nwf= ilters, } =20 =20 +virNWFilterObjPtr +virNWFilterObjListFindInstantiateFilter(virNWFilterObjListPtr nwfilters, + const char *filtername) +{ + virNWFilterObjPtr obj; + + if (!(obj =3D virNWFilterObjListFindByName(nwfilters, filtername))) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("referenced filter '%s' is missing"), filtername); + return NULL; + } + + if (virNWFilterObjWantRemoved(obj)) { + virReportError(VIR_ERR_NO_NWFILTER, + _("Filter '%s' is in use."), filtername); + virNWFilterObjUnlock(obj); + return NULL; + } + + return obj; +} + + static int _virNWFilterObjListDefLoopDetect(virNWFilterObjListPtr nwfilters, virNWFilterDefPtr def, diff --git a/src/conf/virnwfilterobj.h b/src/conf/virnwfilterobj.h index e4dadda..85c8ead 100644 --- a/src/conf/virnwfilterobj.h +++ b/src/conf/virnwfilterobj.h @@ -69,6 +69,10 @@ virNWFilterObjListFindByName(virNWFilterObjListPtr nwfil= ters, const char *name); =20 virNWFilterObjPtr +virNWFilterObjListFindInstantiateFilter(virNWFilterObjListPtr nwfilters, + const char *filtername); + +virNWFilterObjPtr virNWFilterObjListAssignDef(virNWFilterObjListPtr nwfilters, virNWFilterDefPtr def, const char *configDir); diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index cda5f92..ee19cb9 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -971,6 +971,7 @@ virNWFilterObjListAssignDef; virNWFilterObjListExport; virNWFilterObjListFindByName; virNWFilterObjListFindByUUID; +virNWFilterObjListFindInstantiateFilter; virNWFilterObjListFree; virNWFilterObjListGetNames; virNWFilterObjListLoadAllConfigs; diff --git a/src/nwfilter/nwfilter_gentech_driver.c b/src/nwfilter/nwfilter= _gentech_driver.c index 5798371..68a2ddb 100644 --- a/src/nwfilter/nwfilter_gentech_driver.c +++ b/src/nwfilter/nwfilter_gentech_driver.c @@ -60,11 +60,11 @@ static virNWFilterTechDriverPtr filter_tech_drivers[] = =3D { * to avoid lock ordering deadlocks. eg virNWFilterInstantiateFilterUpdate * will hold a lock on a virNWFilterObjPtr. This in turn invokes * virNWFilterDoInstantiate which invokes virNWFilterDetermineMissingVarsR= ec - * which invokes virNWFilterObjListFindByName. This iterates over every si= ngle - * virNWFilterObjPtr in the list. So if 2 threads try to instantiate a - * filter in parallel, they'll both hold 1 lock at the top level in - * virNWFilterInstantiateFilterUpdate which will cause the other thread - * to deadlock in virNWFilterObjListFindByName. + * which invokes virNWFilterObjListFindInstantiateFilter. This iterates ov= er + * every single virNWFilterObjPtr in the list. So if 2 threads try to + * instantiate a filter in parallel, they'll both hold 1 lock at the top l= evel + * in virNWFilterInstantiateFilterUpdate which will cause the other thread + * to deadlock in virNWFilterObjListFindInstantiateFilter. * * XXX better long term solution is to make virNWFilterObjList use a * hash table as is done for virDomainObjList. You can then get @@ -383,20 +383,9 @@ virNWFilterIncludeDefToRuleInst(virNWFilterDriverState= Ptr driver, int ret =3D -1; =20 VIR_DEBUG("Instantiating filter %s", inc->filterref); - obj =3D virNWFilterObjListFindByName(driver->nwfilters, - inc->filterref); - if (!obj) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("referenced filter '%s' is missing"), - inc->filterref); - goto cleanup; - } - if (virNWFilterObjWantRemoved(obj)) { - virReportError(VIR_ERR_NO_NWFILTER, - _("Filter '%s' is in use."), - inc->filterref); + if (!(obj =3D virNWFilterObjListFindInstantiateFilter(driver->nwfilter= s, + inc->filterref))) goto cleanup; - } =20 /* create a temporary hashmap for depth-first tree traversal */ if (!(tmpvars =3D virNWFilterCreateVarsFrom(inc->params, @@ -545,58 +534,46 @@ virNWFilterDetermineMissingVarsRec(virNWFilterDefPtr = filter, break; } else if (inc) { VIR_DEBUG("Following filter %s", inc->filterref); - obj =3D virNWFilterObjListFindByName(driver->nwfilters, inc->f= ilterref); - if (obj) { - - if (virNWFilterObjWantRemoved(obj)) { - virReportError(VIR_ERR_NO_NWFILTER, - _("Filter '%s' is in use."), - inc->filterref); - rc =3D -1; - virNWFilterObjUnlock(obj); - break; - } + if (!(obj =3D + virNWFilterObjListFindInstantiateFilter(driver->nwfilter= s, + inc->filterref))= ) { + rc =3D -1; + break; + } =20 - /* create a temporary hashmap for depth-first tree travers= al */ - virNWFilterHashTablePtr tmpvars =3D - virNWFilterCreateVarsFrom(inc->param= s, - vars); - if (!tmpvars) { - rc =3D -1; - virNWFilterObjUnlock(obj); - break; - } + /* create a temporary hashmap for depth-first tree traversal */ + virNWFilterHashTablePtr tmpvars =3D + virNWFilterCreateVarsFrom(inc->params, + vars); + if (!tmpvars) { + rc =3D -1; + virNWFilterObjUnlock(obj); + break; + } =20 - next_filter =3D virNWFilterObjGetDef(obj); + next_filter =3D virNWFilterObjGetDef(obj); =20 - switch (useNewFilter) { - case INSTANTIATE_FOLLOW_NEWFILTER: - newNext_filter =3D virNWFilterObjGetNewDef(obj); - if (newNext_filter) - next_filter =3D newNext_filter; - break; - case INSTANTIATE_ALWAYS: - break; - } + switch (useNewFilter) { + case INSTANTIATE_FOLLOW_NEWFILTER: + newNext_filter =3D virNWFilterObjGetNewDef(obj); + if (newNext_filter) + next_filter =3D newNext_filter; + break; + case INSTANTIATE_ALWAYS: + break; + } =20 - rc =3D virNWFilterDetermineMissingVarsRec(next_filter, - tmpvars, - missing_vars, - useNewFilter, - driver); + rc =3D virNWFilterDetermineMissingVarsRec(next_filter, + tmpvars, + missing_vars, + useNewFilter, + driver); =20 - virNWFilterHashTableFree(tmpvars); + virNWFilterHashTableFree(tmpvars); =20 - virNWFilterObjUnlock(obj); - if (rc < 0) - break; - } else { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("referenced filter '%s' is missing"), - inc->filterref); - rc =3D -1; + virNWFilterObjUnlock(obj); + if (rc < 0) break; - } } } return rc; @@ -813,21 +790,9 @@ virNWFilterInstantiateFilterUpdate(virNWFilterDriverSt= atePtr driver, =20 VIR_DEBUG("filter name: %s", filtername); =20 - obj =3D virNWFilterObjListFindByName(driver->nwfilters, filtername); - if (!obj) { - virReportError(VIR_ERR_NO_NWFILTER, - _("Could not find filter '%s'"), - filtername); + if (!(obj =3D virNWFilterObjListFindInstantiateFilter(driver->nwfilter= s, + filtername))) return -1; - } - - if (virNWFilterObjWantRemoved(obj)) { - virReportError(VIR_ERR_NO_NWFILTER, - _("Filter '%s' is in use."), - filtername); - rc =3D -1; - goto err_exit; - } =20 virMacAddrFormat(macaddr, vmmacaddr); if (VIR_STRDUP(str_macaddr, vmmacaddr) < 0) { --=20 2.9.4 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Mon Apr 29 05:54:30 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 1496399173139323.500268552153; Fri, 2 Jun 2017 03:26:13 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 37BE7C04B31E; Fri, 2 Jun 2017 10:26:11 +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 0405783EBC; Fri, 2 Jun 2017 10:26:11 +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 754C14A496; Fri, 2 Jun 2017 10:26:08 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v52APmaa029187 for ; Fri, 2 Jun 2017 06:25:48 -0400 Received: by smtp.corp.redhat.com (Postfix) id C3DDB4DA1D; Fri, 2 Jun 2017 10:25:48 +0000 (UTC) Received: from localhost.localdomain.com (ovpn-116-108.phx2.redhat.com [10.3.116.108]) by smtp.corp.redhat.com (Postfix) with ESMTP id 82AFD5C549 for ; Fri, 2 Jun 2017 10:25:48 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 37BE7C04B31E Authentication-Results: ext-mx07.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com 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 37BE7C04B31E From: John Ferlan To: libvir-list@redhat.com Date: Fri, 2 Jun 2017 06:25:35 -0400 Message-Id: <20170602102538.14991-15-jferlan@redhat.com> In-Reply-To: <20170602102538.14991-1-jferlan@redhat.com> References: <20170602102538.14991-1-jferlan@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 14/17] nwfilter: Add @refs logic to __virNWFilterObj 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.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.31]); Fri, 02 Jun 2017 10:26:11 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" "Simple" conversion to the virObjectLockable object isn't quite possible yet because the nwfilter lock requires usage of recursive locking due to algorithms handing filter ""'s and ""'s. The list search logic would also benefit from using hash tables for lookups. So this patch is step 1 in the process - add the @refs to _virNWFilterObj and modify the algorithms to use (a temporary) virNWFilterObj{Ref|Unref} in order to set things up for the list logic to utilize virObjectLockable hash tables. Signed-off-by: John Ferlan --- src/conf/virnwfilterobj.c | 75 ++++++++++++++++++++++++++----= ---- src/conf/virnwfilterobj.h | 15 ++++--- src/libvirt_private.syms | 5 ++- src/nwfilter/nwfilter_driver.c | 13 +++--- src/nwfilter/nwfilter_gentech_driver.c | 11 +++-- 5 files changed, 80 insertions(+), 39 deletions(-) diff --git a/src/conf/virnwfilterobj.c b/src/conf/virnwfilterobj.c index b21b570..99be59c 100644 --- a/src/conf/virnwfilterobj.c +++ b/src/conf/virnwfilterobj.c @@ -23,6 +23,7 @@ #include "datatypes.h" =20 #include "viralloc.h" +#include "viratomic.h" #include "virerror.h" #include "virfile.h" #include "virlog.h" @@ -33,8 +34,15 @@ =20 VIR_LOG_INIT("conf.virnwfilterobj"); =20 +static void +virNWFilterObjLock(virNWFilterObjPtr obj); + +static void +virNWFilterObjUnlock(virNWFilterObjPtr obj); + struct _virNWFilterObj { virMutex lock; + int refs; =20 bool wantRemoved; =20 @@ -67,11 +75,24 @@ virNWFilterObjNew(virNWFilterDefPtr def) =20 virNWFilterObjLock(obj); obj->def =3D def; + virAtomicIntSet(&obj->refs, 1); =20 return obj; } =20 =20 +void +virNWFilterObjEndAPI(virNWFilterObjPtr *obj) +{ + if (!*obj) + return; + + virNWFilterObjUnlock(*obj); + virNWFilterObjUnref(*obj); + *obj =3D NULL; +} + + virNWFilterDefPtr virNWFilterObjGetDef(virNWFilterObjPtr obj) { @@ -109,12 +130,33 @@ virNWFilterObjFree(virNWFilterObjPtr obj) } =20 =20 +virNWFilterObjPtr +virNWFilterObjRef(virNWFilterObjPtr obj) +{ + if (obj) + virAtomicIntInc(&obj->refs); + return obj; +} + + +bool +virNWFilterObjUnref(virNWFilterObjPtr obj) +{ + bool lastRef; + if (obj) + return false; + if ((lastRef =3D virAtomicIntDecAndTest(&obj->refs))) + virNWFilterObjFree(obj); + return !lastRef; +} + + void virNWFilterObjListFree(virNWFilterObjListPtr nwfilters) { size_t i; for (i =3D 0; i < nwfilters->count; i++) - virNWFilterObjFree(nwfilters->objs[i]); + virNWFilterObjUnref(nwfilters->objs[i]); VIR_FREE(nwfilters->objs); VIR_FREE(nwfilters); } @@ -143,7 +185,7 @@ virNWFilterObjListRemove(virNWFilterObjListPtr nwfilter= s, virNWFilterObjLock(nwfilters->objs[i]); if (nwfilters->objs[i] =3D=3D obj) { virNWFilterObjUnlock(nwfilters->objs[i]); - virNWFilterObjFree(nwfilters->objs[i]); + virNWFilterObjUnref(nwfilters->objs[i]); =20 VIR_DELETE_ELEMENT(nwfilters->objs, i, nwfilters->count); break; @@ -166,7 +208,7 @@ virNWFilterObjListFindByUUID(virNWFilterObjListPtr nwfi= lters, virNWFilterObjLock(obj); def =3D obj->def; if (!memcmp(def->uuid, uuid, VIR_UUID_BUFLEN)) - return obj; + return virNWFilterObjRef(obj); virNWFilterObjUnlock(obj); } =20 @@ -187,7 +229,7 @@ virNWFilterObjListFindByName(virNWFilterObjListPtr nwfi= lters, virNWFilterObjLock(obj); def =3D obj->def; if (STREQ_NULLABLE(def->name, name)) - return obj; + return virNWFilterObjRef(obj); virNWFilterObjUnlock(obj); } =20 @@ -210,7 +252,7 @@ virNWFilterObjListFindInstantiateFilter(virNWFilterObjL= istPtr nwfilters, if (virNWFilterObjWantRemoved(obj)) { virReportError(VIR_ERR_NO_NWFILTER, _("Filter '%s' is in use."), filtername); - virNWFilterObjUnlock(obj); + virNWFilterObjEndAPI(&obj); return NULL; } =20 @@ -245,7 +287,7 @@ _virNWFilterObjListDefLoopDetect(virNWFilterObjListPtr = nwfilters, if (obj) { rc =3D _virNWFilterObjListDefLoopDetect(nwfilters, obj->de= f, filtername); - virNWFilterObjUnlock(obj); + virNWFilterObjEndAPI(&obj); if (rc < 0) break; } @@ -338,10 +380,10 @@ virNWFilterObjListAssignDef(virNWFilterObjListPtr nwf= ilters, _("filter with same UUID but different name " "('%s') already exists"), objdef->name); - virNWFilterObjUnlock(obj); + virNWFilterObjEndAPI(&obj); return NULL; } - virNWFilterObjUnlock(obj); + virNWFilterObjEndAPI(&obj); } else { if ((obj =3D virNWFilterObjListFindByName(nwfilters, def->name))) { char uuidstr[VIR_UUID_STRING_BUFLEN]; @@ -351,7 +393,7 @@ virNWFilterObjListAssignDef(virNWFilterObjListPtr nwfil= ters, virReportError(VIR_ERR_OPERATION_FAILED, _("filter '%s' already exists with uuid %s"), def->name, uuidstr); - virNWFilterObjUnlock(obj); + virNWFilterObjEndAPI(&obj); return NULL; } } @@ -362,7 +404,6 @@ virNWFilterObjListAssignDef(virNWFilterObjListPtr nwfil= ters, return NULL; } =20 - if ((obj =3D virNWFilterObjListFindByName(nwfilters, def->name))) { =20 objdef =3D obj->def; @@ -376,7 +417,7 @@ virNWFilterObjListAssignDef(virNWFilterObjListPtr nwfil= ters, /* trigger the update on VMs referencing the filter */ if (virNWFilterTriggerVMFilterRebuild() < 0) { obj->newDef =3D NULL; - virNWFilterObjUnlock(obj); + virNWFilterObjEndAPI(&obj); return NULL; } =20 @@ -397,12 +438,12 @@ virNWFilterObjListAssignDef(virNWFilterObjListPtr nwf= ilters, if (VIR_APPEND_ELEMENT_COPY(nwfilters->objs, nwfilters->count, obj) < = 0) goto error; =20 - return obj; + return virNWFilterObjRef(obj); =20 error: obj->def =3D NULL; virNWFilterObjUnlock(obj); - virNWFilterObjFree(obj); + virNWFilterObjUnref(obj); return NULL; } =20 @@ -600,8 +641,8 @@ virNWFilterObjListLoadAllConfigs(virNWFilterObjListPtr = nwfilters, continue; =20 obj =3D virNWFilterObjListLoadConfig(nwfilters, configDir, entry->= d_name); - if (obj) - virNWFilterObjUnlock(obj); + + virNWFilterObjEndAPI(&obj); } =20 VIR_DIR_CLOSE(dir); @@ -609,14 +650,14 @@ virNWFilterObjListLoadAllConfigs(virNWFilterObjListPt= r nwfilters, } =20 =20 -void +static void virNWFilterObjLock(virNWFilterObjPtr obj) { virMutexLock(&obj->lock); } =20 =20 -void +static void virNWFilterObjUnlock(virNWFilterObjPtr obj) { virMutexUnlock(&obj->lock); diff --git a/src/conf/virnwfilterobj.h b/src/conf/virnwfilterobj.h index 85c8ead..31aa345 100644 --- a/src/conf/virnwfilterobj.h +++ b/src/conf/virnwfilterobj.h @@ -41,6 +41,9 @@ struct _virNWFilterDriverState { bool watchingFirewallD; }; =20 +void +virNWFilterObjEndAPI(virNWFilterObjPtr *obj); + virNWFilterDefPtr virNWFilterObjGetDef(virNWFilterObjPtr obj); =20 @@ -50,6 +53,12 @@ virNWFilterObjGetNewDef(virNWFilterObjPtr obj); bool virNWFilterObjWantRemoved(virNWFilterObjPtr obj); =20 +virNWFilterObjPtr +virNWFilterObjRef(virNWFilterObjPtr obj); + +bool +virNWFilterObjUnref(virNWFilterObjPtr obj); + virNWFilterObjListPtr virNWFilterObjListNew(void); =20 @@ -109,10 +118,4 @@ int virNWFilterObjListLoadAllConfigs(virNWFilterObjListPtr nwfilters, const char *configDir); =20 -void -virNWFilterObjLock(virNWFilterObjPtr obj); - -void -virNWFilterObjUnlock(virNWFilterObjPtr obj); - #endif /* VIRNWFILTEROBJ_H */ diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index ee19cb9..ac0507e 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -965,6 +965,7 @@ virNodeDeviceObjUnlock; =20 =20 # conf/virnwfilterobj.h +virNWFilterObjEndAPI; virNWFilterObjGetDef; virNWFilterObjGetNewDef; virNWFilterObjListAssignDef; @@ -978,10 +979,10 @@ virNWFilterObjListLoadAllConfigs; virNWFilterObjListNew; virNWFilterObjListNumOfNWFilters; virNWFilterObjListRemove; -virNWFilterObjLock; +virNWFilterObjRef; virNWFilterObjSaveConfig; virNWFilterObjTestUnassignDef; -virNWFilterObjUnlock; +virNWFilterObjUnref; virNWFilterObjWantRemoved; =20 =20 diff --git a/src/nwfilter/nwfilter_driver.c b/src/nwfilter/nwfilter_driver.c index 7db4f87..b6e11e6 100644 --- a/src/nwfilter/nwfilter_driver.c +++ b/src/nwfilter/nwfilter_driver.c @@ -400,7 +400,7 @@ nwfilterLookupByUUID(virConnectPtr conn, nwfilter =3D virGetNWFilter(conn, def->name, def->uuid); =20 cleanup: - virNWFilterObjUnlock(obj); + virNWFilterObjEndAPI(&obj); return nwfilter; } =20 @@ -430,7 +430,7 @@ nwfilterLookupByName(virConnectPtr conn, nwfilter =3D virGetNWFilter(conn, def->name, def->uuid); =20 cleanup: - virNWFilterObjUnlock(obj); + virNWFilterObjEndAPI(&obj); return nwfilter; } =20 @@ -525,8 +525,7 @@ nwfilterDefineXML(virConnectPtr conn, =20 cleanup: virNWFilterDefFree(def); - if (obj) - virNWFilterObjUnlock(obj); + virNWFilterObjEndAPI(&obj); =20 virNWFilterCallbackDriversUnlock(); virNWFilterUnlockFilterUpdates(); @@ -564,12 +563,10 @@ nwfilterUndefine(virNWFilterPtr nwfilter) goto cleanup; =20 virNWFilterObjListRemove(driver->nwfilters, obj); - obj =3D NULL; ret =3D 0; =20 cleanup: - if (obj) - virNWFilterObjUnlock(obj); + virNWFilterObjEndAPI(&obj); =20 virNWFilterCallbackDriversUnlock(); virNWFilterUnlockFilterUpdates(); @@ -602,7 +599,7 @@ nwfilterGetXMLDesc(virNWFilterPtr nwfilter, ret =3D virNWFilterDefFormat(def); =20 cleanup: - virNWFilterObjUnlock(obj); + virNWFilterObjEndAPI(&obj); return ret; } =20 diff --git a/src/nwfilter/nwfilter_gentech_driver.c b/src/nwfilter/nwfilter= _gentech_driver.c index 68a2ddb..4c228ea 100644 --- a/src/nwfilter/nwfilter_gentech_driver.c +++ b/src/nwfilter/nwfilter_gentech_driver.c @@ -315,7 +315,7 @@ virNWFilterInstReset(virNWFilterInstPtr inst) size_t i; =20 for (i =3D 0; i < inst->nfilters; i++) - virNWFilterObjUnlock(inst->filters[i]); + virNWFilterObjEndAPI(&inst->filters[i]); VIR_FREE(inst->filters); inst->nfilters =3D 0; =20 @@ -425,8 +425,7 @@ virNWFilterIncludeDefToRuleInst(virNWFilterDriverStateP= tr driver, if (ret < 0) virNWFilterInstReset(inst); virNWFilterHashTableFree(tmpvars); - if (obj) - virNWFilterObjUnlock(obj); + virNWFilterObjEndAPI(&obj); return ret; } =20 @@ -547,7 +546,7 @@ virNWFilterDetermineMissingVarsRec(virNWFilterDefPtr fi= lter, vars); if (!tmpvars) { rc =3D -1; - virNWFilterObjUnlock(obj); + virNWFilterObjEndAPI(&obj); break; } =20 @@ -571,7 +570,7 @@ virNWFilterDetermineMissingVarsRec(virNWFilterDefPtr fi= lter, =20 virNWFilterHashTableFree(tmpvars); =20 - virNWFilterObjUnlock(obj); + virNWFilterObjEndAPI(&obj); if (rc < 0) break; } @@ -845,7 +844,7 @@ virNWFilterInstantiateFilterUpdate(virNWFilterDriverSta= tePtr driver, virNWFilterHashTableFree(vars1); =20 err_exit: - virNWFilterObjUnlock(obj); + virNWFilterObjEndAPI(&obj); =20 VIR_FREE(str_ipaddr); VIR_FREE(str_macaddr); --=20 2.9.4 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Mon Apr 29 05:54:30 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 1496399184180677.9265727184771; Fri, 2 Jun 2017 03:26:24 -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 541713DBED; Fri, 2 Jun 2017 10:26:22 +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 D416A4DA28; Fri, 2 Jun 2017 10:26:21 +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 273DF4A498; Fri, 2 Jun 2017 10:26:09 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v52APne5029199 for ; Fri, 2 Jun 2017 06:25:49 -0400 Received: by smtp.corp.redhat.com (Postfix) id 511A04DA22; Fri, 2 Jun 2017 10:25:49 +0000 (UTC) Received: from localhost.localdomain.com (ovpn-116-108.phx2.redhat.com [10.3.116.108]) by smtp.corp.redhat.com (Postfix) with ESMTP id EEE095C549 for ; Fri, 2 Jun 2017 10:25:48 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 541713DBED Authentication-Results: ext-mx06.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx06.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 541713DBED From: John Ferlan To: libvir-list@redhat.com Date: Fri, 2 Jun 2017 06:25:36 -0400 Message-Id: <20170602102538.14991-16-jferlan@redhat.com> In-Reply-To: <20170602102538.14991-1-jferlan@redhat.com> References: <20170602102538.14991-1-jferlan@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 15/17] nwfilter: Convert _virNWFilterObjList to be a virObjectLockable 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.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.30]); Fri, 02 Jun 2017 10:26:23 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Perhaps a bit out of order from the normal convert driver object to virObjectLockable, then convert the driver object list. However, as it turns out nwfilter objects have been using a recursive mutex for which the common virObject code does not want to use. So, if we convert the nwfilter object list to use virObjectLockable, then it will be more possible to make the necessary adjustments to the virNWFilterObjListFindInstantiateFilter algorithm in order to handle a recursive lock operation required as part of the and (or "inc" list) processing. This patch takes the plunge, modifying the nwfilter object list handling code to utilize hash tables for both the UUID and Name for which an nwfilter def would utilize. This makes lookup by either "key" possible without needing to first lock the object in order to find a match as long as of course the object list itself is locked. Signed-off-by: John Ferlan --- src/conf/virnwfilterobj.c | 395 +++++++++++++++++++++++++++++--------= ---- src/nwfilter/nwfilter_driver.c | 4 + 2 files changed, 286 insertions(+), 113 deletions(-) diff --git a/src/conf/virnwfilterobj.c b/src/conf/virnwfilterobj.c index 99be59c..84ef7d1 100644 --- a/src/conf/virnwfilterobj.c +++ b/src/conf/virnwfilterobj.c @@ -53,10 +53,34 @@ struct _virNWFilterObj { }; =20 struct _virNWFilterObjList { - size_t count; - virNWFilterObjPtr *objs; + virObjectLockable parent; + + /* uuid string -> virNWFilterObj mapping + * for O(1), lockless lookup-by-uuid */ + virHashTable *objs; + + /* name -> virNWFilterObj mapping for O(1), + * lockless lookup-by-name */ + virHashTable *objsName; }; =20 +static virClassPtr virNWFilterObjListClass; +static void virNWFilterObjListDispose(void *opaque); + +static int +virNWFilterObjOnceInit(void) +{ + if (!(virNWFilterObjListClass =3D virClassNew(virClassForObjectLockabl= e(), + "virNWFilterObjList", + sizeof(virNWFilterObjList), + virNWFilterObjListDispose)= )) + return -1; + + return 0; +} + +VIR_ONCE_GLOBAL_INIT(virNWFilterObj) + =20 static virNWFilterObjPtr virNWFilterObjNew(virNWFilterDefPtr def) @@ -151,14 +175,30 @@ virNWFilterObjUnref(virNWFilterObjPtr obj) } =20 =20 +static void +virNWFilterObjListDispose(void *opaque) +{ + virNWFilterObjListPtr nwfilters =3D opaque; + + virHashFree(nwfilters->objs); + virHashFree(nwfilters->objsName); +} + + void virNWFilterObjListFree(virNWFilterObjListPtr nwfilters) { - size_t i; - for (i =3D 0; i < nwfilters->count; i++) - virNWFilterObjUnref(nwfilters->objs[i]); - VIR_FREE(nwfilters->objs); - VIR_FREE(nwfilters); + virObjectUnref(nwfilters); +} + + +static void +virNWFilterObjListObjsFreeData(void *payload, + const void *name ATTRIBUTE_UNUSED) +{ + virNWFilterObjPtr obj =3D payload; + + virNWFilterObjUnref(obj); } =20 =20 @@ -167,8 +207,24 @@ virNWFilterObjListNew(void) { virNWFilterObjListPtr nwfilters; =20 - if (VIR_ALLOC(nwfilters) < 0) + if (virNWFilterObjInitialize() < 0) + return NULL; + + if (!(nwfilters =3D virObjectLockableNew(virNWFilterObjListClass))) + return NULL; + + if (!(nwfilters->objs =3D virHashCreate(10, virNWFilterObjListObjsFree= Data))) { + virObjectUnref(nwfilters); + return NULL; + } + + if (!(nwfilters->objsName =3D + virHashCreate(10, virNWFilterObjListObjsFreeData))) { + virHashFree(nwfilters->objs); + virObjectUnref(nwfilters); return NULL; + } + return nwfilters; } =20 @@ -177,21 +233,34 @@ void virNWFilterObjListRemove(virNWFilterObjListPtr nwfilters, virNWFilterObjPtr obj) { - size_t i; + char uuidstr[VIR_UUID_STRING_BUFLEN]; + virNWFilterDefPtr def; =20 + if (!obj) + return; + def =3D obj->def; + + virUUIDFormat(def->uuid, uuidstr); + virNWFilterObjRef(obj); virNWFilterObjUnlock(obj); + virObjectLock(nwfilters); + virNWFilterObjLock(obj); + virHashRemoveEntry(nwfilters->objs, uuidstr); + virHashRemoveEntry(nwfilters->objsName, def->name); + virNWFilterObjUnlock(obj); + virNWFilterObjUnref(obj); + virObjectUnlock(nwfilters); +} =20 - for (i =3D 0; i < nwfilters->count; i++) { - virNWFilterObjLock(nwfilters->objs[i]); - if (nwfilters->objs[i] =3D=3D obj) { - virNWFilterObjUnlock(nwfilters->objs[i]); - virNWFilterObjUnref(nwfilters->objs[i]); =20 - VIR_DELETE_ELEMENT(nwfilters->objs, i, nwfilters->count); - break; - } - virNWFilterObjUnlock(nwfilters->objs[i]); - } +static virNWFilterObjPtr +virNWFilterObjListFindByUUIDLocked(virNWFilterObjListPtr nwfilters, + const unsigned char *uuid) +{ + char uuidstr[VIR_UUID_STRING_BUFLEN]; + + virUUIDFormat(uuid, uuidstr); + return virNWFilterObjRef(virHashLookup(nwfilters->objs, uuidstr)); } =20 =20 @@ -199,20 +268,22 @@ virNWFilterObjPtr virNWFilterObjListFindByUUID(virNWFilterObjListPtr nwfilters, const unsigned char *uuid) { - size_t i; virNWFilterObjPtr obj; - virNWFilterDefPtr def; =20 - for (i =3D 0; i < nwfilters->count; i++) { - obj =3D nwfilters->objs[i]; + virObjectLock(nwfilters); + obj =3D virNWFilterObjListFindByUUIDLocked(nwfilters, uuid); + virObjectUnlock(nwfilters); + if (obj) virNWFilterObjLock(obj); - def =3D obj->def; - if (!memcmp(def->uuid, uuid, VIR_UUID_BUFLEN)) - return virNWFilterObjRef(obj); - virNWFilterObjUnlock(obj); - } + return obj; +} =20 - return NULL; + +static virNWFilterObjPtr +virNWFilterObjListFindByNameLocked(virNWFilterObjListPtr nwfilters, + const char *name) +{ + return virNWFilterObjRef(virHashLookup(nwfilters->objsName, name)); } =20 =20 @@ -220,20 +291,15 @@ virNWFilterObjPtr virNWFilterObjListFindByName(virNWFilterObjListPtr nwfilters, const char *name) { - size_t i; virNWFilterObjPtr obj; - virNWFilterDefPtr def; =20 - for (i =3D 0; i < nwfilters->count; i++) { - obj =3D nwfilters->objs[i]; + virObjectLock(nwfilters); + obj =3D virNWFilterObjListFindByNameLocked(nwfilters, name); + virObjectUnlock(nwfilters); + if (obj) virNWFilterObjLock(obj); - def =3D obj->def; - if (STREQ_NULLABLE(def->name, name)) - return virNWFilterObjRef(obj); - virNWFilterObjUnlock(obj); - } =20 - return NULL; + return obj; } =20 =20 @@ -282,9 +348,10 @@ _virNWFilterObjListDefLoopDetect(virNWFilterObjListPtr= nwfilters, break; } =20 - obj =3D virNWFilterObjListFindByName(nwfilters, - entry->include->filterref); + obj =3D virNWFilterObjListFindByNameLocked(nwfilters, + entry->include->filte= rref); if (obj) { + virObjectLock(obj); rc =3D _virNWFilterObjListDefLoopDetect(nwfilters, obj->de= f, filtername); virNWFilterObjEndAPI(&obj); @@ -306,6 +373,8 @@ _virNWFilterObjListDefLoopDetect(virNWFilterObjListPtr = nwfilters, * Detect a loop introduced through the filters being able to * reference each other. * + * NB: Enter with nwfilters locked + * * Returns 0 in case no loop was detected, -1 otherwise. */ static int @@ -371,8 +440,12 @@ virNWFilterObjListAssignDef(virNWFilterObjListPtr nwfi= lters, { virNWFilterObjPtr obj; virNWFilterDefPtr objdef; + char uuidstr[VIR_UUID_STRING_BUFLEN]; =20 - if ((obj =3D virNWFilterObjListFindByUUID(nwfilters, def->uuid))) { + virObjectLock(nwfilters); + + if ((obj =3D virNWFilterObjListFindByUUIDLocked(nwfilters, def->uuid))= ) { + virNWFilterObjLock(obj); objdef =3D obj->def; =20 if (STRNEQ(def->name, objdef->name)) { @@ -381,19 +454,21 @@ virNWFilterObjListAssignDef(virNWFilterObjListPtr nwf= ilters, "('%s') already exists"), objdef->name); virNWFilterObjEndAPI(&obj); + virObjectUnlock(nwfilters); return NULL; } virNWFilterObjEndAPI(&obj); } else { - if ((obj =3D virNWFilterObjListFindByName(nwfilters, def->name))) { - char uuidstr[VIR_UUID_STRING_BUFLEN]; + if ((obj =3D virNWFilterObjListFindByNameLocked(nwfilters, def->na= me))) { =20 + virNWFilterObjLock(obj); objdef =3D obj->def; virUUIDFormat(objdef->uuid, uuidstr); virReportError(VIR_ERR_OPERATION_FAILED, _("filter '%s' already exists with uuid %s"), def->name, uuidstr); virNWFilterObjEndAPI(&obj); + virObjectUnlock(nwfilters); return NULL; } } @@ -401,16 +476,18 @@ virNWFilterObjListAssignDef(virNWFilterObjListPtr nwf= ilters, if (virNWFilterObjListDefLoopDetect(nwfilters, def) < 0) { virReportError(VIR_ERR_OPERATION_FAILED, "%s", _("filter would introduce a loop")); + virObjectUnlock(nwfilters); return NULL; } =20 - if ((obj =3D virNWFilterObjListFindByName(nwfilters, def->name))) { =20 + if ((obj =3D virNWFilterObjListFindByNameLocked(nwfilters, def->name))= ) { + virNWFilterObjLock(obj); objdef =3D obj->def; if (virNWFilterDefEqual(def, objdef, false)) { virNWFilterDefFree(objdef); obj->def =3D def; - return obj; + goto cleanup; } =20 obj->newDef =3D def; @@ -418,13 +495,14 @@ virNWFilterObjListAssignDef(virNWFilterObjListPtr nwf= ilters, if (virNWFilterTriggerVMFilterRebuild() < 0) { obj->newDef =3D NULL; virNWFilterObjEndAPI(&obj); + virObjectUnlock(nwfilters); return NULL; } =20 virNWFilterDefFree(objdef); obj->def =3D def; obj->newDef =3D NULL; - return obj; + goto cleanup; } =20 if (!(obj =3D virNWFilterObjNew(def))) @@ -435,36 +513,107 @@ virNWFilterObjListAssignDef(virNWFilterObjListPtr nw= filters, if (!(obj->configFile =3D virFileBuildPath(configDir, objdef->name, ".= xml"))) goto error; =20 - if (VIR_APPEND_ELEMENT_COPY(nwfilters->objs, nwfilters->count, obj) < = 0) + virUUIDFormat(def->uuid, uuidstr); + if (virHashAddEntry(nwfilters->objs, uuidstr, obj) < 0) + goto error; + virNWFilterObjRef(obj); + + if (virHashAddEntry(nwfilters->objsName, objdef->name, obj) < 0) { + virHashRemoveEntry(nwfilters->objs, uuidstr); goto error; + } + virNWFilterObjRef(obj); =20 - return virNWFilterObjRef(obj); + cleanup: + virObjectUnlock(nwfilters); + return obj; =20 error: obj->def =3D NULL; virNWFilterObjUnlock(obj); virNWFilterObjUnref(obj); + virObjectUnlock(nwfilters); return NULL; } =20 =20 +struct virNWFilterCountData { + virConnectPtr conn; + virNWFilterObjListFilter aclfilter; + int nelems; +}; + +static int +virNWFilterObjListNumOfNWFiltersCallback(void *payload, + const void *name ATTRIBUTE_UNUSED, + void *opaque) +{ + virNWFilterObjPtr obj =3D payload; + struct virNWFilterCountData *data =3D opaque; + + virObjectLock(obj); + if (!data->aclfilter || data->aclfilter(data->conn, obj->def)) + data->nelems++; + virObjectUnlock(obj); + return 0; +} + + int virNWFilterObjListNumOfNWFilters(virNWFilterObjListPtr nwfilters, virConnectPtr conn, virNWFilterObjListFilter aclfilter) { - size_t i; - int nfilters =3D 0; + struct virNWFilterCountData data =3D { .conn =3D conn, + .aclfilter =3D aclfilter, .nelems =3D 0 }; =20 - for (i =3D 0; i < nwfilters->count; i++) { - virNWFilterObjPtr obj =3D nwfilters->objs[i]; - virNWFilterObjLock(obj); - if (!aclfilter || aclfilter(conn, obj->def)) - nfilters++; - virNWFilterObjUnlock(obj); + virObjectLock(nwfilters); + virHashForEach(nwfilters->objs, virNWFilterObjListNumOfNWFiltersCallba= ck, + &data); + virObjectUnlock(nwfilters); + + return data.nelems; +} + + +struct virNWFilterListData { + virConnectPtr conn; + virNWFilterObjListFilter aclfilter; + int nelems; + char **elems; + int maxelems; + bool error; +}; + +static int +virNWFilterObjListGetNamesCallback(void *payload, + const void *name ATTRIBUTE_UNUSED, + void *opaque) +{ + virNWFilterObjPtr obj =3D payload; + virNWFilterDefPtr def; + struct virNWFilterListData *data =3D opaque; + + if (data->error) + return 0; + + if (data->maxelems >=3D 0 && data->nelems =3D=3D data->maxelems) + return 0; + + virObjectLock(obj); + def =3D obj->def; + + if (!data->aclfilter || data->aclfilter(data->conn, def)) { + if (VIR_STRDUP(data->elems[data->nelems], def->name) < 0) { + data->error =3D true; + goto cleanup; + } + data->nelems++; } =20 - return nfilters; + cleanup: + virObjectUnlock(obj); + return 0; } =20 =20 @@ -475,82 +624,102 @@ virNWFilterObjListGetNames(virNWFilterObjListPtr nwf= ilters, char **const names, int maxnames) { - int nnames =3D 0; - size_t i; - virNWFilterDefPtr def; + struct virNWFilterListData data =3D { .conn =3D conn, .aclfilter =3D a= clfilter, + .nelems =3D 0, .elems =3D names, .maxelems =3D maxnames, .error = =3D false }; =20 - for (i =3D 0; i < nwfilters->count && nnames < maxnames; i++) { - virNWFilterObjPtr obj =3D nwfilters->objs[i]; - virNWFilterObjLock(obj); - def =3D obj->def; - if (!aclfilter || aclfilter(conn, def)) { - if (VIR_STRDUP(names[nnames], def->name) < 0) { - virNWFilterObjUnlock(obj); - goto failure; - } - nnames++; - } - virNWFilterObjUnlock(obj); - } + virObjectLock(nwfilters); + virHashForEach(nwfilters->objs, virNWFilterObjListGetNamesCallback, &d= ata); + virObjectUnlock(nwfilters); =20 - return nnames; + if (data.error) + goto error; =20 - failure: - while (--nnames >=3D 0) - VIR_FREE(names[nnames]); + return data.nelems; =20 + error: + while (--data.nelems >=3D 0) + VIR_FREE(data.elems[data.nelems]); return -1; } =20 =20 -int -virNWFilterObjListExport(virConnectPtr conn, - virNWFilterObjListPtr nwfilters, - virNWFilterPtr **filters, - virNWFilterObjListFilter aclfilter) +struct virNWFilterExportData { + virConnectPtr conn; + virNWFilterObjListFilter aclfilter; + virNWFilterPtr *filters; + int nfilters; + bool error; +}; + +static int +virNWFilterObjListExportCallback(void *payload, + const void *name ATTRIBUTE_UNUSED, + void *opaque) { - virNWFilterPtr *tmp_filters =3D NULL; - int nfilters =3D 0; - virNWFilterPtr filter =3D NULL; - virNWFilterObjPtr obj =3D NULL; + virNWFilterObjPtr obj =3D payload; virNWFilterDefPtr def; - size_t i; - int ret =3D -1; + struct virNWFilterExportData *data =3D opaque; + virNWFilterPtr nwfilter; + + if (data->error) + return 0; + + virObjectLock(obj); + def =3D obj->def; =20 - if (!filters) { - ret =3D nwfilters->count; + if (data->aclfilter && !data->aclfilter(data->conn, def)) + goto cleanup; + + if (!data->filters) { + data->nfilters++; goto cleanup; } =20 - if (VIR_ALLOC_N(tmp_filters, nwfilters->count + 1) < 0) + if (!(nwfilter =3D virGetNWFilter(data->conn, def->name, def->uuid))) { + data->error =3D true; goto cleanup; + } + data->filters[data->nfilters++] =3D nwfilter; =20 - for (i =3D 0; i < nwfilters->count; i++) { - obj =3D nwfilters->objs[i]; - virNWFilterObjLock(obj); - def =3D obj->def; - if (!aclfilter || aclfilter(conn, def)) { - if (!(filter =3D virGetNWFilter(conn, def->name, def->uuid))) { - virNWFilterObjUnlock(obj); - goto cleanup; - } - tmp_filters[nfilters++] =3D filter; - } - virNWFilterObjUnlock(obj); + cleanup: + virObjectUnlock(obj); + return 0; +} + + +int +virNWFilterObjListExport(virConnectPtr conn, + virNWFilterObjListPtr nwfilters, + virNWFilterPtr **filters, + virNWFilterObjListFilter aclfilter) +{ + struct virNWFilterExportData data =3D { .conn =3D conn, .aclfilter =3D= aclfilter, + .filters =3D NULL, .nfilters =3D 0, .error =3D false }; + + virObjectLock(nwfilters); + if (filters && + VIR_ALLOC_N(data.filters, virHashSize(nwfilters->objs) + 1) < 0) { + virObjectUnlock(nwfilters); + return -1; } =20 - *filters =3D tmp_filters; - tmp_filters =3D NULL; - ret =3D nfilters; + virHashForEach(nwfilters->objs, virNWFilterObjListExportCallback, &dat= a); + virObjectUnlock(nwfilters); =20 - cleanup: - if (tmp_filters) { - for (i =3D 0; i < nfilters; i ++) - virObjectUnref(tmp_filters[i]); + if (data.error) + goto cleanup; + + if (data.filters) { + /* trim the array to the final size */ + ignore_value(VIR_REALLOC_N(data.filters, data.nfilters + 1)); + *filters =3D data.filters; } - VIR_FREE(tmp_filters); =20 - return ret; + return data.nfilters; + + cleanup: + virObjectListFree(data.filters); + return -1; } =20 =20 diff --git a/src/nwfilter/nwfilter_driver.c b/src/nwfilter/nwfilter_driver.c index b6e11e6..3f05797 100644 --- a/src/nwfilter/nwfilter_driver.c +++ b/src/nwfilter/nwfilter_driver.c @@ -518,6 +518,8 @@ nwfilterDefineXML(virConnectPtr conn, =20 if (virNWFilterObjSaveConfig(obj) < 0) { virNWFilterObjListRemove(driver->nwfilters, obj); + virNWFilterObjUnref(obj); + obj =3D NULL; goto cleanup; } =20 @@ -563,6 +565,8 @@ nwfilterUndefine(virNWFilterPtr nwfilter) goto cleanup; =20 virNWFilterObjListRemove(driver->nwfilters, obj); + virNWFilterObjUnref(obj); + obj =3D NULL; ret =3D 0; =20 cleanup: --=20 2.9.4 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Mon Apr 29 05:54:30 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 1496399201270548.0528396623141; Fri, 2 Jun 2017 03:26:41 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 5365D40F10; Fri, 2 Jun 2017 10:26:39 +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 DEE1187E52; Fri, 2 Jun 2017 10:26:38 +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 F40884A495; Fri, 2 Jun 2017 10:26:13 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v52APn6q029204 for ; Fri, 2 Jun 2017 06:25:49 -0400 Received: by smtp.corp.redhat.com (Postfix) id BB4364DA1D; Fri, 2 Jun 2017 10:25:49 +0000 (UTC) Received: from localhost.localdomain.com (ovpn-116-108.phx2.redhat.com [10.3.116.108]) by smtp.corp.redhat.com (Postfix) with ESMTP id 7A31F5C549 for ; Fri, 2 Jun 2017 10:25:49 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 5365D40F10 Authentication-Results: ext-mx06.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx06.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 5365D40F10 From: John Ferlan To: libvir-list@redhat.com Date: Fri, 2 Jun 2017 06:25:37 -0400 Message-Id: <20170602102538.14991-17-jferlan@redhat.com> In-Reply-To: <20170602102538.14991-1-jferlan@redhat.com> References: <20170602102538.14991-1-jferlan@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 16/17] nwfilter: Remove recursive locking for nwfilter instantiation 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.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.30]); Fri, 02 Jun 2017 10:26:40 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" The current algorithm required usage of recursive locks because there was no other mechanism available to ensure that the object wasn't deleted whilst the instantiation was taking place. Now that we have object references, lets use those to ensure the object isn't deleted whilst we're working through the instantiation thus removing the need for recursive locks. Signed-off-by: John Ferlan --- src/conf/virnwfilterobj.c | 13 +++++++++-- src/nwfilter/nwfilter_gentech_driver.c | 40 +++++++++++++++++++-----------= ---- 2 files changed, 34 insertions(+), 19 deletions(-) diff --git a/src/conf/virnwfilterobj.c b/src/conf/virnwfilterobj.c index 84ef7d1..ea1323d 100644 --- a/src/conf/virnwfilterobj.c +++ b/src/conf/virnwfilterobj.c @@ -303,13 +303,22 @@ virNWFilterObjListFindByName(virNWFilterObjListPtr nw= filters, } =20 =20 +/** + * To avoid the need to have recursive locks as a result of how the + * virNWFilterInstantiateFilter processing works, this API will not + * lock the returned object, instead just increase the refcnt of the + * object to the caller to allow the caller to handle. + */ virNWFilterObjPtr virNWFilterObjListFindInstantiateFilter(virNWFilterObjListPtr nwfilters, const char *filtername) { virNWFilterObjPtr obj; =20 - if (!(obj =3D virNWFilterObjListFindByName(nwfilters, filtername))) { + virObjectLock(nwfilters); + obj =3D virNWFilterObjListFindByNameLocked(nwfilters, filtername); + virObjectUnlock(nwfilters); + if (!obj) { virReportError(VIR_ERR_INTERNAL_ERROR, _("referenced filter '%s' is missing"), filtername); return NULL; @@ -318,7 +327,7 @@ virNWFilterObjListFindInstantiateFilter(virNWFilterObjL= istPtr nwfilters, if (virNWFilterObjWantRemoved(obj)) { virReportError(VIR_ERR_NO_NWFILTER, _("Filter '%s' is in use."), filtername); - virNWFilterObjEndAPI(&obj); + virNWFilterObjUnref(obj); return NULL; } =20 diff --git a/src/nwfilter/nwfilter_gentech_driver.c b/src/nwfilter/nwfilter= _gentech_driver.c index 4c228ea..40da4cc 100644 --- a/src/nwfilter/nwfilter_gentech_driver.c +++ b/src/nwfilter/nwfilter_gentech_driver.c @@ -56,19 +56,25 @@ static virNWFilterTechDriverPtr filter_tech_drivers[] = =3D { NULL }; =20 -/* Serializes instantiation of filters. This is necessary - * to avoid lock ordering deadlocks. eg virNWFilterInstantiateFilterUpdate - * will hold a lock on a virNWFilterObjPtr. This in turn invokes - * virNWFilterDoInstantiate which invokes virNWFilterDetermineMissingVarsR= ec - * which invokes virNWFilterObjListFindInstantiateFilter. This iterates ov= er - * every single virNWFilterObjPtr in the list. So if 2 threads try to - * instantiate a filter in parallel, they'll both hold 1 lock at the top l= evel - * in virNWFilterInstantiateFilterUpdate which will cause the other thread - * to deadlock in virNWFilterObjListFindInstantiateFilter. +/* NB: Usage of virNWFilterObjListFindInstantiateFilter will only not lock + * the returned object - only increase the refcnt. This is necessary to av= oid + * lock ordering deadlocks or the need for recursive locks for filter obje= cts. + * Since the objects are only used to access the @def for and + * elements and having the @def disappear would not be good, but + * keeping the locks causes too many problems. * - * XXX better long term solution is to make virNWFilterObjList use a - * hash table as is done for virDomainObjList. You can then get - * lockless lookup of objects by name. + * During virNWFilterDefToInst processing an object is fetched and placed + * into the inst->filters lookaside list during virNWFilterIncludeDefToRul= eInst + * processing which then recursively calls virNWFilterDefToInst. When the + * object is removed during virNWFilterInstReset, the refcnt is decremente= d. + * + * Since virNWFilterDefToInst is called during virNWFilterDoInstantiate + * processing which can also invoke virNWFilterDetermineMissingVarsRec + * which invokes virNWFilterObjListFindInstantiateFilter also taking + * reference. In addition the virNWFilterInstantiateFilterUpdate could + * have caused locking collisions, so removing the locks from the + * equation and replacing with just references ensures that the object + * cannot be removed whilst this instantiation is taking place. */ static virMutex updateMutex; =20 @@ -315,7 +321,7 @@ virNWFilterInstReset(virNWFilterInstPtr inst) size_t i; =20 for (i =3D 0; i < inst->nfilters; i++) - virNWFilterObjEndAPI(&inst->filters[i]); + virNWFilterObjUnref(inst->filters[i]); VIR_FREE(inst->filters); inst->nfilters =3D 0; =20 @@ -425,7 +431,7 @@ virNWFilterIncludeDefToRuleInst(virNWFilterDriverStateP= tr driver, if (ret < 0) virNWFilterInstReset(inst); virNWFilterHashTableFree(tmpvars); - virNWFilterObjEndAPI(&obj); + virNWFilterObjUnref(obj); return ret; } =20 @@ -546,7 +552,7 @@ virNWFilterDetermineMissingVarsRec(virNWFilterDefPtr fi= lter, vars); if (!tmpvars) { rc =3D -1; - virNWFilterObjEndAPI(&obj); + virNWFilterObjUnref(obj); break; } =20 @@ -570,7 +576,7 @@ virNWFilterDetermineMissingVarsRec(virNWFilterDefPtr fi= lter, =20 virNWFilterHashTableFree(tmpvars); =20 - virNWFilterObjEndAPI(&obj); + virNWFilterObjUnref(obj); if (rc < 0) break; } @@ -844,7 +850,7 @@ virNWFilterInstantiateFilterUpdate(virNWFilterDriverSta= tePtr driver, virNWFilterHashTableFree(vars1); =20 err_exit: - virNWFilterObjEndAPI(&obj); + virNWFilterObjUnref(obj); =20 VIR_FREE(str_ipaddr); VIR_FREE(str_macaddr); --=20 2.9.4 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Mon Apr 29 05:54:30 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 1496399193856798.5846720550213; Fri, 2 Jun 2017 03:26:33 -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 0C1987F6AC; Fri, 2 Jun 2017 10:26:32 +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 CC0377A4C0; Fri, 2 Jun 2017 10:26:31 +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 8BAAC183302E; Fri, 2 Jun 2017 10:26:14 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v52APoxh029209 for ; Fri, 2 Jun 2017 06:25:50 -0400 Received: by smtp.corp.redhat.com (Postfix) id 31F684DA1D; Fri, 2 Jun 2017 10:25:50 +0000 (UTC) Received: from localhost.localdomain.com (ovpn-116-108.phx2.redhat.com [10.3.116.108]) by smtp.corp.redhat.com (Postfix) with ESMTP id E3D1B4DA22 for ; Fri, 2 Jun 2017 10:25:49 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 0C1987F6AC Authentication-Results: ext-mx01.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx01.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 0C1987F6AC From: John Ferlan To: libvir-list@redhat.com Date: Fri, 2 Jun 2017 06:25:38 -0400 Message-Id: <20170602102538.14991-18-jferlan@redhat.com> In-Reply-To: <20170602102538.14991-1-jferlan@redhat.com> References: <20170602102538.14991-1-jferlan@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 17/17] nwfilter: Convert virNWFilterObj to use virObjectLockable 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.25]); Fri, 02 Jun 2017 10:26:32 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Now that we have a bit more control, let's convert our object into a recursive lockable object and let that magic handle the create and lock/unl= ock. Additionally, we introduce virNWFilterObjEndAPI. Signed-off-by: John Ferlan --- src/conf/virnwfilterobj.c | 127 ++++++++++-------------------= ---- src/conf/virnwfilterobj.h | 6 -- src/libvirt_private.syms | 2 - src/nwfilter/nwfilter_driver.c | 4 +- src/nwfilter/nwfilter_gentech_driver.c | 10 +-- 5 files changed, 44 insertions(+), 105 deletions(-) diff --git a/src/conf/virnwfilterobj.c b/src/conf/virnwfilterobj.c index ea1323d..653699b 100644 --- a/src/conf/virnwfilterobj.c +++ b/src/conf/virnwfilterobj.c @@ -23,7 +23,6 @@ #include "datatypes.h" =20 #include "viralloc.h" -#include "viratomic.h" #include "virerror.h" #include "virfile.h" #include "virlog.h" @@ -34,15 +33,8 @@ =20 VIR_LOG_INIT("conf.virnwfilterobj"); =20 -static void -virNWFilterObjLock(virNWFilterObjPtr obj); - -static void -virNWFilterObjUnlock(virNWFilterObjPtr obj); - struct _virNWFilterObj { - virMutex lock; - int refs; + virObjectLockable parent; =20 bool wantRemoved; =20 @@ -64,12 +56,20 @@ struct _virNWFilterObjList { virHashTable *objsName; }; =20 +static virClassPtr virNWFilterObjClass; static virClassPtr virNWFilterObjListClass; +static void virNWFilterObjDispose(void *opaque); static void virNWFilterObjListDispose(void *opaque); =20 static int virNWFilterObjOnceInit(void) { + if (!(virNWFilterObjClass =3D virClassNew(virClassForObjectLockable(), + "virNWFilterObj", + sizeof(virNWFilterObj), + virNWFilterObjDispose))) + return -1; + if (!(virNWFilterObjListClass =3D virClassNew(virClassForObjectLockabl= e(), "virNWFilterObjList", sizeof(virNWFilterObjList), @@ -87,19 +87,14 @@ virNWFilterObjNew(virNWFilterDefPtr def) { virNWFilterObjPtr obj; =20 - if (VIR_ALLOC(obj) < 0) + if (virNWFilterObjInitialize() < 0) return NULL; =20 - if (virMutexInitRecursive(&obj->lock) < 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - "%s", _("cannot initialize mutex")); - VIR_FREE(obj); + if (!(obj =3D virObjectLockableNew(virNWFilterObjClass))) return NULL; - } =20 - virNWFilterObjLock(obj); + virObjectLock(obj); obj->def =3D def; - virAtomicIntSet(&obj->refs, 1); =20 return obj; } @@ -111,8 +106,8 @@ virNWFilterObjEndAPI(virNWFilterObjPtr *obj) if (!*obj) return; =20 - virNWFilterObjUnlock(*obj); - virNWFilterObjUnref(*obj); + virObjectUnlock(*obj); + virObjectUnref(*obj); *obj =3D NULL; } =20 @@ -139,39 +134,16 @@ virNWFilterObjWantRemoved(virNWFilterObjPtr obj) =20 =20 static void -virNWFilterObjFree(virNWFilterObjPtr obj) +virNWFilterObjDispose(void *opaque) { + virNWFilterObjPtr obj =3D opaque; + if (!obj) return; =20 VIR_FREE(obj->configFile); virNWFilterDefFree(obj->def); virNWFilterDefFree(obj->newDef); - - virMutexDestroy(&obj->lock); - - VIR_FREE(obj); -} - - -virNWFilterObjPtr -virNWFilterObjRef(virNWFilterObjPtr obj) -{ - if (obj) - virAtomicIntInc(&obj->refs); - return obj; -} - - -bool -virNWFilterObjUnref(virNWFilterObjPtr obj) -{ - bool lastRef; - if (obj) - return false; - if ((lastRef =3D virAtomicIntDecAndTest(&obj->refs))) - virNWFilterObjFree(obj); - return !lastRef; } =20 =20 @@ -192,16 +164,6 @@ virNWFilterObjListFree(virNWFilterObjListPtr nwfilters) } =20 =20 -static void -virNWFilterObjListObjsFreeData(void *payload, - const void *name ATTRIBUTE_UNUSED) -{ - virNWFilterObjPtr obj =3D payload; - - virNWFilterObjUnref(obj); -} - - virNWFilterObjListPtr virNWFilterObjListNew(void) { @@ -213,13 +175,12 @@ virNWFilterObjListNew(void) if (!(nwfilters =3D virObjectLockableNew(virNWFilterObjListClass))) return NULL; =20 - if (!(nwfilters->objs =3D virHashCreate(10, virNWFilterObjListObjsFree= Data))) { + if (!(nwfilters->objs =3D virHashCreate(10, virObjectFreeHashData))) { virObjectUnref(nwfilters); return NULL; } =20 - if (!(nwfilters->objsName =3D - virHashCreate(10, virNWFilterObjListObjsFreeData))) { + if (!(nwfilters->objsName =3D virHashCreate(10, virObjectFreeHashData)= )) { virHashFree(nwfilters->objs); virObjectUnref(nwfilters); return NULL; @@ -241,14 +202,14 @@ virNWFilterObjListRemove(virNWFilterObjListPtr nwfilt= ers, def =3D obj->def; =20 virUUIDFormat(def->uuid, uuidstr); - virNWFilterObjRef(obj); - virNWFilterObjUnlock(obj); + virObjectRef(obj); + virObjectUnlock(obj); virObjectLock(nwfilters); - virNWFilterObjLock(obj); + virObjectLock(obj); virHashRemoveEntry(nwfilters->objs, uuidstr); virHashRemoveEntry(nwfilters->objsName, def->name); - virNWFilterObjUnlock(obj); - virNWFilterObjUnref(obj); + virObjectUnlock(obj); + virObjectUnref(obj); virObjectUnlock(nwfilters); } =20 @@ -260,7 +221,7 @@ virNWFilterObjListFindByUUIDLocked(virNWFilterObjListPt= r nwfilters, char uuidstr[VIR_UUID_STRING_BUFLEN]; =20 virUUIDFormat(uuid, uuidstr); - return virNWFilterObjRef(virHashLookup(nwfilters->objs, uuidstr)); + return virObjectRef(virHashLookup(nwfilters->objs, uuidstr)); } =20 =20 @@ -274,7 +235,7 @@ virNWFilterObjListFindByUUID(virNWFilterObjListPtr nwfi= lters, obj =3D virNWFilterObjListFindByUUIDLocked(nwfilters, uuid); virObjectUnlock(nwfilters); if (obj) - virNWFilterObjLock(obj); + virObjectLock(obj); return obj; } =20 @@ -283,7 +244,7 @@ static virNWFilterObjPtr virNWFilterObjListFindByNameLocked(virNWFilterObjListPtr nwfilters, const char *name) { - return virNWFilterObjRef(virHashLookup(nwfilters->objsName, name)); + return virObjectRef(virHashLookup(nwfilters->objsName, name)); } =20 =20 @@ -297,7 +258,7 @@ virNWFilterObjListFindByName(virNWFilterObjListPtr nwfi= lters, obj =3D virNWFilterObjListFindByNameLocked(nwfilters, name); virObjectUnlock(nwfilters); if (obj) - virNWFilterObjLock(obj); + virObjectLock(obj); =20 return obj; } @@ -327,7 +288,7 @@ virNWFilterObjListFindInstantiateFilter(virNWFilterObjL= istPtr nwfilters, if (virNWFilterObjWantRemoved(obj)) { virReportError(VIR_ERR_NO_NWFILTER, _("Filter '%s' is in use."), filtername); - virNWFilterObjUnref(obj); + virObjectUnref(obj); return NULL; } =20 @@ -454,7 +415,7 @@ virNWFilterObjListAssignDef(virNWFilterObjListPtr nwfil= ters, virObjectLock(nwfilters); =20 if ((obj =3D virNWFilterObjListFindByUUIDLocked(nwfilters, def->uuid))= ) { - virNWFilterObjLock(obj); + virObjectLock(obj); objdef =3D obj->def; =20 if (STRNEQ(def->name, objdef->name)) { @@ -470,7 +431,7 @@ virNWFilterObjListAssignDef(virNWFilterObjListPtr nwfil= ters, } else { if ((obj =3D virNWFilterObjListFindByNameLocked(nwfilters, def->na= me))) { =20 - virNWFilterObjLock(obj); + virObjectLock(obj); objdef =3D obj->def; virUUIDFormat(objdef->uuid, uuidstr); virReportError(VIR_ERR_OPERATION_FAILED, @@ -491,7 +452,7 @@ virNWFilterObjListAssignDef(virNWFilterObjListPtr nwfil= ters, =20 =20 if ((obj =3D virNWFilterObjListFindByNameLocked(nwfilters, def->name))= ) { - virNWFilterObjLock(obj); + virObjectLock(obj); objdef =3D obj->def; if (virNWFilterDefEqual(def, objdef, false)) { virNWFilterDefFree(objdef); @@ -522,16 +483,16 @@ virNWFilterObjListAssignDef(virNWFilterObjListPtr nwf= ilters, if (!(obj->configFile =3D virFileBuildPath(configDir, objdef->name, ".= xml"))) goto error; =20 - virUUIDFormat(def->uuid, uuidstr); + virUUIDFormat(objdef->uuid, uuidstr); if (virHashAddEntry(nwfilters->objs, uuidstr, obj) < 0) goto error; - virNWFilterObjRef(obj); + virObjectRef(obj); =20 if (virHashAddEntry(nwfilters->objsName, objdef->name, obj) < 0) { virHashRemoveEntry(nwfilters->objs, uuidstr); goto error; } - virNWFilterObjRef(obj); + virObjectRef(obj); =20 cleanup: virObjectUnlock(nwfilters); @@ -539,8 +500,8 @@ virNWFilterObjListAssignDef(virNWFilterObjListPtr nwfil= ters, =20 error: obj->def =3D NULL; - virNWFilterObjUnlock(obj); - virNWFilterObjUnref(obj); + virObjectUnlock(obj); + virObjectUnref(obj); virObjectUnlock(nwfilters); return NULL; } @@ -826,17 +787,3 @@ virNWFilterObjListLoadAllConfigs(virNWFilterObjListPtr= nwfilters, VIR_DIR_CLOSE(dir); return ret; } - - -static void -virNWFilterObjLock(virNWFilterObjPtr obj) -{ - virMutexLock(&obj->lock); -} - - -static void -virNWFilterObjUnlock(virNWFilterObjPtr obj) -{ - virMutexUnlock(&obj->lock); -} diff --git a/src/conf/virnwfilterobj.h b/src/conf/virnwfilterobj.h index 31aa345..0b4d60f 100644 --- a/src/conf/virnwfilterobj.h +++ b/src/conf/virnwfilterobj.h @@ -53,12 +53,6 @@ virNWFilterObjGetNewDef(virNWFilterObjPtr obj); bool virNWFilterObjWantRemoved(virNWFilterObjPtr obj); =20 -virNWFilterObjPtr -virNWFilterObjRef(virNWFilterObjPtr obj); - -bool -virNWFilterObjUnref(virNWFilterObjPtr obj); - virNWFilterObjListPtr virNWFilterObjListNew(void); =20 diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index ac0507e..afffe39 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -979,10 +979,8 @@ virNWFilterObjListLoadAllConfigs; virNWFilterObjListNew; virNWFilterObjListNumOfNWFilters; virNWFilterObjListRemove; -virNWFilterObjRef; virNWFilterObjSaveConfig; virNWFilterObjTestUnassignDef; -virNWFilterObjUnref; virNWFilterObjWantRemoved; =20 =20 diff --git a/src/nwfilter/nwfilter_driver.c b/src/nwfilter/nwfilter_driver.c index 3f05797..40538d9a 100644 --- a/src/nwfilter/nwfilter_driver.c +++ b/src/nwfilter/nwfilter_driver.c @@ -518,7 +518,7 @@ nwfilterDefineXML(virConnectPtr conn, =20 if (virNWFilterObjSaveConfig(obj) < 0) { virNWFilterObjListRemove(driver->nwfilters, obj); - virNWFilterObjUnref(obj); + virObjectUnref(obj); obj =3D NULL; goto cleanup; } @@ -565,7 +565,7 @@ nwfilterUndefine(virNWFilterPtr nwfilter) goto cleanup; =20 virNWFilterObjListRemove(driver->nwfilters, obj); - virNWFilterObjUnref(obj); + virObjectUnref(obj); obj =3D NULL; ret =3D 0; =20 diff --git a/src/nwfilter/nwfilter_gentech_driver.c b/src/nwfilter/nwfilter= _gentech_driver.c index 40da4cc..cf5442e 100644 --- a/src/nwfilter/nwfilter_gentech_driver.c +++ b/src/nwfilter/nwfilter_gentech_driver.c @@ -321,7 +321,7 @@ virNWFilterInstReset(virNWFilterInstPtr inst) size_t i; =20 for (i =3D 0; i < inst->nfilters; i++) - virNWFilterObjUnref(inst->filters[i]); + virObjectUnref(inst->filters[i]); VIR_FREE(inst->filters); inst->nfilters =3D 0; =20 @@ -431,7 +431,7 @@ virNWFilterIncludeDefToRuleInst(virNWFilterDriverStateP= tr driver, if (ret < 0) virNWFilterInstReset(inst); virNWFilterHashTableFree(tmpvars); - virNWFilterObjUnref(obj); + virObjectUnref(obj); return ret; } =20 @@ -552,7 +552,7 @@ virNWFilterDetermineMissingVarsRec(virNWFilterDefPtr fi= lter, vars); if (!tmpvars) { rc =3D -1; - virNWFilterObjUnref(obj); + virObjectUnref(obj); break; } =20 @@ -576,7 +576,7 @@ virNWFilterDetermineMissingVarsRec(virNWFilterDefPtr fi= lter, =20 virNWFilterHashTableFree(tmpvars); =20 - virNWFilterObjUnref(obj); + virObjectUnref(obj); if (rc < 0) break; } @@ -850,7 +850,7 @@ virNWFilterInstantiateFilterUpdate(virNWFilterDriverSta= tePtr driver, virNWFilterHashTableFree(vars1); =20 err_exit: - virNWFilterObjUnref(obj); + virObjectUnref(obj); =20 VIR_FREE(str_ipaddr); VIR_FREE(str_macaddr); --=20 2.9.4 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list