From nobody Sun Feb 8 06:05:28 2026 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 1512438304125203.93282381938695; Mon, 4 Dec 2017 17:45:04 -0800 (PST) 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 B71647AE99; Tue, 5 Dec 2017 01:45:02 +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 8806F183C8; Tue, 5 Dec 2017 01:45:02 +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 49A853D381; Tue, 5 Dec 2017 01:45:02 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id vB51irWg030475 for ; Mon, 4 Dec 2017 20:44:53 -0500 Received: by smtp.corp.redhat.com (Postfix) id 3D2BD189B7; Tue, 5 Dec 2017 01:44:53 +0000 (UTC) Received: from localhost.localdomain.com (ovpn-117-84.phx2.redhat.com [10.3.117.84]) by smtp.corp.redhat.com (Postfix) with ESMTP id 04F4C189D4 for ; Tue, 5 Dec 2017 01:44:52 +0000 (UTC) From: John Ferlan To: libvir-list@redhat.com Date: Mon, 4 Dec 2017 20:43:55 -0500 Message-Id: <20171205014355.30524-5-jferlan@redhat.com> In-Reply-To: <20171205014355.30524-1-jferlan@redhat.com> References: <20171205014355.30524-1-jferlan@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 4/4] storage: Reduce need for using storageDriverLock 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]); Tue, 05 Dec 2017 01:45:03 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Now that the storage pools are self locking, we can reduce the number of places that need to take the big hammer storage driver lock Signed-off-by: John Ferlan --- src/storage/storage_driver.c | 103 +++++++--------------------------------= ---- 1 file changed, 16 insertions(+), 87 deletions(-) diff --git a/src/storage/storage_driver.c b/src/storage/storage_driver.c index c9d5b60d8..f86087fb0 100644 --- a/src/storage/storage_driver.c +++ b/src/storage/storage_driver.c @@ -415,13 +415,7 @@ storagePoolObjFindByUUID(const unsigned char *uuid, static virStoragePoolObjPtr virStoragePoolObjFromStoragePool(virStoragePoolPtr pool) { - virStoragePoolObjPtr ret; - - storageDriverLock(); - ret =3D storagePoolObjFindByUUID(pool->uuid, pool->name); - storageDriverUnlock(); - - return ret; + return storagePoolObjFindByUUID(pool->uuid, pool->name); } =20 =20 @@ -430,12 +424,9 @@ storagePoolObjFindByName(const char *name) { virStoragePoolObjPtr obj; =20 - storageDriverLock(); if (!(obj =3D virStoragePoolObjFindByName(driver->pools, name))) virReportError(VIR_ERR_NO_STORAGE_POOL, _("no storage pool with matching name '%s'"), name); - storageDriverUnlock(); - return obj; } =20 @@ -448,9 +439,7 @@ storagePoolLookupByUUID(virConnectPtr conn, virStoragePoolDefPtr def; virStoragePoolPtr pool =3D NULL; =20 - storageDriverLock(); obj =3D storagePoolObjFindByUUID(uuid, NULL); - storageDriverUnlock(); if (!obj) return NULL; def =3D virStoragePoolObjGetDef(obj); @@ -511,17 +500,11 @@ storagePoolLookupByVolume(virStorageVolPtr vol) static int storageConnectNumOfStoragePools(virConnectPtr conn) { - int nactive =3D 0; - if (virConnectNumOfStoragePoolsEnsureACL(conn) < 0) return -1; =20 - storageDriverLock(); - nactive =3D virStoragePoolObjNumOfStoragePools(driver->pools, conn, tr= ue, - virConnectNumOfStoragePoo= lsCheckACL); - storageDriverUnlock(); - - return nactive; + return virStoragePoolObjNumOfStoragePools(driver->pools, conn, true, + virConnectNumOfStoragePoolsC= heckACL); } =20 =20 @@ -530,33 +513,22 @@ storageConnectListStoragePools(virConnectPtr conn, char **const names, int maxnames) { - int got =3D 0; - if (virConnectListStoragePoolsEnsureACL(conn) < 0) return -1; =20 - storageDriverLock(); - got =3D virStoragePoolObjGetNames(driver->pools, conn, true, - virConnectListStoragePoolsCheckACL, - names, maxnames); - storageDriverUnlock(); - return got; + return virStoragePoolObjGetNames(driver->pools, conn, true, + virConnectListStoragePoolsCheckACL, + names, maxnames); } =20 static int storageConnectNumOfDefinedStoragePools(virConnectPtr conn) { - int nactive =3D 0; - if (virConnectNumOfDefinedStoragePoolsEnsureACL(conn) < 0) return -1; =20 - storageDriverLock(); - nactive =3D virStoragePoolObjNumOfStoragePools(driver->pools, conn, fa= lse, - virConnectNumOfDefinedSto= ragePoolsCheckACL); - storageDriverUnlock(); - - return nactive; + return virStoragePoolObjNumOfStoragePools(driver->pools, conn, false, + virConnectNumOfDefinedStora= gePoolsCheckACL); } =20 =20 @@ -565,17 +537,12 @@ storageConnectListDefinedStoragePools(virConnectPtr c= onn, char **const names, int maxnames) { - int got =3D 0; - if (virConnectListDefinedStoragePoolsEnsureACL(conn) < 0) return -1; =20 - storageDriverLock(); - got =3D virStoragePoolObjGetNames(driver->pools, conn, false, - virConnectListDefinedStoragePoolsCheck= ACL, - names, maxnames); - storageDriverUnlock(); - return got; + return virStoragePoolObjGetNames(driver->pools, conn, false, + virConnectListDefinedStoragePoolsChec= kACL, + names, maxnames); } =20 /* This method is required to be re-entrant / thread safe, so @@ -683,7 +650,6 @@ storagePoolCreateXML(virConnectPtr conn, VIR_EXCLUSIVE_FLAGS_RET(VIR_STORAGE_POOL_BUILD_OVERWRITE, VIR_STORAGE_POOL_BUILD_NO_OVERWRITE, NULL); =20 - storageDriverLock(); if (!(newDef =3D virStoragePoolDefParseString(xml))) goto cleanup; =20 @@ -760,7 +726,6 @@ storagePoolCreateXML(virConnectPtr conn, if (event) virObjectEventStateQueue(driver->storageEventState, event); virStoragePoolObjEndAPI(&obj); - storageDriverUnlock(); return pool; } =20 @@ -777,7 +742,6 @@ storagePoolDefineXML(virConnectPtr conn, =20 virCheckFlags(0, NULL); =20 - storageDriverLock(); if (!(newDef =3D virStoragePoolDefParseString(xml))) goto cleanup; =20 @@ -820,7 +784,6 @@ storagePoolDefineXML(virConnectPtr conn, virObjectEventStateQueue(driver->storageEventState, event); virStoragePoolDefFree(newDef); virStoragePoolObjEndAPI(&obj); - storageDriverUnlock(); return pool; } =20 @@ -833,7 +796,6 @@ storagePoolUndefine(virStoragePoolPtr pool) virObjectEventPtr event =3D NULL; int ret =3D -1; =20 - storageDriverLock(); if (!(obj =3D storagePoolObjFindByUUID(pool->uuid, pool->name))) goto cleanup; def =3D virStoragePoolObjGetDef(obj); @@ -881,7 +843,6 @@ storagePoolUndefine(virStoragePoolPtr pool) if (event) virObjectEventStateQueue(driver->storageEventState, event); virStoragePoolObjEndAPI(&obj); - storageDriverUnlock(); return ret; } =20 @@ -1023,7 +984,6 @@ storagePoolDestroy(virStoragePoolPtr pool) char *stateFile =3D NULL; int ret =3D -1; =20 - storageDriverLock(); if (!(obj =3D storagePoolObjFindByUUID(pool->uuid, pool->name))) goto cleanup; def =3D virStoragePoolObjGetDef(obj); @@ -1076,7 +1036,6 @@ storagePoolDestroy(virStoragePoolPtr pool) if (event) virObjectEventStateQueue(driver->storageEventState, event); virStoragePoolObjEndAPI(&obj); - storageDriverUnlock(); return ret; } =20 @@ -1158,7 +1117,6 @@ storagePoolRefresh(virStoragePoolPtr pool, =20 virCheckFlags(0, -1); =20 - storageDriverLock(); if (!(obj =3D storagePoolObjFindByUUID(pool->uuid, pool->name))) goto cleanup; def =3D virStoragePoolObjGetDef(obj); @@ -1206,7 +1164,6 @@ storagePoolRefresh(virStoragePoolPtr pool, if (event) virObjectEventStateQueue(driver->storageEventState, event); virStoragePoolObjEndAPI(&obj); - storageDriverUnlock(); return ret; } =20 @@ -1310,7 +1267,6 @@ storagePoolSetAutostart(virStoragePoolPtr pool, bool cur_autostart; int ret =3D -1; =20 - storageDriverLock(); if (!(obj =3D storagePoolObjFindByUUID(pool->uuid, pool->name))) goto cleanup; =20 @@ -1359,7 +1315,6 @@ storagePoolSetAutostart(virStoragePoolPtr pool, =20 cleanup: virStoragePoolObjEndAPI(&obj); - storageDriverUnlock(); return ret; } =20 @@ -1529,7 +1484,6 @@ storageVolLookupByKey(virConnectPtr conn, .conn =3D conn, .key =3D key, .voldef =3D NULL }; virStorageVolPtr vol =3D NULL; =20 - storageDriverLock(); if ((obj =3D virStoragePoolObjListSearch(driver->pools, storageVolLookupByKeyCallback, &data)) && data.voldef) { @@ -1541,7 +1495,6 @@ storageVolLookupByKey(virConnectPtr conn, } virStoragePoolObjEndAPI(&obj); } - storageDriverUnlock(); =20 if (!vol) virReportError(VIR_ERR_NO_STORAGE_VOL, @@ -1614,7 +1567,6 @@ storageVolLookupByPath(virConnectPtr conn, if (!(data.cleanpath =3D virFileSanitizePath(path))) return NULL; =20 - storageDriverLock(); if ((obj =3D virStoragePoolObjListSearch(driver->pools, storageVolLookupByPathCallback, &data)) && data.voldef) { @@ -1627,7 +1579,6 @@ storageVolLookupByPath(virConnectPtr conn, } virStoragePoolObjEndAPI(&obj); } - storageDriverUnlock(); =20 if (!vol) { if (STREQ(path, data.cleanpath)) { @@ -1673,7 +1624,6 @@ storagePoolLookupByTargetPath(virConnectPtr conn, if (!cleanpath) return NULL; =20 - storageDriverLock(); if ((obj =3D virStoragePoolObjListSearch(driver->pools, storagePoolLookupByTargetPathCa= llback, cleanpath))) { @@ -1681,7 +1631,6 @@ storagePoolLookupByTargetPath(virConnectPtr conn, pool =3D virGetStoragePool(conn, def->name, def->uuid, NULL, NULL); virStoragePoolObjEndAPI(&obj); } - storageDriverUnlock(); =20 if (!pool) { if (STREQ(path, cleanpath)) { @@ -1913,9 +1862,7 @@ storageVolCreateXML(virStoragePoolPtr pool, =20 VIR_FREE(buildvoldef); =20 - storageDriverLock(); virObjectLock(obj); - storageDriverUnlock(); =20 voldef->building =3D false; virStoragePoolObjDecrAsyncjobs(obj); @@ -1979,14 +1926,12 @@ storageVolCreateXMLFrom(virStoragePoolPtr pool, VIR_STORAGE_VOL_CREATE_REFLINK, NULL); =20 - storageDriverLock(); obj =3D virStoragePoolObjFindByUUID(driver->pools, pool->uuid); if (obj && STRNEQ(pool->name, volsrc->pool)) { virObjectUnlock(obj); objsrc =3D virStoragePoolObjFindByName(driver->pools, volsrc->pool= ); virObjectLock(obj); } - storageDriverUnlock(); if (!obj) { char uuidstr[VIR_UUID_STRING_BUFLEN]; virUUIDFormat(pool->uuid, uuidstr); @@ -2112,11 +2057,9 @@ storageVolCreateXMLFrom(virStoragePoolPtr pool, =20 buildret =3D backend->buildVolFrom(pool->conn, obj, shadowvol, voldefs= rc, flags); =20 - storageDriverLock(); virObjectLock(obj); if (objsrc) virObjectLock(objsrc); - storageDriverUnlock(); =20 voldefsrc->in_use--; voldef->building =3D false; @@ -2275,7 +2218,6 @@ virStorageVolPoolRefreshThread(void *opaque) virStorageBackendPtr backend; virObjectEventPtr event =3D NULL; =20 - storageDriverLock(); if (cbdata->vol_path) { if (virStorageBackendPloopRestoreDesc(cbdata->vol_path) < 0) goto cleanup; @@ -2305,7 +2247,6 @@ virStorageVolPoolRefreshThread(void *opaque) if (event) virObjectEventStateQueue(driver->storageEventState, event); virStoragePoolObjEndAPI(&obj); - storageDriverUnlock(); virStorageVolPoolRefreshDataFree(cbdata); } =20 @@ -2688,21 +2629,14 @@ storageConnectListAllStoragePools(virConnectPtr con= n, virStoragePoolPtr **pools, unsigned int flags) { - int ret =3D -1; - virCheckFlags(VIR_CONNECT_LIST_STORAGE_POOLS_FILTERS_ALL, -1); =20 if (virConnectListAllStoragePoolsEnsureACL(conn) < 0) - goto cleanup; - - storageDriverLock(); - ret =3D virStoragePoolObjListExport(conn, driver->pools, pools, - virConnectListAllStoragePoolsCheckAC= L, - flags); - storageDriverUnlock(); + return -1; =20 - cleanup: - return ret; + return virStoragePoolObjListExport(conn, driver->pools, pools, + virConnectListAllStoragePoolsCheckA= CL, + flags); } =20 static int @@ -3098,12 +3032,7 @@ virStorageTranslateDiskSourcePool(virConnectPtr conn, virStoragePoolObjPtr virStoragePoolObjFindPoolByUUID(const unsigned char *uuid) { - virStoragePoolObjPtr obj; - - storageDriverLock(); - obj =3D virStoragePoolObjFindByUUID(driver->pools, uuid); - storageDriverUnlock(); - return obj; + return virStoragePoolObjFindByUUID(driver->pools, uuid); } =20 =20 --=20 2.13.6 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list