From nobody Sun May 5 16:25:04 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1501156058528405.6962429324328; Thu, 27 Jul 2017 04:47:38 -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 5D9FE32B145; Thu, 27 Jul 2017 11:47:36 +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 0E5C660A99; Thu, 27 Jul 2017 11:47:36 +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 595C24BB79; Thu, 27 Jul 2017 11:47:35 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v6RBlWD2028545 for ; Thu, 27 Jul 2017 07:47:32 -0400 Received: by smtp.corp.redhat.com (Postfix) id 849255D72E; Thu, 27 Jul 2017 11:47:32 +0000 (UTC) Received: from moe.brq.redhat.com (unknown [10.43.2.192]) by smtp.corp.redhat.com (Postfix) with ESMTP id 0CCED5D72D for ; Thu, 27 Jul 2017 11:47:31 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 5D9FE32B145 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=fail smtp.mailfrom=libvir-list-bounces@redhat.com From: Michal Privoznik To: libvir-list@redhat.com Date: Thu, 27 Jul 2017 13:47:21 +0200 Message-Id: In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 1/7] virConnect: Update comment for @privateData 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.29]); Thu, 27 Jul 2017 11:47:37 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" This member allows us to store a pointer to some private data. However, the comment says it's used in both domain driver and network driver. Well, it is not. It's just one pointer and domain driver uses it directly. Network driver has a global driver variable. Update the comment to not confuse others. Signed-off-by: Michal Privoznik --- src/datatypes.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/datatypes.h b/src/datatypes.h index 288e057cc..8a0399cd0 100644 --- a/src/datatypes.h +++ b/src/datatypes.h @@ -472,8 +472,8 @@ struct _virConnect { virSecretDriverPtr secretDriver; virNWFilterDriverPtr nwfilterDriver; =20 - /* Private data pointer which can be used by driver and - * network driver as they wish. + /* Private data pointer which can be used by domain driver as + * it pleases. * NB: 'private' is a reserved word in C++. */ void * privateData; --=20 2.13.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sun May 5 16:25:04 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1501156066533825.843088174188; Thu, 27 Jul 2017 04:47:46 -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 A776E6E78F; Thu, 27 Jul 2017 11:47:44 +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 8206060A99; Thu, 27 Jul 2017 11:47:44 +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 35D364A469; Thu, 27 Jul 2017 11:47:44 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v6RBlXHG028553 for ; Thu, 27 Jul 2017 07:47:33 -0400 Received: by smtp.corp.redhat.com (Postfix) id 7B76D5D72E; Thu, 27 Jul 2017 11:47:33 +0000 (UTC) Received: from moe.brq.redhat.com (unknown [10.43.2.192]) by smtp.corp.redhat.com (Postfix) with ESMTP id D18E55D72D for ; Thu, 27 Jul 2017 11:47:32 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com A776E6E78F 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=fail smtp.mailfrom=libvir-list-bounces@redhat.com From: Michal Privoznik To: libvir-list@redhat.com Date: Thu, 27 Jul 2017 13:47:22 +0200 Message-Id: <2144b14146facc35fdb9254095b864fb0bab6958.1501155886.git.mprivozn@redhat.com> In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 2/7] Report error if virMutexInit fails X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Thu, 27 Jul 2017 11:47:45 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" The virMutexInit() function is not reporting any error on failure rather than returning -1 and setting errno. It's up to the caller to report the error. Signed-off-by: Michal Privoznik --- src/bhyve/bhyve_driver.c | 1 + src/lxc/lxc_driver.c | 1 + src/lxc/lxc_fuse.c | 4 +++- src/network/bridge_driver.c | 1 + src/node_device/node_device_hal.c | 1 + src/nwfilter/nwfilter_dhcpsnoop.c | 12 +++++++++--- src/nwfilter/nwfilter_driver.c | 5 ++++- src/nwfilter/nwfilter_gentech_driver.c | 4 +++- src/secret/secret_driver.c | 2 ++ src/storage/storage_driver.c | 2 ++ src/uml/uml_driver.c | 1 + src/util/virnetlink.c | 1 + src/util/virthreadpool.c | 4 +++- src/vmware/vmware_driver.c | 5 ++++- src/vz/vz_driver.c | 4 +++- tools/virsh-console.c | 4 +++- 16 files changed, 42 insertions(+), 10 deletions(-) diff --git a/src/bhyve/bhyve_driver.c b/src/bhyve/bhyve_driver.c index 550b257cd..cb22842f5 100644 --- a/src/bhyve/bhyve_driver.c +++ b/src/bhyve/bhyve_driver.c @@ -1240,6 +1240,7 @@ bhyveStateInitialize(bool privileged, return -1; =20 if (virMutexInit(&bhyve_driver->lock) < 0) { + virReportSystemError(errno, "%s", _("unable to init bhyve driver l= ock")); VIR_FREE(bhyve_driver); return -1; } diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c index 6eb88b0ba..6cd818a08 100644 --- a/src/lxc/lxc_driver.c +++ b/src/lxc/lxc_driver.c @@ -1631,6 +1631,7 @@ static int lxcStateInitialize(bool privileged, if (VIR_ALLOC(lxc_driver) < 0) return -1; if (virMutexInit(&lxc_driver->lock) < 0) { + virReportSystemError(errno, "%s", _("unable to init lxc driver loc= k")); VIR_FREE(lxc_driver); return -1; } diff --git a/src/lxc/lxc_fuse.c b/src/lxc/lxc_fuse.c index 60d41243a..dca381152 100644 --- a/src/lxc/lxc_fuse.c +++ b/src/lxc/lxc_fuse.c @@ -309,8 +309,10 @@ int lxcSetupFuse(virLXCFusePtr *f, virDomainDefPtr def) =20 fuse->def =3D def; =20 - if (virMutexInit(&fuse->lock) < 0) + if (virMutexInit(&fuse->lock) < 0) { + virReportSystemError(errno, "%s", _("unable to init fuse lock")); goto cleanup2; + } =20 if (virAsprintf(&fuse->mountpoint, "%s/%s.fuse/", LXC_STATE_DIR, def->name) < 0) diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c index d05e08fc9..c26ee6dcc 100644 --- a/src/network/bridge_driver.c +++ b/src/network/bridge_driver.c @@ -729,6 +729,7 @@ networkStateInitialize(bool privileged, goto error; =20 if (virMutexInit(&network_driver->lock) < 0) { + virReportSystemError(errno, "%s", _("unable to init network driver= lock")); VIR_FREE(network_driver); goto error; } diff --git a/src/node_device/node_device_hal.c b/src/node_device/node_devic= e_hal.c index c19e327c9..fcbbb4e6d 100644 --- a/src/node_device/node_device_hal.c +++ b/src/node_device/node_device_hal.c @@ -612,6 +612,7 @@ nodeStateInitialize(bool privileged ATTRIBUTE_UNUSED, return -1; =20 if (virMutexInit(&driver->lock) < 0) { + virReportSystemError(errno, "%s", _("unable to init node driver lo= ck")); VIR_FREE(driver); return -1; } diff --git a/src/nwfilter/nwfilter_dhcpsnoop.c b/src/nwfilter/nwfilter_dhcp= snoop.c index 4436e396f..b7bf913c9 100644 --- a/src/nwfilter/nwfilter_dhcpsnoop.c +++ b/src/nwfilter/nwfilter_dhcpsnoop.c @@ -592,10 +592,14 @@ virNWFilterSnoopReqNew(const char *ifkey) =20 req->threadStatus =3D THREAD_STATUS_NONE; =20 - if (virStrcpyStatic(req->ifkey, ifkey) =3D=3D NULL || - virMutexInitRecursive(&req->lock) < 0) + if (virStrcpyStatic(req->ifkey, ifkey) =3D=3D NULL) goto err_free_req; =20 + if (virMutexInitRecursive(&req->lock) < 0) { + virReportSystemError(errno, "%s", _("unable to init nwfilter lock"= )); + goto err_free_req; + } + if (virCondInit(&req->threadStatusCond) < 0) goto err_destroy_mutex; =20 @@ -2085,8 +2089,10 @@ virNWFilterDHCPSnoopInit(void) VIR_DEBUG("Initializing DHCP snooping"); =20 if (virMutexInitRecursive(&virNWFilterSnoopState.snoopLock) < 0 || - virMutexInit(&virNWFilterSnoopState.activeLock) < 0) + virMutexInit(&virNWFilterSnoopState.activeLock) < 0) { + virReportSystemError(errno, "%s", _("unable to init nwfilter lock"= )); return -1; + } =20 virNWFilterSnoopState.ifnameToKey =3D virHashCreate(0, NULL); virNWFilterSnoopState.active =3D virHashCreate(0, NULL); diff --git a/src/nwfilter/nwfilter_driver.c b/src/nwfilter/nwfilter_driver.c index 2f9a51c40..12e11a1c8 100644 --- a/src/nwfilter/nwfilter_driver.c +++ b/src/nwfilter/nwfilter_driver.c @@ -183,8 +183,11 @@ nwfilterStateInitialize(bool privileged, if (VIR_ALLOC(driver) < 0) return -1; =20 - if (virMutexInit(&driver->lock) < 0) + if (virMutexInit(&driver->lock) < 0) { + virReportSystemError(errno, "%s", + _("unable to init nwfilter driver lock")); goto err_free_driverstate; + } =20 /* remember that we are going to use firewalld */ driver->watchingFirewallD =3D (sysbus !=3D NULL); diff --git a/src/nwfilter/nwfilter_gentech_driver.c b/src/nwfilter/nwfilter= _gentech_driver.c index 6758200b5..c0b07cff2 100644 --- a/src/nwfilter/nwfilter_gentech_driver.c +++ b/src/nwfilter/nwfilter_gentech_driver.c @@ -77,8 +77,10 @@ int virNWFilterTechDriversInit(bool privileged) { size_t i =3D 0; VIR_DEBUG("Initializing NWFilter technology drivers"); - if (virMutexInitRecursive(&updateMutex) < 0) + if (virMutexInitRecursive(&updateMutex) < 0) { + virReportSystemError(errno, "%s", _("unable to init nwfilter lock"= )); return -1; + } =20 while (filter_tech_drivers[i]) { if (!(filter_tech_drivers[i]->flags & TECHDRV_FLAG_INITIALIZED)) diff --git a/src/secret/secret_driver.c b/src/secret/secret_driver.c index d833a863f..3848cfb81 100644 --- a/src/secret/secret_driver.c +++ b/src/secret/secret_driver.c @@ -458,6 +458,8 @@ secretStateInitialize(bool privileged, return -1; =20 if (virMutexInit(&driver->lock) < 0) { + virReportSystemError(errno, "%s", + _("unable to init secret driver lock")); VIR_FREE(driver); return -1; } diff --git a/src/storage/storage_driver.c b/src/storage/storage_driver.c index 855212063..f162f2e5a 100644 --- a/src/storage/storage_driver.c +++ b/src/storage/storage_driver.c @@ -254,6 +254,8 @@ storageStateInitialize(bool privileged, return ret; =20 if (virMutexInit(&driver->lock) < 0) { + virReportSystemError(errno, "%s", + _("cannot initialize storage driver lock")); VIR_FREE(driver); return ret; } diff --git a/src/uml/uml_driver.c b/src/uml/uml_driver.c index 1846835cc..62d78a3ee 100644 --- a/src/uml/uml_driver.c +++ b/src/uml/uml_driver.c @@ -473,6 +473,7 @@ umlStateInitialize(bool privileged, uml_driver->inhibitOpaque =3D opaque; =20 if (virMutexInit(¨_driver->lock) < 0) { + virReportSystemError(errno, "%s", _("unable to init uml driver loc= k")); VIR_FREE(uml_driver); return -1; } diff --git a/src/util/virnetlink.c b/src/util/virnetlink.c index d732fe8cf..f297207a3 100644 --- a/src/util/virnetlink.c +++ b/src/util/virnetlink.c @@ -862,6 +862,7 @@ virNetlinkEventServiceStart(unsigned int protocol, unsi= gned int groups) return -1; =20 if (virMutexInit(&srv->lock) < 0) { + virReportSystemError(errno, "%s", _("unable to init netlink lock")= ); VIR_FREE(srv); return -1; } diff --git a/src/util/virthreadpool.c b/src/util/virthreadpool.c index 10f2bd2c3..d9e17346f 100644 --- a/src/util/virthreadpool.c +++ b/src/util/virthreadpool.c @@ -239,8 +239,10 @@ virThreadPoolNewFull(size_t minWorkers, pool->jobFuncName =3D funcName; pool->jobOpaque =3D opaque; =20 - if (virMutexInit(&pool->mutex) < 0) + if (virMutexInit(&pool->mutex) < 0) { + virReportSystemError(errno, "%s", _("unable to init thread pool lo= ck")); goto error; + } if (virCondInit(&pool->cond) < 0) goto error; if (virCondInit(&pool->quit_cond) < 0) diff --git a/src/vmware/vmware_driver.c b/src/vmware/vmware_driver.c index 8b487c4a7..eed6c865b 100644 --- a/src/vmware/vmware_driver.c +++ b/src/vmware/vmware_driver.c @@ -176,8 +176,11 @@ vmwareConnectOpen(virConnectPtr conn, goto cleanup; } =20 - if (virMutexInit(&driver->lock) < 0) + if (virMutexInit(&driver->lock) < 0) { + virReportSystemError(errno, "%s", + _("unable to init vmware driver lock")); goto cleanup; + } =20 if ((tmp =3D STRSKIP(conn->uri->scheme, "vmware")) =3D=3D NULL) { virReportError(VIR_ERR_INTERNAL_ERROR, _("unable to parse URI " diff --git a/src/vz/vz_driver.c b/src/vz/vz_driver.c index 6f4aee365..fab01e1c3 100644 --- a/src/vz/vz_driver.c +++ b/src/vz/vz_driver.c @@ -4133,8 +4133,10 @@ vzStateInitialize(bool privileged ATTRIBUTE_UNUSED, return -1; } =20 - if (virMutexInit(&vz_driver_lock) < 0) + if (virMutexInit(&vz_driver_lock) < 0) { + virReportSystemError(errno, "%s", _("unable to init vz driver lock= ")); goto error; + } =20 /* Failing to create driver here is not fatal and only means * that next driver client will try once more when connecting */ diff --git a/tools/virsh-console.c b/tools/virsh-console.c index c1927c28a..ab3339ec7 100644 --- a/tools/virsh-console.c +++ b/tools/virsh-console.c @@ -351,8 +351,10 @@ virshRunConsole(vshControl *ctl, if (virDomainOpenConsole(dom, dev_name, con->st, flags) < 0) goto cleanup; =20 - if (virCondInit(&con->cond) < 0 || virMutexInit(&con->lock) < 0) + if (virCondInit(&con->cond) < 0 || virMutexInit(&con->lock) < 0) { + VIR_ERROR(_("unable to init console lock or condition")); goto cleanup; + } =20 virMutexLock(&con->lock); =20 --=20 2.13.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sun May 5 16:25:04 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1501156066680203.04004504332738; Thu, 27 Jul 2017 04:47:46 -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 BE112F2BAE; Thu, 27 Jul 2017 11:47:44 +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 9B6785D72E; Thu, 27 Jul 2017 11:47:44 +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 54A3B180B467; Thu, 27 Jul 2017 11:47:44 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v6RBlYli028560 for ; Thu, 27 Jul 2017 07:47:34 -0400 Received: by smtp.corp.redhat.com (Postfix) id 4B0855D72E; Thu, 27 Jul 2017 11:47:34 +0000 (UTC) Received: from moe.brq.redhat.com (unknown [10.43.2.192]) by smtp.corp.redhat.com (Postfix) with ESMTP id C897B5D72D for ; Thu, 27 Jul 2017 11:47:33 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com BE112F2BAE 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=fail smtp.mailfrom=libvir-list-bounces@redhat.com From: Michal Privoznik To: libvir-list@redhat.com Date: Thu, 27 Jul 2017 13:47:23 +0200 Message-Id: <94e306fcf30d0620ac7565faca13bf4f22fffb37.1501155886.git.mprivozn@redhat.com> In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 3/7] virnetworkobj: Make virNetworkObjFindBy{UUID, Name}Locked() static again 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.38]); Thu, 27 Jul 2017 11:47:45 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" These functions were made exportable back in 3aa3e072 when I was splitting network code into parsing and list management parts. Since then the split is finished now and these two functions do not need to be exported anymore. Signed-off-by: Michal Privoznik --- src/conf/virnetworkobj.c | 22 ++-------------------- src/conf/virnetworkobj.h | 8 -------- src/libvirt_private.syms | 2 -- 3 files changed, 2 insertions(+), 30 deletions(-) diff --git a/src/conf/virnetworkobj.c b/src/conf/virnetworkobj.c index ccde72e72..d8eca1e90 100644 --- a/src/conf/virnetworkobj.c +++ b/src/conf/virnetworkobj.c @@ -127,16 +127,7 @@ virNetworkObjListNew(void) } =20 =20 -/** - * virNetworkObjFindByUUIDLocked: - * @nets: list of network objects - * @uuid: network uuid to find - * - * This functions requires @nets to be locked already! - * - * Returns: not locked, but ref'd network object. - */ -virNetworkObjPtr +static virNetworkObjPtr virNetworkObjFindByUUIDLocked(virNetworkObjListPtr nets, const unsigned char *uuid) { @@ -193,16 +184,7 @@ virNetworkObjSearchName(const void *payload, } =20 =20 -/* - * virNetworkObjFindByNameLocked: - * @nets: list of network objects - * @name: network name to find - * - * This functions requires @nets to be locked already! - * - * Returns: not locked, but ref'd network object. - */ -virNetworkObjPtr +static virNetworkObjPtr virNetworkObjFindByNameLocked(virNetworkObjListPtr nets, const char *name) { diff --git a/src/conf/virnetworkobj.h b/src/conf/virnetworkobj.h index 8090c2e24..cb1fd13a3 100644 --- a/src/conf/virnetworkobj.h +++ b/src/conf/virnetworkobj.h @@ -65,18 +65,10 @@ virNetworkObjIsActive(const virNetworkObj *net) virNetworkObjListPtr virNetworkObjListNew(void); =20 -virNetworkObjPtr -virNetworkObjFindByUUIDLocked(virNetworkObjListPtr nets, - const unsigned char *uuid); - virNetworkObjPtr virNetworkObjFindByUUID(virNetworkObjListPtr nets, const unsigned char *uuid); =20 -virNetworkObjPtr -virNetworkObjFindByNameLocked(virNetworkObjListPtr nets, - const char *name); - virNetworkObjPtr virNetworkObjFindByName(virNetworkObjListPtr nets, const char *name); diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 37b815c06..054315fb7 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -941,9 +941,7 @@ virNetworkObjBridgeInUse; virNetworkObjDeleteConfig; virNetworkObjEndAPI; virNetworkObjFindByName; -virNetworkObjFindByNameLocked; virNetworkObjFindByUUID; -virNetworkObjFindByUUIDLocked; virNetworkObjGetPersistentDef; virNetworkObjListExport; virNetworkObjListForEach; --=20 2.13.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sun May 5 16:25:04 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 150115607215248.87713277857995; Thu, 27 Jul 2017 04:47:52 -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 CDF18D4D89; Thu, 27 Jul 2017 11:47:48 +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 9F9F56BF8D; Thu, 27 Jul 2017 11:47:48 +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 545E5410B1; Thu, 27 Jul 2017 11:47:48 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v6RBlZJe028565 for ; Thu, 27 Jul 2017 07:47:35 -0400 Received: by smtp.corp.redhat.com (Postfix) id 1B9665D73C; Thu, 27 Jul 2017 11:47:35 +0000 (UTC) Received: from moe.brq.redhat.com (unknown [10.43.2.192]) by smtp.corp.redhat.com (Postfix) with ESMTP id 9920C5D72D for ; Thu, 27 Jul 2017 11:47:34 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com CDF18D4D89 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=fail smtp.mailfrom=libvir-list-bounces@redhat.com From: Michal Privoznik To: libvir-list@redhat.com Date: Thu, 27 Jul 2017 13:47:24 +0200 Message-Id: In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 4/7] virNetworkObjList: Derive from virObjectRWLockable 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.39]); Thu, 27 Jul 2017 11:47:50 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" There is no reason why two threads trying to look up two networks should mutually exclude each other. Utilize new virObjectRWLockable that was just introduced. Signed-off-by: Michal Privoznik --- src/conf/virnetworkobj.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/conf/virnetworkobj.c b/src/conf/virnetworkobj.c index d8eca1e90..79cbee5f3 100644 --- a/src/conf/virnetworkobj.c +++ b/src/conf/virnetworkobj.c @@ -38,7 +38,7 @@ VIR_LOG_INIT("conf.virnetworkobj"); #define CLASS_ID_BITMAP_SIZE (1<<16) =20 struct _virNetworkObjList { - virObjectLockable parent; + virObjectRWLockable parent; =20 virHashTablePtr objs; }; @@ -57,7 +57,7 @@ virNetworkObjOnceInit(void) virNetworkObjDispose))) return -1; =20 - if (!(virNetworkObjListClass =3D virClassNew(virClassForObjectLockable= (), + if (!(virNetworkObjListClass =3D virClassNew(virClassForObjectRWLockab= le(), "virNetworkObjList", sizeof(virNetworkObjList), virNetworkObjListDispose))) @@ -115,7 +115,7 @@ virNetworkObjListNew(void) if (virNetworkObjInitialize() < 0) return NULL; =20 - if (!(nets =3D virObjectLockableNew(virNetworkObjListClass))) + if (!(nets =3D virObjectRWLockableNew(virNetworkObjListClass))) return NULL; =20 if (!(nets->objs =3D virHashCreate(50, virObjectFreeHashData))) { @@ -159,7 +159,7 @@ virNetworkObjFindByUUID(virNetworkObjListPtr nets, { virNetworkObjPtr ret; =20 - virObjectLock(nets); + virObjectLockRead(nets); ret =3D virNetworkObjFindByUUIDLocked(nets, uuid); virObjectUnlock(nets); if (ret) @@ -213,7 +213,7 @@ virNetworkObjFindByName(virNetworkObjListPtr nets, { virNetworkObjPtr ret; =20 - virObjectLock(nets); + virObjectLockRead(nets); ret =3D virNetworkObjFindByNameLocked(nets, name); virObjectUnlock(nets); if (ret) @@ -961,7 +961,7 @@ virNetworkObjBridgeInUse(virNetworkObjListPtr nets, virNetworkObjPtr obj; struct virNetworkObjBridgeInUseHelperData data =3D {bridge, skipname}; =20 - virObjectLock(nets); + virObjectLockRead(nets); obj =3D virHashSearch(nets->objs, virNetworkObjBridgeInUseHelper, &dat= a, NULL); virObjectUnlock(nets); =20 @@ -1148,7 +1148,7 @@ virNetworkObjListExport(virConnectPtr conn, int ret =3D -1; struct virNetworkObjListData data =3D { conn, NULL, filter, flags, 0, = false}; =20 - virObjectLock(netobjs); + virObjectLockRead(netobjs); if (nets && VIR_ALLOC_N(data.nets, virHashSize(netobjs->objs) + 1) < 0) goto cleanup; =20 @@ -1213,7 +1213,7 @@ virNetworkObjListForEach(virNetworkObjListPtr nets, void *opaque) { struct virNetworkObjListForEachHelperData data =3D {callback, opaque, = 0}; - virObjectLock(nets); + virObjectLockRead(nets); virHashForEach(nets->objs, virNetworkObjListForEachHelper, &data); virObjectUnlock(nets); return data.ret; @@ -1280,7 +1280,7 @@ virNetworkObjListGetNames(virNetworkObjListPtr nets, struct virNetworkObjListGetHelperData data =3D { conn, filter, names, nnames, active, 0, false}; =20 - virObjectLock(nets); + virObjectLockRead(nets); virHashForEach(nets->objs, virNetworkObjListGetHelper, &data); virObjectUnlock(nets); =20 @@ -1306,7 +1306,7 @@ virNetworkObjListNumOfNetworks(virNetworkObjListPtr n= ets, struct virNetworkObjListGetHelperData data =3D { conn, filter, NULL, -1, active, 0, false}; =20 - virObjectLock(nets); + virObjectLockRead(nets); virHashForEach(nets->objs, virNetworkObjListGetHelper, &data); virObjectUnlock(nets); =20 --=20 2.13.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sun May 5 16:25:04 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1501156063622942.9597044994526; Thu, 27 Jul 2017 04:47:43 -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 9C77C8B134; Thu, 27 Jul 2017 11:47:40 +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 757CA6C42F; Thu, 27 Jul 2017 11:47:40 +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 23C23180B467; Thu, 27 Jul 2017 11:47:40 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v6RBlZUP028573 for ; Thu, 27 Jul 2017 07:47:35 -0400 Received: by smtp.corp.redhat.com (Postfix) id E00405D72E; Thu, 27 Jul 2017 11:47:35 +0000 (UTC) Received: from moe.brq.redhat.com (unknown [10.43.2.192]) by smtp.corp.redhat.com (Postfix) with ESMTP id 6974C5D72D for ; Thu, 27 Jul 2017 11:47:35 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 9C77C8B134 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=fail smtp.mailfrom=libvir-list-bounces@redhat.com From: Michal Privoznik To: libvir-list@redhat.com Date: Thu, 27 Jul 2017 13:47:25 +0200 Message-Id: <74d99eb7b207d56d9f7099ad9fd66ab7e0e270e2.1501155886.git.mprivozn@redhat.com> In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 5/7] virNodeDeviceObjList: Derive from virObjectRWLockable 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]); Thu, 27 Jul 2017 11:47:41 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" There is no reason why two threads trying to look up two node devices should mutually exclude each other. Utilize new virObjectRWLockable that was just introduced. Signed-off-by: Michal Privoznik --- src/conf/virnodedeviceobj.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/conf/virnodedeviceobj.c b/src/conf/virnodedeviceobj.c index 3ab93a3ea..808365e21 100644 --- a/src/conf/virnodedeviceobj.c +++ b/src/conf/virnodedeviceobj.c @@ -40,7 +40,7 @@ struct _virNodeDeviceObj { }; =20 struct _virNodeDeviceObjList { - virObjectLockable parent; + virObjectRWLockable parent; =20 /* name string -> virNodeDeviceObj mapping * for O(1), lockless lookup-by-name */ @@ -63,7 +63,7 @@ virNodeDeviceObjOnceInit(void) virNodeDeviceObjDispose))) return -1; =20 - if (!(virNodeDeviceObjListClass =3D virClassNew(virClassForObjectLocka= ble(), + if (!(virNodeDeviceObjListClass =3D virClassNew(virClassForObjectRWLoc= kable(), "virNodeDeviceObjList", sizeof(virNodeDeviceObjL= ist), virNodeDeviceObjListDisp= ose))) @@ -231,7 +231,7 @@ virNodeDeviceObjListSearch(virNodeDeviceObjListPtr devs, { virNodeDeviceObjPtr obj; =20 - virObjectLock(devs); + virObjectLockRead(devs); obj =3D virHashSearch(devs->objs, callback, data, NULL); virObjectRef(obj); virObjectUnlock(devs); @@ -284,7 +284,7 @@ virNodeDeviceObjListFindByName(virNodeDeviceObjListPtr = devs, { virNodeDeviceObjPtr obj; =20 - virObjectLock(devs); + virObjectLockRead(devs); obj =3D virNodeDeviceObjListFindByNameLocked(devs, name); virObjectUnlock(devs); if (obj) @@ -462,7 +462,7 @@ virNodeDeviceObjListNew(void) if (virNodeDeviceObjInitialize() < 0) return NULL; =20 - if (!(devs =3D virObjectLockableNew(virNodeDeviceObjListClass))) + if (!(devs =3D virObjectRWLockableNew(virNodeDeviceObjListClass))) return NULL; =20 if (!(devs->objs =3D virHashCreate(50, virObjectFreeHashData))) { @@ -767,7 +767,7 @@ virNodeDeviceObjListNumOfDevices(virNodeDeviceObjListPt= r devs, struct virNodeDeviceCountData data =3D { .conn =3D conn, .aclfilter =3D aclfilter, .matchstr =3D cap, .coun= t =3D 0 }; =20 - virObjectLock(devs); + virObjectLockRead(devs); virHashForEach(devs->objs, virNodeDeviceObjListNumOfDevicesCallback, &= data); virObjectUnlock(devs); =20 @@ -828,7 +828,7 @@ virNodeDeviceObjListGetNames(virNodeDeviceObjListPtr de= vs, .conn =3D conn, .aclfilter =3D aclfilter, .matchstr =3D cap, .name= s =3D names, .nnames =3D 0, .maxnames =3D maxnames, .error =3D false }; =20 - virObjectLock(devs); + virObjectLockRead(devs); virHashForEach(devs->objs, virNodeDeviceObjListGetNamesCallback, &data= ); virObjectUnlock(devs); =20 @@ -932,7 +932,7 @@ virNodeDeviceObjListExport(virConnectPtr conn, .conn =3D conn, .aclfilter =3D aclfilter, .flags =3D flags, .devices =3D NULL, .ndevices =3D 0, .error =3D false }; =20 - virObjectLock(devs); + virObjectLockRead(devs); if (devices && VIR_ALLOC_N(data.devices, virHashSize(devs->objs) + 1) < 0) { virObjectUnlock(devs); --=20 2.13.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sun May 5 16:25:04 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1501156073067315.9295931969896; Thu, 27 Jul 2017 04:47:53 -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 512234024E; Thu, 27 Jul 2017 11:47:51 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 2E78E4FA0A; Thu, 27 Jul 2017 11:47:51 +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 D64C714B27; Thu, 27 Jul 2017 11:47:50 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v6RBlaT8028583 for ; Thu, 27 Jul 2017 07:47:36 -0400 Received: by smtp.corp.redhat.com (Postfix) id B26245D72E; Thu, 27 Jul 2017 11:47:36 +0000 (UTC) Received: from moe.brq.redhat.com (unknown [10.43.2.192]) by smtp.corp.redhat.com (Postfix) with ESMTP id 3A8BD5D72D for ; Thu, 27 Jul 2017 11:47:36 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 512234024E 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=fail smtp.mailfrom=libvir-list-bounces@redhat.com From: Michal Privoznik To: libvir-list@redhat.com Date: Thu, 27 Jul 2017 13:47:26 +0200 Message-Id: In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 6/7] virConnect: Derive from virObjectRWLockable 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]); Thu, 27 Jul 2017 11:47:51 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" There is no reason why two threads trying to copy error from connection should mutually exclude each other. Utilize new virObjectRWLockable that was just introduced. Signed-off-by: Michal Privoznik --- src/datatypes.c | 6 ++++-- src/datatypes.h | 2 +- src/util/virerror.c | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/datatypes.c b/src/datatypes.c index 46414ae29..c3e143c7e 100644 --- a/src/datatypes.c +++ b/src/datatypes.c @@ -83,8 +83,10 @@ virDataTypesOnceInit(void) DECLARE_CLASS_COMMON(basename, virClassForObject()) #define DECLARE_CLASS_LOCKABLE(basename) \ DECLARE_CLASS_COMMON(basename, virClassForObjectLockable()) +#define DECLARE_CLASS_RWLOCKABLE(basename) \ + DECLARE_CLASS_COMMON(basename, virClassForObjectRWLockable()) =20 - DECLARE_CLASS_LOCKABLE(virConnect); + DECLARE_CLASS_RWLOCKABLE(virConnect); DECLARE_CLASS_LOCKABLE(virConnectCloseCallbackData); DECLARE_CLASS(virDomain); DECLARE_CLASS(virDomainSnapshot); @@ -124,7 +126,7 @@ virGetConnect(void) if (virDataTypesInitialize() < 0) return NULL; =20 - return virObjectLockableNew(virConnectClass); + return virObjectRWLockableNew(virConnectClass); } =20 /** diff --git a/src/datatypes.h b/src/datatypes.h index 8a0399cd0..7076c2b8d 100644 --- a/src/datatypes.h +++ b/src/datatypes.h @@ -453,7 +453,7 @@ struct _virAdmConnectCloseCallbackData { * Internal structure associated to a connection */ struct _virConnect { - virObjectLockable object; + virObjectRWLockable object; =20 /* All the variables from here, until declared otherwise in one of * the following comments, are setup at time of connection open diff --git a/src/util/virerror.c b/src/util/virerror.c index ef17fb5e6..fead92d67 100644 --- a/src/util/virerror.c +++ b/src/util/virerror.c @@ -482,7 +482,7 @@ virConnCopyLastError(virConnectPtr conn, virErrorPtr to) =20 if (conn =3D=3D NULL) return -1; - virObjectLock(conn); + virObjectLockRead(conn); if (conn->err.code =3D=3D VIR_ERR_OK) virResetError(to); else --=20 2.13.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sun May 5 16:25:04 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1501156067455681.9326449862729; Thu, 27 Jul 2017 04:47:47 -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 8387940220; Thu, 27 Jul 2017 11:47:45 +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 362F86F9EC; Thu, 27 Jul 2017 11:47:45 +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 CED8B180BA81; Thu, 27 Jul 2017 11:47:44 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v6RBlb0L028592 for ; Thu, 27 Jul 2017 07:47:37 -0400 Received: by smtp.corp.redhat.com (Postfix) id 832D55D73C; Thu, 27 Jul 2017 11:47:37 +0000 (UTC) Received: from moe.brq.redhat.com (unknown [10.43.2.192]) by smtp.corp.redhat.com (Postfix) with ESMTP id 0B9175D72D for ; Thu, 27 Jul 2017 11:47:36 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 8387940220 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=fail smtp.mailfrom=libvir-list-bounces@redhat.com From: Michal Privoznik To: libvir-list@redhat.com Date: Thu, 27 Jul 2017 13:47:27 +0200 Message-Id: In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 7/7] storageDriver: Use RW locks 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.30]); Thu, 27 Jul 2017 11:47:46 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Currently, the storage driver doesn't have virStoragePoolList object. It maintains the list itself. To mutually exclude two threads trying to access it mutexes are used. However, this hurts performance as there's no reason why two threads reading from the list cannot run at the same time. Signed-off-by: Michal Privoznik --- src/conf/virstorageobj.h | 2 +- src/storage/storage_driver.c | 42 +++++++++++++++++++++++-----------------= -- 2 files changed, 24 insertions(+), 20 deletions(-) diff --git a/src/conf/virstorageobj.h b/src/conf/virstorageobj.h index 5a61b2aa6..585c63869 100644 --- a/src/conf/virstorageobj.h +++ b/src/conf/virstorageobj.h @@ -53,7 +53,7 @@ typedef struct _virStorageDriverState virStorageDriverSta= te; typedef virStorageDriverState *virStorageDriverStatePtr; =20 struct _virStorageDriverState { - virMutex lock; + virRWLock lock; =20 virStoragePoolObjList pools; =20 diff --git a/src/storage/storage_driver.c b/src/storage/storage_driver.c index f162f2e5a..b2ba667ef 100644 --- a/src/storage/storage_driver.c +++ b/src/storage/storage_driver.c @@ -70,11 +70,15 @@ struct _virStorageVolStreamInfo { =20 static void storageDriverLock(void) { - virMutexLock(&driver->lock); + virRWLockWrite(&driver->lock); +} +static void storageDriverLockRead(void) +{ + virRWLockRead(&driver->lock); } static void storageDriverUnlock(void) { - virMutexUnlock(&driver->lock); + virRWLockUnlock(&driver->lock); } =20 =20 @@ -253,7 +257,7 @@ storageStateInitialize(bool privileged, if (VIR_ALLOC(driver) < 0) return ret; =20 - if (virMutexInit(&driver->lock) < 0) { + if (virRWLockInit(&driver->lock) < 0) { virReportSystemError(errno, "%s", _("cannot initialize storage driver lock")); VIR_FREE(driver); @@ -382,7 +386,7 @@ storageStateCleanup(void) VIR_FREE(driver->autostartDir); VIR_FREE(driver->stateDir); storageDriverUnlock(); - virMutexDestroy(&driver->lock); + virRWLockDestroy(&driver->lock); VIR_FREE(driver); =20 return 0; @@ -417,7 +421,7 @@ virStoragePoolObjFromStoragePool(virStoragePoolPtr pool) { virStoragePoolObjPtr ret; =20 - storageDriverLock(); + storageDriverLockRead(); ret =3D storagePoolObjFindByUUID(pool->uuid, pool->name); storageDriverUnlock(); =20 @@ -430,7 +434,7 @@ storagePoolObjFindByName(const char *name) { virStoragePoolObjPtr obj; =20 - storageDriverLock(); + storageDriverLockRead(); if (!(obj =3D virStoragePoolObjFindByName(&driver->pools, name))) virReportError(VIR_ERR_NO_STORAGE_POOL, _("no storage pool with matching name '%s'"), name); @@ -447,7 +451,7 @@ storagePoolLookupByUUID(virConnectPtr conn, virStoragePoolObjPtr obj; virStoragePoolPtr pool =3D NULL; =20 - storageDriverLock(); + storageDriverLockRead(); obj =3D storagePoolObjFindByUUID(uuid, NULL); storageDriverUnlock(); if (!obj) @@ -511,7 +515,7 @@ storageConnectNumOfStoragePools(virConnectPtr conn) if (virConnectNumOfStoragePoolsEnsureACL(conn) < 0) return -1; =20 - storageDriverLock(); + storageDriverLockRead(); nactive =3D virStoragePoolObjNumOfStoragePools(&driver->pools, conn, t= rue, virConnectNumOfStoragePoo= lsCheckACL); storageDriverUnlock(); @@ -530,7 +534,7 @@ storageConnectListStoragePools(virConnectPtr conn, if (virConnectListStoragePoolsEnsureACL(conn) < 0) return -1; =20 - storageDriverLock(); + storageDriverLockRead(); got =3D virStoragePoolObjGetNames(&driver->pools, conn, true, virConnectListStoragePoolsCheckACL, names, maxnames); @@ -546,7 +550,7 @@ storageConnectNumOfDefinedStoragePools(virConnectPtr co= nn) if (virConnectNumOfDefinedStoragePoolsEnsureACL(conn) < 0) return -1; =20 - storageDriverLock(); + storageDriverLockRead(); nactive =3D virStoragePoolObjNumOfStoragePools(&driver->pools, conn, f= alse, virConnectNumOfDefinedSto= ragePoolsCheckACL); storageDriverUnlock(); @@ -565,7 +569,7 @@ storageConnectListDefinedStoragePools(virConnectPtr con= n, if (virConnectListDefinedStoragePoolsEnsureACL(conn) < 0) return -1; =20 - storageDriverLock(); + storageDriverLockRead(); got =3D virStoragePoolObjGetNames(&driver->pools, conn, false, virConnectListDefinedStoragePoolsCheck= ACL, names, maxnames); @@ -1457,7 +1461,7 @@ storageVolLookupByKey(virConnectPtr conn, size_t i; virStorageVolPtr vol =3D NULL; =20 - storageDriverLock(); + storageDriverLockRead(); for (i =3D 0; i < driver->pools.count && !vol; i++) { virStoragePoolObjLock(driver->pools.objs[i]); if (virStoragePoolObjIsActive(driver->pools.objs[i])) { @@ -1502,7 +1506,7 @@ storageVolLookupByPath(virConnectPtr conn, if (!cleanpath) return NULL; =20 - storageDriverLock(); + storageDriverLockRead(); for (i =3D 0; i < driver->pools.count && !vol; i++) { virStoragePoolObjPtr obj =3D driver->pools.objs[i]; virStorageVolDefPtr voldef; @@ -1597,7 +1601,7 @@ storagePoolLookupByTargetPath(virConnectPtr conn, if (!cleanpath) return NULL; =20 - storageDriverLock(); + storageDriverLockRead(); for (i =3D 0; i < driver->pools.count && !pool; i++) { virStoragePoolObjPtr obj =3D driver->pools.objs[i]; =20 @@ -1860,7 +1864,7 @@ storageVolCreateXML(virStoragePoolPtr pool, =20 VIR_FREE(buildvoldef); =20 - storageDriverLock(); + storageDriverLockRead(); virStoragePoolObjLock(obj); storageDriverUnlock(); =20 @@ -1926,7 +1930,7 @@ storageVolCreateXMLFrom(virStoragePoolPtr pool, VIR_STORAGE_VOL_CREATE_REFLINK, NULL); =20 - storageDriverLock(); + storageDriverLockRead(); obj =3D virStoragePoolObjFindByUUID(&driver->pools, pool->uuid); if (obj && STRNEQ(pool->name, volsrc->pool)) { virStoragePoolObjUnlock(obj); @@ -2060,7 +2064,7 @@ storageVolCreateXMLFrom(virStoragePoolPtr pool, =20 buildret =3D backend->buildVolFrom(pool->conn, obj, shadowvol, voldefs= rc, flags); =20 - storageDriverLock(); + storageDriverLockRead(); virStoragePoolObjLock(obj); if (objsrc) virStoragePoolObjLock(objsrc); @@ -2624,7 +2628,7 @@ storageConnectListAllStoragePools(virConnectPtr conn, if (virConnectListAllStoragePoolsEnsureACL(conn) < 0) goto cleanup; =20 - storageDriverLock(); + storageDriverLockRead(); ret =3D virStoragePoolObjListExport(conn, &driver->pools, pools, virConnectListAllStoragePoolsCheckAC= L, flags); @@ -3029,7 +3033,7 @@ virStoragePoolObjFindPoolByUUID(const unsigned char *= uuid) { virStoragePoolObjPtr obj; =20 - storageDriverLock(); + storageDriverLockRead(); obj =3D virStoragePoolObjFindByUUID(&driver->pools, uuid); storageDriverUnlock(); return obj; --=20 2.13.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list