From nobody Sun May 5 13:33:51 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 1489669677633738.0928041222693; Thu, 16 Mar 2017 06:07:57 -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 E04E2C1C5DE6; Thu, 16 Mar 2017 13:07:56 +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 B25585DC1D; Thu, 16 Mar 2017 13:07:56 +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 61A531853D02; Thu, 16 Mar 2017 13:07:56 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v2GD7sAO018769 for ; Thu, 16 Mar 2017 09:07:54 -0400 Received: by smtp.corp.redhat.com (Postfix) id 587E317A79; Thu, 16 Mar 2017 13:07:54 +0000 (UTC) Received: from localhost.localdomain.com (ovpn-116-76.phx2.redhat.com [10.3.116.76]) by smtp.corp.redhat.com (Postfix) with ESMTP id B9D1151DDF for ; Thu, 16 Mar 2017 13:07:53 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com E04E2C1C5DE6 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 E04E2C1C5DE6 From: John Ferlan To: libvir-list@redhat.com Date: Thu, 16 Mar 2017 09:07:44 -0400 Message-Id: <20170316130747.25288-2-jferlan@redhat.com> In-Reply-To: <20170316130747.25288-1-jferlan@redhat.com> References: <20170316130747.25288-1-jferlan@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-loop: libvir-list@redhat.com Subject: [libvirt] [REPOST PATCH 1/4] conf: Introduce virstorageobj 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.31]); Thu, 16 Mar 2017 13:07:57 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Move all the StoragePoolObj related API's into their own module virstorageobj from the storage_conf Purely code motion at this point, plus adjustments to cleanly build Signed-off-by: John Ferlan --- po/POTFILES.in | 1 + src/Makefile.am | 3 +- src/conf/storage_conf.c | 944 +-------------------------------------= -- src/conf/storage_conf.h | 116 +---- src/conf/virstorageobj.c | 980 ++++++++++++++++++++++++++++++++++++++= ++++ src/conf/virstorageobj.h | 142 ++++++ src/libvirt_private.syms | 35 +- src/storage/storage_backend.h | 2 +- src/storage/storage_driver.h | 2 +- src/storage/storage_util.h | 1 - src/test/test_driver.c | 1 + 11 files changed, 1149 insertions(+), 1078 deletions(-) create mode 100644 src/conf/virstorageobj.c create mode 100644 src/conf/virstorageobj.h diff --git a/po/POTFILES.in b/po/POTFILES.in index 539d60c..64cb88c 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -48,6 +48,7 @@ src/conf/virinterfaceobj.c src/conf/virnodedeviceobj.c src/conf/virnwfilterobj.c src/conf/virsecretobj.c +src/conf/virstorageobj.c src/cpu/cpu.c src/cpu/cpu_arm.c src/cpu/cpu_map.c diff --git a/src/Makefile.am b/src/Makefile.am index b129dd7..3b1bb1d 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -380,7 +380,8 @@ NWFILTER_CONF_SOURCES =3D \ # Storage driver generic impl APIs STORAGE_CONF_SOURCES =3D \ conf/storage_adapter_conf.h conf/storage_adapter_conf.c \ - conf/storage_conf.h conf/storage_conf.c + conf/storage_conf.h conf/storage_conf.c \ + conf/virstorageobj.h conf/virstorageobj.c =20 # Interface driver generic impl APIs INTERFACE_CONF_SOURCES =3D \ diff --git a/src/conf/storage_conf.c b/src/conf/storage_conf.c index 88aa23d..32fc02a 100644 --- a/src/conf/storage_conf.c +++ b/src/conf/storage_conf.c @@ -26,7 +26,6 @@ #include #include #include -#include #include #include #include @@ -393,57 +392,6 @@ virStoragePoolDefFree(virStoragePoolDefPtr def) } =20 =20 -void -virStoragePoolObjFree(virStoragePoolObjPtr obj) -{ - if (!obj) - return; - - virStoragePoolObjClearVols(obj); - - virStoragePoolDefFree(obj->def); - virStoragePoolDefFree(obj->newDef); - - VIR_FREE(obj->configFile); - VIR_FREE(obj->autostartLink); - - virMutexDestroy(&obj->lock); - - VIR_FREE(obj); -} - -void -virStoragePoolObjListFree(virStoragePoolObjListPtr pools) -{ - size_t i; - for (i =3D 0; i < pools->count; i++) - virStoragePoolObjFree(pools->objs[i]); - VIR_FREE(pools->objs); - pools->count =3D 0; -} - -void -virStoragePoolObjRemove(virStoragePoolObjListPtr pools, - virStoragePoolObjPtr pool) -{ - size_t i; - - virStoragePoolObjUnlock(pool); - - for (i =3D 0; i < pools->count; i++) { - virStoragePoolObjLock(pools->objs[i]); - if (pools->objs[i] =3D=3D pool) { - virStoragePoolObjUnlock(pools->objs[i]); - virStoragePoolObjFree(pools->objs[i]); - - VIR_DELETE_ELEMENT(pools->objs, i, pools->count); - break; - } - virStoragePoolObjUnlock(pools->objs[i]); - } -} - - static int virStoragePoolDefParseSource(xmlXPathContextPtr ctxt, virStoragePoolSourcePtr source, @@ -711,7 +659,7 @@ virStorageDefParsePerms(xmlXPathContextPtr ctxt, } =20 =20 -static virStoragePoolDefPtr +virStoragePoolDefPtr virStoragePoolDefParseXML(xmlXPathContextPtr ctxt) { virStoragePoolOptionsPtr options; @@ -1537,318 +1485,6 @@ virStorageVolDefFormat(virStoragePoolDefPtr pool, } =20 =20 -virStoragePoolObjPtr -virStoragePoolObjFindByUUID(virStoragePoolObjListPtr pools, - const unsigned char *uuid) -{ - size_t i; - - for (i =3D 0; i < pools->count; i++) { - virStoragePoolObjLock(pools->objs[i]); - if (!memcmp(pools->objs[i]->def->uuid, uuid, VIR_UUID_BUFLEN)) - return pools->objs[i]; - virStoragePoolObjUnlock(pools->objs[i]); - } - - return NULL; -} - -virStoragePoolObjPtr -virStoragePoolObjFindByName(virStoragePoolObjListPtr pools, - const char *name) -{ - size_t i; - - for (i =3D 0; i < pools->count; i++) { - virStoragePoolObjLock(pools->objs[i]); - if (STREQ(pools->objs[i]->def->name, name)) - return pools->objs[i]; - virStoragePoolObjUnlock(pools->objs[i]); - } - - return NULL; -} - -virStoragePoolObjPtr -virStoragePoolSourceFindDuplicateDevices(virStoragePoolObjPtr pool, - virStoragePoolDefPtr def) -{ - size_t i, j; - - for (i =3D 0; i < pool->def->source.ndevice; i++) { - for (j =3D 0; j < def->source.ndevice; j++) { - if (STREQ(pool->def->source.devices[i].path, def->source.devic= es[j].path)) - return pool; - } - } - - return NULL; -} - -void -virStoragePoolObjClearVols(virStoragePoolObjPtr pool) -{ - size_t i; - for (i =3D 0; i < pool->volumes.count; i++) - virStorageVolDefFree(pool->volumes.objs[i]); - - VIR_FREE(pool->volumes.objs); - pool->volumes.count =3D 0; -} - -virStorageVolDefPtr -virStorageVolDefFindByKey(virStoragePoolObjPtr pool, - const char *key) -{ - size_t i; - - for (i =3D 0; i < pool->volumes.count; i++) - if (STREQ(pool->volumes.objs[i]->key, key)) - return pool->volumes.objs[i]; - - return NULL; -} - -virStorageVolDefPtr -virStorageVolDefFindByPath(virStoragePoolObjPtr pool, - const char *path) -{ - size_t i; - - for (i =3D 0; i < pool->volumes.count; i++) - if (STREQ(pool->volumes.objs[i]->target.path, path)) - return pool->volumes.objs[i]; - - return NULL; -} - -virStorageVolDefPtr -virStorageVolDefFindByName(virStoragePoolObjPtr pool, - const char *name) -{ - size_t i; - - for (i =3D 0; i < pool->volumes.count; i++) - if (STREQ(pool->volumes.objs[i]->name, name)) - return pool->volumes.objs[i]; - - return NULL; -} - -virStoragePoolObjPtr -virStoragePoolObjAssignDef(virStoragePoolObjListPtr pools, - virStoragePoolDefPtr def) -{ - virStoragePoolObjPtr pool; - - if ((pool =3D virStoragePoolObjFindByName(pools, def->name))) { - if (!virStoragePoolObjIsActive(pool)) { - virStoragePoolDefFree(pool->def); - pool->def =3D def; - } else { - virStoragePoolDefFree(pool->newDef); - pool->newDef =3D def; - } - return pool; - } - - if (VIR_ALLOC(pool) < 0) - return NULL; - - if (virMutexInit(&pool->lock) < 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("cannot initialize mutex")); - VIR_FREE(pool); - return NULL; - } - virStoragePoolObjLock(pool); - pool->active =3D 0; - - if (VIR_APPEND_ELEMENT_COPY(pools->objs, pools->count, pool) < 0) { - virStoragePoolObjUnlock(pool); - virStoragePoolObjFree(pool); - return NULL; - } - pool->def =3D def; - - return pool; -} - -static virStoragePoolObjPtr -virStoragePoolObjLoad(virStoragePoolObjListPtr pools, - const char *file, - const char *path, - const char *autostartLink) -{ - virStoragePoolDefPtr def; - virStoragePoolObjPtr pool; - - if (!(def =3D virStoragePoolDefParseFile(path))) - return NULL; - - if (!virFileMatchesNameSuffix(file, def->name, ".xml")) { - virReportError(VIR_ERR_XML_ERROR, - _("Storage pool config filename '%s' does " - "not match pool name '%s'"), - path, def->name); - virStoragePoolDefFree(def); - return NULL; - } - - if (!(pool =3D virStoragePoolObjAssignDef(pools, def))) { - virStoragePoolDefFree(def); - return NULL; - } - - VIR_FREE(pool->configFile); /* for driver reload */ - if (VIR_STRDUP(pool->configFile, path) < 0) { - virStoragePoolObjRemove(pools, pool); - return NULL; - } - VIR_FREE(pool->autostartLink); /* for driver reload */ - if (VIR_STRDUP(pool->autostartLink, autostartLink) < 0) { - virStoragePoolObjRemove(pools, pool); - return NULL; - } - - pool->autostart =3D virFileLinkPointsTo(pool->autostartLink, - pool->configFile); - - return pool; -} - - -virStoragePoolObjPtr -virStoragePoolLoadState(virStoragePoolObjListPtr pools, - const char *stateDir, - const char *name) -{ - char *stateFile =3D NULL; - virStoragePoolDefPtr def =3D NULL; - virStoragePoolObjPtr pool =3D NULL; - xmlDocPtr xml =3D NULL; - xmlXPathContextPtr ctxt =3D NULL; - xmlNodePtr node =3D NULL; - - if (!(stateFile =3D virFileBuildPath(stateDir, name, ".xml"))) - goto error; - - if (!(xml =3D virXMLParseCtxt(stateFile, NULL, _("(pool state)"), &ctx= t))) - goto error; - - if (!(node =3D virXPathNode("//pool", ctxt))) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("Could not find any 'pool' element in state file"= )); - goto error; - } - - ctxt->node =3D node; - if (!(def =3D virStoragePoolDefParseXML(ctxt))) - goto error; - - if (STRNEQ(name, def->name)) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Storage pool state file '%s' does not match " - "pool name '%s'"), - stateFile, def->name); - goto error; - } - - /* create the object */ - if (!(pool =3D virStoragePoolObjAssignDef(pools, def))) - goto error; - - /* XXX: future handling of some additional useful status data, - * for now, if a status file for a pool exists, the pool will be marked - * as active - */ - - pool->active =3D 1; - - cleanup: - VIR_FREE(stateFile); - xmlFreeDoc(xml); - xmlXPathFreeContext(ctxt); - return pool; - - error: - virStoragePoolDefFree(def); - goto cleanup; -} - - -int -virStoragePoolLoadAllState(virStoragePoolObjListPtr pools, - const char *stateDir) -{ - DIR *dir; - struct dirent *entry; - int ret =3D -1; - int rc; - - if ((rc =3D virDirOpenIfExists(&dir, stateDir)) <=3D 0) - return rc; - - while ((ret =3D virDirRead(dir, &entry, stateDir)) > 0) { - virStoragePoolObjPtr pool; - - if (!virFileStripSuffix(entry->d_name, ".xml")) - continue; - - if (!(pool =3D virStoragePoolLoadState(pools, stateDir, entry->d_n= ame))) - continue; - virStoragePoolObjUnlock(pool); - } - - VIR_DIR_CLOSE(dir); - return ret; -} - - -int -virStoragePoolLoadAllConfigs(virStoragePoolObjListPtr pools, - const char *configDir, - const char *autostartDir) -{ - DIR *dir; - struct dirent *entry; - int ret; - int rc; - - if ((rc =3D virDirOpenIfExists(&dir, configDir)) <=3D 0) - return rc; - - while ((ret =3D virDirRead(dir, &entry, configDir)) > 0) { - char *path; - char *autostartLink; - virStoragePoolObjPtr pool; - - if (!virFileHasSuffix(entry->d_name, ".xml")) - continue; - - if (!(path =3D virFileBuildPath(configDir, entry->d_name, NULL))) - continue; - - if (!(autostartLink =3D virFileBuildPath(autostartDir, entry->d_na= me, - NULL))) { - VIR_FREE(path); - continue; - } - - pool =3D virStoragePoolObjLoad(pools, entry->d_name, path, - autostartLink); - if (pool) - virStoragePoolObjUnlock(pool); - - VIR_FREE(path); - VIR_FREE(autostartLink); - } - - VIR_DIR_CLOSE(dir); - return ret; -} - - static int virStoragePoolSaveXML(const char *path, virStoragePoolDefPtr def, const char *xml) @@ -1921,52 +1557,6 @@ virStoragePoolSaveConfig(const char *configFile, return ret; } =20 -int -virStoragePoolObjSaveDef(virStorageDriverStatePtr driver, - virStoragePoolObjPtr pool, - virStoragePoolDefPtr def) -{ - if (!pool->configFile) { - if (virFileMakePath(driver->configDir) < 0) { - virReportSystemError(errno, - _("cannot create config directory %s"), - driver->configDir); - return -1; - } - - if (!(pool->configFile =3D virFileBuildPath(driver->configDir, - def->name, ".xml"))) { - return -1; - } - - if (!(pool->autostartLink =3D virFileBuildPath(driver->autostartDi= r, - def->name, ".xml"))) { - VIR_FREE(pool->configFile); - return -1; - } - } - - return virStoragePoolSaveConfig(pool->configFile, def); -} - -int -virStoragePoolObjDeleteDef(virStoragePoolObjPtr pool) -{ - if (!pool->configFile) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("no config file for %s"), pool->def->name); - return -1; - } - - if (unlink(pool->configFile) < 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("cannot remove config for %s"), - pool->def->name); - return -1; - } - - return 0; -} =20 virStoragePoolSourcePtr virStoragePoolSourceListNewSource(virStoragePoolSourceListPtr list) @@ -2019,535 +1609,3 @@ virStoragePoolSourceListFormat(virStoragePoolSource= ListPtr def) virBufferFreeAndReset(&buf); return NULL; } - - -/* - * virStoragePoolObjIsDuplicate: - * @doms : virStoragePoolObjListPtr to search - * @def : virStoragePoolDefPtr definition of pool to lookup - * @check_active: If true, ensure that pool is not active - * - * Returns: -1 on error - * 0 if pool is new - * 1 if pool is a duplicate - */ -int -virStoragePoolObjIsDuplicate(virStoragePoolObjListPtr pools, - virStoragePoolDefPtr def, - unsigned int check_active) -{ - int ret =3D -1; - virStoragePoolObjPtr pool =3D NULL; - - /* See if a Pool with matching UUID already exists */ - pool =3D virStoragePoolObjFindByUUID(pools, def->uuid); - if (pool) { - /* UUID matches, but if names don't match, refuse it */ - if (STRNEQ(pool->def->name, def->name)) { - char uuidstr[VIR_UUID_STRING_BUFLEN]; - virUUIDFormat(pool->def->uuid, uuidstr); - virReportError(VIR_ERR_OPERATION_FAILED, - _("pool '%s' is already defined with uuid %s"), - pool->def->name, uuidstr); - goto cleanup; - } - - if (check_active) { - /* UUID & name match, but if Pool is already active, refuse it= */ - if (virStoragePoolObjIsActive(pool)) { - virReportError(VIR_ERR_OPERATION_INVALID, - _("pool is already active as '%s'"), - pool->def->name); - goto cleanup; - } - } - - ret =3D 1; - } else { - /* UUID does not match, but if a name matches, refuse it */ - pool =3D virStoragePoolObjFindByName(pools, def->name); - if (pool) { - char uuidstr[VIR_UUID_STRING_BUFLEN]; - virUUIDFormat(pool->def->uuid, uuidstr); - virReportError(VIR_ERR_OPERATION_FAILED, - _("pool '%s' already exists with uuid %s"), - def->name, uuidstr); - goto cleanup; - } - ret =3D 0; - } - - cleanup: - if (pool) - virStoragePoolObjUnlock(pool); - return ret; -} - - -static int -getSCSIHostNumber(virStorageAdapterSCSIHostPtr scsi_host, - unsigned int *hostnum) -{ - int ret =3D -1; - unsigned int num; - char *name =3D NULL; - - if (scsi_host->has_parent) { - virPCIDeviceAddressPtr addr =3D &scsi_host->parentaddr; - unsigned int unique_id =3D scsi_host->unique_id; - - if (!(name =3D virSCSIHostGetNameByParentaddr(addr->domain, - addr->bus, - addr->slot, - addr->function, - unique_id))) - goto cleanup; - if (virSCSIHostGetNumber(name, &num) < 0) - goto cleanup; - } else { - if (virSCSIHostGetNumber(scsi_host->name, &num) < 0) - goto cleanup; - } - - *hostnum =3D num; - ret =3D 0; - - cleanup: - VIR_FREE(name); - return ret; -} - - -static bool -virStorageIsSameHostnum(const char *name, - unsigned int scsi_hostnum) -{ - unsigned int fc_hostnum; - - if (virSCSIHostGetNumber(name, &fc_hostnum) =3D=3D 0 && - scsi_hostnum =3D=3D fc_hostnum) - return true; - - return false; -} - - -/* - * matchFCHostToSCSIHost: - * - * @conn: Connection pointer - * @fchost: fc_host adapter ptr (either def or pool->def) - * @scsi_hostnum: Already determined "scsi_pool" hostnum - * - * Returns true/false whether there is a match between the incoming - * fc_adapter host# and the scsi_host host# - */ -static bool -matchFCHostToSCSIHost(virConnectPtr conn, - virStorageAdapterFCHostPtr fchost, - unsigned int scsi_hostnum) -{ - bool ret =3D false; - char *name =3D NULL; - char *scsi_host_name =3D NULL; - char *parent_name =3D NULL; - - /* If we have a parent defined, get its hostnum, and compare to the - * scsi_hostnum. If they are the same, then we have a match - */ - if (fchost->parent && - virStorageIsSameHostnum(fchost->parent, scsi_hostnum)) - return true; - - /* If we find an fc adapter name, then either libvirt created a vHBA - * for this fc_host or a 'virsh nodedev-create' generated a vHBA. - */ - if ((name =3D virVHBAGetHostByWWN(NULL, fchost->wwnn, fchost->wwpn))) { - - /* Get the scsi_hostN for the vHBA in order to see if it - * matches our scsi_hostnum - */ - if (virStorageIsSameHostnum(name, scsi_hostnum)) { - ret =3D true; - goto cleanup; - } - - /* We weren't provided a parent, so we have to query the node - * device driver in order to ascertain the parent of the vHBA. - * If the parent fc_hostnum is the same as the scsi_hostnum, we - * have a match. - */ - if (conn && !fchost->parent) { - if (virAsprintf(&scsi_host_name, "scsi_%s", name) < 0) - goto cleanup; - if ((parent_name =3D virNodeDeviceGetParentName(conn, - scsi_host_name))= ) { - if (virStorageIsSameHostnum(parent_name, scsi_hostnum)) { - ret =3D true; - goto cleanup; - } - } else { - /* Throw away the error and fall through */ - virResetLastError(); - VIR_DEBUG("Could not determine parent vHBA"); - } - } - } - - /* NB: Lack of a name means that this vHBA hasn't yet been created, - * which means our scsi_host cannot be using the vHBA. Furthermore, - * lack of a provided parent means libvirt is going to choose the - * "best" fc_host capable adapter based on availabilty. That could - * conflict with an existing scsi_host definition, but there's no - * way to know that now. - */ - - cleanup: - VIR_FREE(name); - VIR_FREE(parent_name); - VIR_FREE(scsi_host_name); - return ret; -} - - -static bool -matchSCSIAdapterParent(virStorageAdapterSCSIHostPtr pool_scsi_host, - virStorageAdapterSCSIHostPtr def_scsi_host) -{ - virPCIDeviceAddressPtr pooladdr =3D &pool_scsi_host->parentaddr; - virPCIDeviceAddressPtr defaddr =3D &def_scsi_host->parentaddr; - - if (pooladdr->domain =3D=3D defaddr->domain && - pooladdr->bus =3D=3D defaddr->bus && - pooladdr->slot =3D=3D defaddr->slot && - pooladdr->function =3D=3D defaddr->function && - pool_scsi_host->unique_id =3D=3D def_scsi_host->unique_id) - return true; - - return false; -} - -static bool -virStoragePoolSourceMatchSingleHost(virStoragePoolSourcePtr poolsrc, - virStoragePoolSourcePtr defsrc) -{ - if (poolsrc->nhost !=3D 1 && defsrc->nhost !=3D 1) - return false; - - if (defsrc->hosts[0].port && - poolsrc->hosts[0].port !=3D defsrc->hosts[0].port) - return false; - - return STREQ(poolsrc->hosts[0].name, defsrc->hosts[0].name); -} - - -static bool -virStoragePoolSourceISCSIMatch(virStoragePoolObjPtr matchpool, - virStoragePoolDefPtr def) -{ - virStoragePoolSourcePtr poolsrc =3D &matchpool->def->source; - virStoragePoolSourcePtr defsrc =3D &def->source; - - /* NB: Do not check the source host name */ - if (STRNEQ_NULLABLE(poolsrc->initiator.iqn, defsrc->initiator.iqn)) - return false; - - return true; -} - - -int -virStoragePoolSourceFindDuplicate(virConnectPtr conn, - virStoragePoolObjListPtr pools, - virStoragePoolDefPtr def) -{ - size_t i; - int ret =3D 1; - virStoragePoolObjPtr pool =3D NULL; - virStoragePoolObjPtr matchpool =3D NULL; - virStorageAdapterPtr pool_adapter; - virStorageAdapterPtr def_adapter; - - /* Check the pool list for duplicate underlying storage */ - for (i =3D 0; i < pools->count; i++) { - pool =3D pools->objs[i]; - if (def->type !=3D pool->def->type) - continue; - - /* Don't match against ourself if re-defining existing pool ! */ - if (STREQ(pool->def->name, def->name)) - continue; - - virStoragePoolObjLock(pool); - - switch ((virStoragePoolType)pool->def->type) { - case VIR_STORAGE_POOL_DIR: - if (STREQ(pool->def->target.path, def->target.path)) - matchpool =3D pool; - break; - - case VIR_STORAGE_POOL_GLUSTER: - if (STREQ(pool->def->source.name, def->source.name) && - STREQ_NULLABLE(pool->def->source.dir, def->source.dir) && - virStoragePoolSourceMatchSingleHost(&pool->def->source, - &def->source)) - matchpool =3D pool; - break; - - case VIR_STORAGE_POOL_NETFS: - if (STREQ(pool->def->source.dir, def->source.dir) && - virStoragePoolSourceMatchSingleHost(&pool->def->source, - &def->source)) - matchpool =3D pool; - break; - - case VIR_STORAGE_POOL_SCSI: - pool_adapter =3D &pool->def->source.adapter; - def_adapter =3D &def->source.adapter; - - if (pool_adapter->type =3D=3D VIR_STORAGE_ADAPTER_TYPE_FC_HOST= && - def_adapter->type =3D=3D VIR_STORAGE_ADAPTER_TYPE_FC_HOST)= { - virStorageAdapterFCHostPtr pool_fchost =3D - &pool_adapter->data.fchost; - virStorageAdapterFCHostPtr def_fchost =3D - &def_adapter->data.fchost; - - if (STREQ(pool_fchost->wwnn, def_fchost->wwnn) && - STREQ(pool_fchost->wwpn, def_fchost->wwpn)) - matchpool =3D pool; - } else if (pool_adapter->type =3D=3D - VIR_STORAGE_ADAPTER_TYPE_SCSI_HOST && - def_adapter->type =3D=3D - VIR_STORAGE_ADAPTER_TYPE_SCSI_HOST) { - virStorageAdapterSCSIHostPtr pool_scsi_host =3D - &pool_adapter->data.scsi_host; - virStorageAdapterSCSIHostPtr def_scsi_host =3D - &def_adapter->data.scsi_host; - unsigned int pool_hostnum, def_hostnum; - - if (pool_scsi_host->has_parent && - def_scsi_host->has_parent && - matchSCSIAdapterParent(pool_scsi_host, def_scsi_host))= { - matchpool =3D pool; - break; - } - - if (getSCSIHostNumber(pool_scsi_host, &pool_hostnum) < 0 || - getSCSIHostNumber(def_scsi_host, &def_hostnum) < 0) - break; - if (pool_hostnum =3D=3D def_hostnum) - matchpool =3D pool; - } else if (pool_adapter->type =3D=3D - VIR_STORAGE_ADAPTER_TYPE_FC_HOST && - def_adapter->type =3D=3D - VIR_STORAGE_ADAPTER_TYPE_SCSI_HOST) { - virStorageAdapterFCHostPtr pool_fchost =3D - &pool_adapter->data.fchost; - virStorageAdapterSCSIHostPtr def_scsi_host =3D - &def_adapter->data.scsi_host; - unsigned int scsi_hostnum; - - /* Get the scsi_hostN for the scsi_host source adapter def= */ - if (getSCSIHostNumber(def_scsi_host, &scsi_hostnum) < 0) - break; - - if (matchFCHostToSCSIHost(conn, pool_fchost, scsi_hostnum)= ) { - matchpool =3D pool; - break; - } - - } else if (pool_adapter->type =3D=3D - VIR_STORAGE_ADAPTER_TYPE_SCSI_HOST && - def_adapter->type =3D=3D - VIR_STORAGE_ADAPTER_TYPE_FC_HOST) { - virStorageAdapterSCSIHostPtr pool_scsi_host =3D - &pool_adapter->data.scsi_host; - virStorageAdapterFCHostPtr def_fchost =3D - &def_adapter->data.fchost; - unsigned int scsi_hostnum; - - if (getSCSIHostNumber(pool_scsi_host, &scsi_hostnum) < 0) - break; - - if (matchFCHostToSCSIHost(conn, def_fchost, scsi_hostnum))= { - matchpool =3D pool; - break; - } - } - break; - case VIR_STORAGE_POOL_ISCSI: - matchpool =3D virStoragePoolSourceFindDuplicateDevices(pool, d= ef); - if (matchpool) { - if (!virStoragePoolSourceISCSIMatch(matchpool, def)) - matchpool =3D NULL; - } - break; - case VIR_STORAGE_POOL_FS: - case VIR_STORAGE_POOL_LOGICAL: - case VIR_STORAGE_POOL_DISK: - case VIR_STORAGE_POOL_ZFS: - matchpool =3D virStoragePoolSourceFindDuplicateDevices(pool, d= ef); - break; - case VIR_STORAGE_POOL_SHEEPDOG: - if (virStoragePoolSourceMatchSingleHost(&pool->def->source, - &def->source)) - matchpool =3D pool; - break; - case VIR_STORAGE_POOL_MPATH: - /* Only one mpath pool is valid per host */ - matchpool =3D pool; - break; - case VIR_STORAGE_POOL_VSTORAGE: - if (STREQ(pool->def->source.name, def->source.name)) - matchpool =3D pool; - break; - case VIR_STORAGE_POOL_RBD: - case VIR_STORAGE_POOL_LAST: - break; - } - virStoragePoolObjUnlock(pool); - - if (matchpool) - break; - } - - if (matchpool) { - virReportError(VIR_ERR_OPERATION_FAILED, - _("Storage source conflict with pool: '%s'"), - matchpool->def->name); - ret =3D -1; - } - return ret; -} - -void -virStoragePoolObjLock(virStoragePoolObjPtr obj) -{ - virMutexLock(&obj->lock); -} - -void -virStoragePoolObjUnlock(virStoragePoolObjPtr obj) -{ - virMutexUnlock(&obj->lock); -} - -#define MATCH(FLAG) (flags & (FLAG)) -static bool -virStoragePoolMatch(virStoragePoolObjPtr poolobj, - unsigned int flags) -{ - /* filter by active state */ - if (MATCH(VIR_CONNECT_LIST_STORAGE_POOLS_FILTERS_ACTIVE) && - !((MATCH(VIR_CONNECT_LIST_STORAGE_POOLS_ACTIVE) && - virStoragePoolObjIsActive(poolobj)) || - (MATCH(VIR_CONNECT_LIST_STORAGE_POOLS_INACTIVE) && - !virStoragePoolObjIsActive(poolobj)))) - return false; - - /* filter by persistence */ - if (MATCH(VIR_CONNECT_LIST_STORAGE_POOLS_FILTERS_PERSISTENT) && - !((MATCH(VIR_CONNECT_LIST_STORAGE_POOLS_PERSISTENT) && - poolobj->configFile) || - (MATCH(VIR_CONNECT_LIST_STORAGE_POOLS_TRANSIENT) && - !poolobj->configFile))) - return false; - - /* filter by autostart option */ - if (MATCH(VIR_CONNECT_LIST_STORAGE_POOLS_FILTERS_AUTOSTART) && - !((MATCH(VIR_CONNECT_LIST_STORAGE_POOLS_AUTOSTART) && - poolobj->autostart) || - (MATCH(VIR_CONNECT_LIST_STORAGE_POOLS_NO_AUTOSTART) && - !poolobj->autostart))) - return false; - - /* filter by pool type */ - if (MATCH(VIR_CONNECT_LIST_STORAGE_POOLS_FILTERS_POOL_TYPE)) { - if (!((MATCH(VIR_CONNECT_LIST_STORAGE_POOLS_DIR) && - (poolobj->def->type =3D=3D VIR_STORAGE_POOL_DIR)) || - (MATCH(VIR_CONNECT_LIST_STORAGE_POOLS_FS) && - (poolobj->def->type =3D=3D VIR_STORAGE_POOL_FS)) || - (MATCH(VIR_CONNECT_LIST_STORAGE_POOLS_NETFS) && - (poolobj->def->type =3D=3D VIR_STORAGE_POOL_NETFS)) || - (MATCH(VIR_CONNECT_LIST_STORAGE_POOLS_LOGICAL) && - (poolobj->def->type =3D=3D VIR_STORAGE_POOL_LOGICAL)) || - (MATCH(VIR_CONNECT_LIST_STORAGE_POOLS_DISK) && - (poolobj->def->type =3D=3D VIR_STORAGE_POOL_DISK)) || - (MATCH(VIR_CONNECT_LIST_STORAGE_POOLS_ISCSI) && - (poolobj->def->type =3D=3D VIR_STORAGE_POOL_ISCSI)) || - (MATCH(VIR_CONNECT_LIST_STORAGE_POOLS_SCSI) && - (poolobj->def->type =3D=3D VIR_STORAGE_POOL_SCSI)) || - (MATCH(VIR_CONNECT_LIST_STORAGE_POOLS_MPATH) && - (poolobj->def->type =3D=3D VIR_STORAGE_POOL_MPATH)) || - (MATCH(VIR_CONNECT_LIST_STORAGE_POOLS_RBD) && - (poolobj->def->type =3D=3D VIR_STORAGE_POOL_RBD)) || - (MATCH(VIR_CONNECT_LIST_STORAGE_POOLS_SHEEPDOG) && - (poolobj->def->type =3D=3D VIR_STORAGE_POOL_SHEEPDOG)) || - (MATCH(VIR_CONNECT_LIST_STORAGE_POOLS_GLUSTER) && - (poolobj->def->type =3D=3D VIR_STORAGE_POOL_GLUSTER)) || - (MATCH(VIR_CONNECT_LIST_STORAGE_POOLS_ZFS) && - poolobj->def->type =3D=3D VIR_STORAGE_POOL_ZFS) || - (MATCH(VIR_CONNECT_LIST_STORAGE_POOLS_VSTORAGE) && - poolobj->def->type =3D=3D VIR_STORAGE_POOL_VSTORAGE))) - return false; - } - - return true; -} -#undef MATCH - -int -virStoragePoolObjListExport(virConnectPtr conn, - virStoragePoolObjList poolobjs, - virStoragePoolPtr **pools, - virStoragePoolObjListFilter filter, - unsigned int flags) -{ - virStoragePoolPtr *tmp_pools =3D NULL; - virStoragePoolPtr pool =3D NULL; - int npools =3D 0; - int ret =3D -1; - size_t i; - - if (pools && VIR_ALLOC_N(tmp_pools, poolobjs.count + 1) < 0) - goto cleanup; - - for (i =3D 0; i < poolobjs.count; i++) { - virStoragePoolObjPtr poolobj =3D poolobjs.objs[i]; - virStoragePoolObjLock(poolobj); - if ((!filter || filter(conn, poolobj->def)) && - virStoragePoolMatch(poolobj, flags)) { - if (pools) { - if (!(pool =3D virGetStoragePool(conn, - poolobj->def->name, - poolobj->def->uuid, - NULL, NULL))) { - virStoragePoolObjUnlock(poolobj); - goto cleanup; - } - tmp_pools[npools] =3D pool; - } - npools++; - } - virStoragePoolObjUnlock(poolobj); - } - - if (tmp_pools) { - /* trim the array to the final size */ - ignore_value(VIR_REALLOC_N(tmp_pools, npools + 1)); - *pools =3D tmp_pools; - tmp_pools =3D NULL; - } - - ret =3D npools; - - cleanup: - if (tmp_pools) { - for (i =3D 0; i < npools; i++) - virObjectUnref(tmp_pools[i]); - } - - VIR_FREE(tmp_pools); - return ret; -} diff --git a/src/conf/storage_conf.h b/src/conf/storage_conf.h index 63a64aa..6cd6a5c 100644 --- a/src/conf/storage_conf.h +++ b/src/conf/storage_conf.h @@ -231,48 +231,6 @@ struct _virStoragePoolDef { virStoragePoolTarget target; }; =20 -typedef struct _virStoragePoolObj virStoragePoolObj; -typedef virStoragePoolObj *virStoragePoolObjPtr; - -struct _virStoragePoolObj { - virMutex lock; - - char *configFile; - char *autostartLink; - bool active; - int autostart; - unsigned int asyncjobs; - - virStoragePoolDefPtr def; - virStoragePoolDefPtr newDef; - - virStorageVolDefList volumes; -}; - -typedef struct _virStoragePoolObjList virStoragePoolObjList; -typedef virStoragePoolObjList *virStoragePoolObjListPtr; -struct _virStoragePoolObjList { - size_t count; - virStoragePoolObjPtr *objs; -}; - -typedef struct _virStorageDriverState virStorageDriverState; -typedef virStorageDriverState *virStorageDriverStatePtr; - -struct _virStorageDriverState { - virMutex lock; - - virStoragePoolObjList pools; - - char *configDir; - char *autostartDir; - char *stateDir; - bool privileged; - - /* Immutable pointer, self-locking APIs */ - virObjectEventStatePtr storageEventState; -}; - typedef struct _virStoragePoolSourceList virStoragePoolSourceList; typedef virStoragePoolSourceList *virStoragePoolSourceListPtr; struct _virStoragePoolSourceList { @@ -281,48 +239,7 @@ struct _virStoragePoolSourceList { virStoragePoolSourcePtr sources; }; =20 -typedef bool (*virStoragePoolObjListFilter)(virConnectPtr conn, - virStoragePoolDefPtr def); - -static inline int -virStoragePoolObjIsActive(virStoragePoolObjPtr pool) -{ - return pool->active; -} - -int virStoragePoolLoadAllConfigs(virStoragePoolObjListPtr pools, - const char *configDir, - const char *autostartDir); - -int virStoragePoolLoadAllState(virStoragePoolObjListPtr pools, - const char *stateDir); - -virStoragePoolObjPtr -virStoragePoolLoadState(virStoragePoolObjListPtr pools, - const char *stateDir, - const char *name); -virStoragePoolObjPtr -virStoragePoolObjFindByUUID(virStoragePoolObjListPtr pools, - const unsigned char *uuid); -virStoragePoolObjPtr -virStoragePoolObjFindByName(virStoragePoolObjListPtr pools, - const char *name); -virStoragePoolObjPtr -virStoragePoolSourceFindDuplicateDevices(virStoragePoolObjPtr pool, - virStoragePoolDefPtr def); - -virStorageVolDefPtr -virStorageVolDefFindByKey(virStoragePoolObjPtr pool, - const char *key); -virStorageVolDefPtr -virStorageVolDefFindByPath(virStoragePoolObjPtr pool, - const char *path); -virStorageVolDefPtr -virStorageVolDefFindByName(virStoragePoolObjPtr pool, - const char *name); - -void virStoragePoolObjClearVols(virStoragePoolObjPtr pool); - +virStoragePoolDefPtr virStoragePoolDefParseXML(xmlXPathContextPtr ctxt); virStoragePoolDefPtr virStoragePoolDefParseString(const char *xml); virStoragePoolDefPtr virStoragePoolDefParseFile(const char *filename); virStoragePoolDefPtr virStoragePoolDefParseNode(xmlDocPtr xml, @@ -351,28 +268,15 @@ virStorageVolDefParseNode(virStoragePoolDefPtr pool, char *virStorageVolDefFormat(virStoragePoolDefPtr pool, virStorageVolDefPtr def); =20 -virStoragePoolObjPtr -virStoragePoolObjAssignDef(virStoragePoolObjListPtr pools, - virStoragePoolDefPtr def); - int virStoragePoolSaveState(const char *stateFile, virStoragePoolDefPtr def); int virStoragePoolSaveConfig(const char *configFile, virStoragePoolDefPtr def); -int virStoragePoolObjSaveDef(virStorageDriverStatePtr driver, - virStoragePoolObjPtr pool, - virStoragePoolDefPtr def); -int virStoragePoolObjDeleteDef(virStoragePoolObjPtr pool); - void virStorageVolDefFree(virStorageVolDefPtr def); void virStoragePoolSourceClear(virStoragePoolSourcePtr source); void virStoragePoolSourceDeviceClear(virStoragePoolSourceDevicePtr dev); void virStoragePoolSourceFree(virStoragePoolSourcePtr source); void virStoragePoolDefFree(virStoragePoolDefPtr def); -void virStoragePoolObjFree(virStoragePoolObjPtr pool); -void virStoragePoolObjListFree(virStoragePoolObjListPtr pools); -void virStoragePoolObjRemove(virStoragePoolObjListPtr pools, - virStoragePoolObjPtr pool); =20 virStoragePoolSourcePtr virStoragePoolDefParseSourceString(const char *srcSpec, @@ -381,18 +285,6 @@ virStoragePoolSourcePtr virStoragePoolSourceListNewSource(virStoragePoolSourceListPtr list); char *virStoragePoolSourceListFormat(virStoragePoolSourceListPtr def); =20 -int virStoragePoolObjIsDuplicate(virStoragePoolObjListPtr pools, - virStoragePoolDefPtr def, - unsigned int check_active); - -int virStoragePoolSourceFindDuplicate(virConnectPtr conn, - virStoragePoolObjListPtr pools, - virStoragePoolDefPtr def); - -void virStoragePoolObjLock(virStoragePoolObjPtr obj); -void virStoragePoolObjUnlock(virStoragePoolObjPtr obj); - - typedef enum { VIR_STORAGE_POOL_FS_AUTO =3D 0, VIR_STORAGE_POOL_FS_EXT2, @@ -521,10 +413,4 @@ VIR_ENUM_DECL(virStoragePartedFs) VIR_CONNECT_LIST_STORAGE_POOLS_FILTERS_AUTOSTART | \ VIR_CONNECT_LIST_STORAGE_POOLS_FILTERS_POOL_TYPE) =20 -int virStoragePoolObjListExport(virConnectPtr conn, - virStoragePoolObjList poolobjs, - virStoragePoolPtr **pools, - virStoragePoolObjListFilter filter, - unsigned int flags); - #endif /* __VIR_STORAGE_CONF_H__ */ diff --git a/src/conf/virstorageobj.c b/src/conf/virstorageobj.c new file mode 100644 index 0000000..5f2f947 --- /dev/null +++ b/src/conf/virstorageobj.c @@ -0,0 +1,980 @@ +/* + * virstorageobj.c: internal storage pool and volume objects handling + * (derived from storage_conf.c) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see + * . + */ + +#include +#include + +#include "datatypes.h" +#include "node_device_conf.h" +#include "virstorageobj.h" + +#include "viralloc.h" +#include "virerror.h" +#include "virfile.h" +#include "virlog.h" +#include "virscsihost.h" +#include "virstring.h" +#include "virvhba.h" + +#define VIR_FROM_THIS VIR_FROM_STORAGE + +VIR_LOG_INIT("conf.virstorageobj"); + + +void +virStoragePoolObjFree(virStoragePoolObjPtr obj) +{ + if (!obj) + return; + + virStoragePoolObjClearVols(obj); + + virStoragePoolDefFree(obj->def); + virStoragePoolDefFree(obj->newDef); + + VIR_FREE(obj->configFile); + VIR_FREE(obj->autostartLink); + + virMutexDestroy(&obj->lock); + + VIR_FREE(obj); +} + +void +virStoragePoolObjListFree(virStoragePoolObjListPtr pools) +{ + size_t i; + for (i =3D 0; i < pools->count; i++) + virStoragePoolObjFree(pools->objs[i]); + VIR_FREE(pools->objs); + pools->count =3D 0; +} + +void +virStoragePoolObjRemove(virStoragePoolObjListPtr pools, + virStoragePoolObjPtr pool) +{ + size_t i; + + virStoragePoolObjUnlock(pool); + + for (i =3D 0; i < pools->count; i++) { + virStoragePoolObjLock(pools->objs[i]); + if (pools->objs[i] =3D=3D pool) { + virStoragePoolObjUnlock(pools->objs[i]); + virStoragePoolObjFree(pools->objs[i]); + + VIR_DELETE_ELEMENT(pools->objs, i, pools->count); + break; + } + virStoragePoolObjUnlock(pools->objs[i]); + } +} + + +virStoragePoolObjPtr +virStoragePoolObjFindByUUID(virStoragePoolObjListPtr pools, + const unsigned char *uuid) +{ + size_t i; + + for (i =3D 0; i < pools->count; i++) { + virStoragePoolObjLock(pools->objs[i]); + if (!memcmp(pools->objs[i]->def->uuid, uuid, VIR_UUID_BUFLEN)) + return pools->objs[i]; + virStoragePoolObjUnlock(pools->objs[i]); + } + + return NULL; +} + +virStoragePoolObjPtr +virStoragePoolObjFindByName(virStoragePoolObjListPtr pools, + const char *name) +{ + size_t i; + + for (i =3D 0; i < pools->count; i++) { + virStoragePoolObjLock(pools->objs[i]); + if (STREQ(pools->objs[i]->def->name, name)) + return pools->objs[i]; + virStoragePoolObjUnlock(pools->objs[i]); + } + + return NULL; +} + +virStoragePoolObjPtr +virStoragePoolSourceFindDuplicateDevices(virStoragePoolObjPtr pool, + virStoragePoolDefPtr def) +{ + size_t i, j; + + for (i =3D 0; i < pool->def->source.ndevice; i++) { + for (j =3D 0; j < def->source.ndevice; j++) { + if (STREQ(pool->def->source.devices[i].path, def->source.devic= es[j].path)) + return pool; + } + } + + return NULL; +} + +void +virStoragePoolObjClearVols(virStoragePoolObjPtr pool) +{ + size_t i; + for (i =3D 0; i < pool->volumes.count; i++) + virStorageVolDefFree(pool->volumes.objs[i]); + + VIR_FREE(pool->volumes.objs); + pool->volumes.count =3D 0; +} + +virStorageVolDefPtr +virStorageVolDefFindByKey(virStoragePoolObjPtr pool, + const char *key) +{ + size_t i; + + for (i =3D 0; i < pool->volumes.count; i++) + if (STREQ(pool->volumes.objs[i]->key, key)) + return pool->volumes.objs[i]; + + return NULL; +} + +virStorageVolDefPtr +virStorageVolDefFindByPath(virStoragePoolObjPtr pool, + const char *path) +{ + size_t i; + + for (i =3D 0; i < pool->volumes.count; i++) + if (STREQ(pool->volumes.objs[i]->target.path, path)) + return pool->volumes.objs[i]; + + return NULL; +} + +virStorageVolDefPtr +virStorageVolDefFindByName(virStoragePoolObjPtr pool, + const char *name) +{ + size_t i; + + for (i =3D 0; i < pool->volumes.count; i++) + if (STREQ(pool->volumes.objs[i]->name, name)) + return pool->volumes.objs[i]; + + return NULL; +} + +virStoragePoolObjPtr +virStoragePoolObjAssignDef(virStoragePoolObjListPtr pools, + virStoragePoolDefPtr def) +{ + virStoragePoolObjPtr pool; + + if ((pool =3D virStoragePoolObjFindByName(pools, def->name))) { + if (!virStoragePoolObjIsActive(pool)) { + virStoragePoolDefFree(pool->def); + pool->def =3D def; + } else { + virStoragePoolDefFree(pool->newDef); + pool->newDef =3D def; + } + return pool; + } + + if (VIR_ALLOC(pool) < 0) + return NULL; + + if (virMutexInit(&pool->lock) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("cannot initialize mutex")); + VIR_FREE(pool); + return NULL; + } + virStoragePoolObjLock(pool); + pool->active =3D 0; + + if (VIR_APPEND_ELEMENT_COPY(pools->objs, pools->count, pool) < 0) { + virStoragePoolObjUnlock(pool); + virStoragePoolObjFree(pool); + return NULL; + } + pool->def =3D def; + + return pool; +} + +static virStoragePoolObjPtr +virStoragePoolObjLoad(virStoragePoolObjListPtr pools, + const char *file, + const char *path, + const char *autostartLink) +{ + virStoragePoolDefPtr def; + virStoragePoolObjPtr pool; + + if (!(def =3D virStoragePoolDefParseFile(path))) + return NULL; + + if (!virFileMatchesNameSuffix(file, def->name, ".xml")) { + virReportError(VIR_ERR_XML_ERROR, + _("Storage pool config filename '%s' does " + "not match pool name '%s'"), + path, def->name); + virStoragePoolDefFree(def); + return NULL; + } + + if (!(pool =3D virStoragePoolObjAssignDef(pools, def))) { + virStoragePoolDefFree(def); + return NULL; + } + + VIR_FREE(pool->configFile); /* for driver reload */ + if (VIR_STRDUP(pool->configFile, path) < 0) { + virStoragePoolObjRemove(pools, pool); + return NULL; + } + VIR_FREE(pool->autostartLink); /* for driver reload */ + if (VIR_STRDUP(pool->autostartLink, autostartLink) < 0) { + virStoragePoolObjRemove(pools, pool); + return NULL; + } + + pool->autostart =3D virFileLinkPointsTo(pool->autostartLink, + pool->configFile); + + return pool; +} + + +virStoragePoolObjPtr +virStoragePoolLoadState(virStoragePoolObjListPtr pools, + const char *stateDir, + const char *name) +{ + char *stateFile =3D NULL; + virStoragePoolDefPtr def =3D NULL; + virStoragePoolObjPtr pool =3D NULL; + xmlDocPtr xml =3D NULL; + xmlXPathContextPtr ctxt =3D NULL; + xmlNodePtr node =3D NULL; + + if (!(stateFile =3D virFileBuildPath(stateDir, name, ".xml"))) + goto error; + + if (!(xml =3D virXMLParseCtxt(stateFile, NULL, _("(pool state)"), &ctx= t))) + goto error; + + if (!(node =3D virXPathNode("//pool", ctxt))) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Could not find any 'pool' element in state file"= )); + goto error; + } + + ctxt->node =3D node; + if (!(def =3D virStoragePoolDefParseXML(ctxt))) + goto error; + + if (STRNEQ(name, def->name)) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Storage pool state file '%s' does not match " + "pool name '%s'"), + stateFile, def->name); + goto error; + } + + /* create the object */ + if (!(pool =3D virStoragePoolObjAssignDef(pools, def))) + goto error; + + /* XXX: future handling of some additional useful status data, + * for now, if a status file for a pool exists, the pool will be marked + * as active + */ + + pool->active =3D 1; + + cleanup: + VIR_FREE(stateFile); + xmlFreeDoc(xml); + xmlXPathFreeContext(ctxt); + return pool; + + error: + virStoragePoolDefFree(def); + goto cleanup; +} + + +int +virStoragePoolLoadAllState(virStoragePoolObjListPtr pools, + const char *stateDir) +{ + DIR *dir; + struct dirent *entry; + int ret =3D -1; + int rc; + + if ((rc =3D virDirOpenIfExists(&dir, stateDir)) <=3D 0) + return rc; + + while ((ret =3D virDirRead(dir, &entry, stateDir)) > 0) { + virStoragePoolObjPtr pool; + + if (!virFileStripSuffix(entry->d_name, ".xml")) + continue; + + if (!(pool =3D virStoragePoolLoadState(pools, stateDir, entry->d_n= ame))) + continue; + virStoragePoolObjUnlock(pool); + } + + VIR_DIR_CLOSE(dir); + return ret; +} + + +int +virStoragePoolLoadAllConfigs(virStoragePoolObjListPtr pools, + const char *configDir, + const char *autostartDir) +{ + DIR *dir; + struct dirent *entry; + int ret; + int rc; + + if ((rc =3D virDirOpenIfExists(&dir, configDir)) <=3D 0) + return rc; + + while ((ret =3D virDirRead(dir, &entry, configDir)) > 0) { + char *path; + char *autostartLink; + virStoragePoolObjPtr pool; + + if (!virFileHasSuffix(entry->d_name, ".xml")) + continue; + + if (!(path =3D virFileBuildPath(configDir, entry->d_name, NULL))) + continue; + + if (!(autostartLink =3D virFileBuildPath(autostartDir, entry->d_na= me, + NULL))) { + VIR_FREE(path); + continue; + } + + pool =3D virStoragePoolObjLoad(pools, entry->d_name, path, + autostartLink); + if (pool) + virStoragePoolObjUnlock(pool); + + VIR_FREE(path); + VIR_FREE(autostartLink); + } + + VIR_DIR_CLOSE(dir); + return ret; +} + + +int +virStoragePoolObjSaveDef(virStorageDriverStatePtr driver, + virStoragePoolObjPtr pool, + virStoragePoolDefPtr def) +{ + if (!pool->configFile) { + if (virFileMakePath(driver->configDir) < 0) { + virReportSystemError(errno, + _("cannot create config directory %s"), + driver->configDir); + return -1; + } + + if (!(pool->configFile =3D virFileBuildPath(driver->configDir, + def->name, ".xml"))) { + return -1; + } + + if (!(pool->autostartLink =3D virFileBuildPath(driver->autostartDi= r, + def->name, ".xml"))) { + VIR_FREE(pool->configFile); + return -1; + } + } + + return virStoragePoolSaveConfig(pool->configFile, def); +} + +int +virStoragePoolObjDeleteDef(virStoragePoolObjPtr pool) +{ + if (!pool->configFile) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("no config file for %s"), pool->def->name); + return -1; + } + + if (unlink(pool->configFile) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("cannot remove config for %s"), + pool->def->name); + return -1; + } + + return 0; +} + + +/* + * virStoragePoolObjIsDuplicate: + * @doms : virStoragePoolObjListPtr to search + * @def : virStoragePoolDefPtr definition of pool to lookup + * @check_active: If true, ensure that pool is not active + * + * Returns: -1 on error + * 0 if pool is new + * 1 if pool is a duplicate + */ +int +virStoragePoolObjIsDuplicate(virStoragePoolObjListPtr pools, + virStoragePoolDefPtr def, + unsigned int check_active) +{ + int ret =3D -1; + virStoragePoolObjPtr pool =3D NULL; + + /* See if a Pool with matching UUID already exists */ + pool =3D virStoragePoolObjFindByUUID(pools, def->uuid); + if (pool) { + /* UUID matches, but if names don't match, refuse it */ + if (STRNEQ(pool->def->name, def->name)) { + char uuidstr[VIR_UUID_STRING_BUFLEN]; + virUUIDFormat(pool->def->uuid, uuidstr); + virReportError(VIR_ERR_OPERATION_FAILED, + _("pool '%s' is already defined with uuid %s"), + pool->def->name, uuidstr); + goto cleanup; + } + + if (check_active) { + /* UUID & name match, but if Pool is already active, refuse it= */ + if (virStoragePoolObjIsActive(pool)) { + virReportError(VIR_ERR_OPERATION_INVALID, + _("pool is already active as '%s'"), + pool->def->name); + goto cleanup; + } + } + + ret =3D 1; + } else { + /* UUID does not match, but if a name matches, refuse it */ + pool =3D virStoragePoolObjFindByName(pools, def->name); + if (pool) { + char uuidstr[VIR_UUID_STRING_BUFLEN]; + virUUIDFormat(pool->def->uuid, uuidstr); + virReportError(VIR_ERR_OPERATION_FAILED, + _("pool '%s' already exists with uuid %s"), + def->name, uuidstr); + goto cleanup; + } + ret =3D 0; + } + + cleanup: + if (pool) + virStoragePoolObjUnlock(pool); + return ret; +} + + +static int +getSCSIHostNumber(virStorageAdapterSCSIHostPtr scsi_host, + unsigned int *hostnum) +{ + int ret =3D -1; + unsigned int num; + char *name =3D NULL; + + if (scsi_host->has_parent) { + virPCIDeviceAddressPtr addr =3D &scsi_host->parentaddr; + unsigned int unique_id =3D scsi_host->unique_id; + + if (!(name =3D virSCSIHostGetNameByParentaddr(addr->domain, + addr->bus, + addr->slot, + addr->function, + unique_id))) + goto cleanup; + if (virSCSIHostGetNumber(name, &num) < 0) + goto cleanup; + } else { + if (virSCSIHostGetNumber(scsi_host->name, &num) < 0) + goto cleanup; + } + + *hostnum =3D num; + ret =3D 0; + + cleanup: + VIR_FREE(name); + return ret; +} + + +static bool +virStorageIsSameHostnum(const char *name, + unsigned int scsi_hostnum) +{ + unsigned int fc_hostnum; + + if (virSCSIHostGetNumber(name, &fc_hostnum) =3D=3D 0 && + scsi_hostnum =3D=3D fc_hostnum) + return true; + + return false; +} + + +/* + * matchFCHostToSCSIHost: + * + * @conn: Connection pointer + * @fchost: fc_host adapter ptr (either def or pool->def) + * @scsi_hostnum: Already determined "scsi_pool" hostnum + * + * Returns true/false whether there is a match between the incoming + * fc_adapter host# and the scsi_host host# + */ +static bool +matchFCHostToSCSIHost(virConnectPtr conn, + virStorageAdapterFCHostPtr fchost, + unsigned int scsi_hostnum) +{ + bool ret =3D false; + char *name =3D NULL; + char *scsi_host_name =3D NULL; + char *parent_name =3D NULL; + + /* If we have a parent defined, get its hostnum, and compare to the + * scsi_hostnum. If they are the same, then we have a match + */ + if (fchost->parent && + virStorageIsSameHostnum(fchost->parent, scsi_hostnum)) + return true; + + /* If we find an fc adapter name, then either libvirt created a vHBA + * for this fc_host or a 'virsh nodedev-create' generated a vHBA. + */ + if ((name =3D virVHBAGetHostByWWN(NULL, fchost->wwnn, fchost->wwpn))) { + + /* Get the scsi_hostN for the vHBA in order to see if it + * matches our scsi_hostnum + */ + if (virStorageIsSameHostnum(name, scsi_hostnum)) { + ret =3D true; + goto cleanup; + } + + /* We weren't provided a parent, so we have to query the node + * device driver in order to ascertain the parent of the vHBA. + * If the parent fc_hostnum is the same as the scsi_hostnum, we + * have a match. + */ + if (conn && !fchost->parent) { + if (virAsprintf(&scsi_host_name, "scsi_%s", name) < 0) + goto cleanup; + if ((parent_name =3D virNodeDeviceGetParentName(conn, + scsi_host_name))= ) { + if (virStorageIsSameHostnum(parent_name, scsi_hostnum)) { + ret =3D true; + goto cleanup; + } + } else { + /* Throw away the error and fall through */ + virResetLastError(); + VIR_DEBUG("Could not determine parent vHBA"); + } + } + } + + /* NB: Lack of a name means that this vHBA hasn't yet been created, + * which means our scsi_host cannot be using the vHBA. Furthermore, + * lack of a provided parent means libvirt is going to choose the + * "best" fc_host capable adapter based on availabilty. That could + * conflict with an existing scsi_host definition, but there's no + * way to know that now. + */ + + cleanup: + VIR_FREE(name); + VIR_FREE(parent_name); + VIR_FREE(scsi_host_name); + return ret; +} + + +static bool +matchSCSIAdapterParent(virStorageAdapterSCSIHostPtr pool_scsi_host, + virStorageAdapterSCSIHostPtr def_scsi_host) +{ + virPCIDeviceAddressPtr pooladdr =3D &pool_scsi_host->parentaddr; + virPCIDeviceAddressPtr defaddr =3D &def_scsi_host->parentaddr; + + if (pooladdr->domain =3D=3D defaddr->domain && + pooladdr->bus =3D=3D defaddr->bus && + pooladdr->slot =3D=3D defaddr->slot && + pooladdr->function =3D=3D defaddr->function && + pool_scsi_host->unique_id =3D=3D def_scsi_host->unique_id) + return true; + + return false; +} + +static bool +virStoragePoolSourceMatchSingleHost(virStoragePoolSourcePtr poolsrc, + virStoragePoolSourcePtr defsrc) +{ + if (poolsrc->nhost !=3D 1 && defsrc->nhost !=3D 1) + return false; + + if (defsrc->hosts[0].port && + poolsrc->hosts[0].port !=3D defsrc->hosts[0].port) + return false; + + return STREQ(poolsrc->hosts[0].name, defsrc->hosts[0].name); +} + + +static bool +virStoragePoolSourceISCSIMatch(virStoragePoolObjPtr matchpool, + virStoragePoolDefPtr def) +{ + virStoragePoolSourcePtr poolsrc =3D &matchpool->def->source; + virStoragePoolSourcePtr defsrc =3D &def->source; + + /* NB: Do not check the source host name */ + if (STRNEQ_NULLABLE(poolsrc->initiator.iqn, defsrc->initiator.iqn)) + return false; + + return true; +} + + +int +virStoragePoolSourceFindDuplicate(virConnectPtr conn, + virStoragePoolObjListPtr pools, + virStoragePoolDefPtr def) +{ + size_t i; + int ret =3D 1; + virStoragePoolObjPtr pool =3D NULL; + virStoragePoolObjPtr matchpool =3D NULL; + virStorageAdapterPtr pool_adapter; + virStorageAdapterPtr def_adapter; + + /* Check the pool list for duplicate underlying storage */ + for (i =3D 0; i < pools->count; i++) { + pool =3D pools->objs[i]; + if (def->type !=3D pool->def->type) + continue; + + /* Don't match against ourself if re-defining existing pool ! */ + if (STREQ(pool->def->name, def->name)) + continue; + + virStoragePoolObjLock(pool); + + switch ((virStoragePoolType)pool->def->type) { + case VIR_STORAGE_POOL_DIR: + if (STREQ(pool->def->target.path, def->target.path)) + matchpool =3D pool; + break; + + case VIR_STORAGE_POOL_GLUSTER: + if (STREQ(pool->def->source.name, def->source.name) && + STREQ_NULLABLE(pool->def->source.dir, def->source.dir) && + virStoragePoolSourceMatchSingleHost(&pool->def->source, + &def->source)) + matchpool =3D pool; + break; + + case VIR_STORAGE_POOL_NETFS: + if (STREQ(pool->def->source.dir, def->source.dir) && + virStoragePoolSourceMatchSingleHost(&pool->def->source, + &def->source)) + matchpool =3D pool; + break; + + case VIR_STORAGE_POOL_SCSI: + pool_adapter =3D &pool->def->source.adapter; + def_adapter =3D &def->source.adapter; + + if (pool_adapter->type =3D=3D VIR_STORAGE_ADAPTER_TYPE_FC_HOST= && + def_adapter->type =3D=3D VIR_STORAGE_ADAPTER_TYPE_FC_HOST)= { + virStorageAdapterFCHostPtr pool_fchost =3D + &pool_adapter->data.fchost; + virStorageAdapterFCHostPtr def_fchost =3D + &def_adapter->data.fchost; + + if (STREQ(pool_fchost->wwnn, def_fchost->wwnn) && + STREQ(pool_fchost->wwpn, def_fchost->wwpn)) + matchpool =3D pool; + } else if (pool_adapter->type =3D=3D + VIR_STORAGE_ADAPTER_TYPE_SCSI_HOST && + def_adapter->type =3D=3D + VIR_STORAGE_ADAPTER_TYPE_SCSI_HOST) { + virStorageAdapterSCSIHostPtr pool_scsi_host =3D + &pool_adapter->data.scsi_host; + virStorageAdapterSCSIHostPtr def_scsi_host =3D + &def_adapter->data.scsi_host; + unsigned int pool_hostnum, def_hostnum; + + if (pool_scsi_host->has_parent && + def_scsi_host->has_parent && + matchSCSIAdapterParent(pool_scsi_host, def_scsi_host))= { + matchpool =3D pool; + break; + } + + if (getSCSIHostNumber(pool_scsi_host, &pool_hostnum) < 0 || + getSCSIHostNumber(def_scsi_host, &def_hostnum) < 0) + break; + if (pool_hostnum =3D=3D def_hostnum) + matchpool =3D pool; + } else if (pool_adapter->type =3D=3D + VIR_STORAGE_ADAPTER_TYPE_FC_HOST && + def_adapter->type =3D=3D + VIR_STORAGE_ADAPTER_TYPE_SCSI_HOST) { + virStorageAdapterFCHostPtr pool_fchost =3D + &pool_adapter->data.fchost; + virStorageAdapterSCSIHostPtr def_scsi_host =3D + &def_adapter->data.scsi_host; + unsigned int scsi_hostnum; + + /* Get the scsi_hostN for the scsi_host source adapter def= */ + if (getSCSIHostNumber(def_scsi_host, &scsi_hostnum) < 0) + break; + + if (matchFCHostToSCSIHost(conn, pool_fchost, scsi_hostnum)= ) { + matchpool =3D pool; + break; + } + + } else if (pool_adapter->type =3D=3D + VIR_STORAGE_ADAPTER_TYPE_SCSI_HOST && + def_adapter->type =3D=3D + VIR_STORAGE_ADAPTER_TYPE_FC_HOST) { + virStorageAdapterSCSIHostPtr pool_scsi_host =3D + &pool_adapter->data.scsi_host; + virStorageAdapterFCHostPtr def_fchost =3D + &def_adapter->data.fchost; + unsigned int scsi_hostnum; + + if (getSCSIHostNumber(pool_scsi_host, &scsi_hostnum) < 0) + break; + + if (matchFCHostToSCSIHost(conn, def_fchost, scsi_hostnum))= { + matchpool =3D pool; + break; + } + } + break; + case VIR_STORAGE_POOL_ISCSI: + matchpool =3D virStoragePoolSourceFindDuplicateDevices(pool, d= ef); + if (matchpool) { + if (!virStoragePoolSourceISCSIMatch(matchpool, def)) + matchpool =3D NULL; + } + break; + case VIR_STORAGE_POOL_FS: + case VIR_STORAGE_POOL_LOGICAL: + case VIR_STORAGE_POOL_DISK: + case VIR_STORAGE_POOL_ZFS: + matchpool =3D virStoragePoolSourceFindDuplicateDevices(pool, d= ef); + break; + case VIR_STORAGE_POOL_SHEEPDOG: + if (virStoragePoolSourceMatchSingleHost(&pool->def->source, + &def->source)) + matchpool =3D pool; + break; + case VIR_STORAGE_POOL_MPATH: + /* Only one mpath pool is valid per host */ + matchpool =3D pool; + break; + case VIR_STORAGE_POOL_VSTORAGE: + if (STREQ(pool->def->source.name, def->source.name)) + matchpool =3D pool; + break; + case VIR_STORAGE_POOL_RBD: + case VIR_STORAGE_POOL_LAST: + break; + } + virStoragePoolObjUnlock(pool); + + if (matchpool) + break; + } + + if (matchpool) { + virReportError(VIR_ERR_OPERATION_FAILED, + _("Storage source conflict with pool: '%s'"), + matchpool->def->name); + ret =3D -1; + } + return ret; +} + +void +virStoragePoolObjLock(virStoragePoolObjPtr obj) +{ + virMutexLock(&obj->lock); +} + +void +virStoragePoolObjUnlock(virStoragePoolObjPtr obj) +{ + virMutexUnlock(&obj->lock); +} + +#define MATCH(FLAG) (flags & (FLAG)) +static bool +virStoragePoolMatch(virStoragePoolObjPtr poolobj, + unsigned int flags) +{ + /* filter by active state */ + if (MATCH(VIR_CONNECT_LIST_STORAGE_POOLS_FILTERS_ACTIVE) && + !((MATCH(VIR_CONNECT_LIST_STORAGE_POOLS_ACTIVE) && + virStoragePoolObjIsActive(poolobj)) || + (MATCH(VIR_CONNECT_LIST_STORAGE_POOLS_INACTIVE) && + !virStoragePoolObjIsActive(poolobj)))) + return false; + + /* filter by persistence */ + if (MATCH(VIR_CONNECT_LIST_STORAGE_POOLS_FILTERS_PERSISTENT) && + !((MATCH(VIR_CONNECT_LIST_STORAGE_POOLS_PERSISTENT) && + poolobj->configFile) || + (MATCH(VIR_CONNECT_LIST_STORAGE_POOLS_TRANSIENT) && + !poolobj->configFile))) + return false; + + /* filter by autostart option */ + if (MATCH(VIR_CONNECT_LIST_STORAGE_POOLS_FILTERS_AUTOSTART) && + !((MATCH(VIR_CONNECT_LIST_STORAGE_POOLS_AUTOSTART) && + poolobj->autostart) || + (MATCH(VIR_CONNECT_LIST_STORAGE_POOLS_NO_AUTOSTART) && + !poolobj->autostart))) + return false; + + /* filter by pool type */ + if (MATCH(VIR_CONNECT_LIST_STORAGE_POOLS_FILTERS_POOL_TYPE)) { + if (!((MATCH(VIR_CONNECT_LIST_STORAGE_POOLS_DIR) && + (poolobj->def->type =3D=3D VIR_STORAGE_POOL_DIR)) || + (MATCH(VIR_CONNECT_LIST_STORAGE_POOLS_FS) && + (poolobj->def->type =3D=3D VIR_STORAGE_POOL_FS)) || + (MATCH(VIR_CONNECT_LIST_STORAGE_POOLS_NETFS) && + (poolobj->def->type =3D=3D VIR_STORAGE_POOL_NETFS)) || + (MATCH(VIR_CONNECT_LIST_STORAGE_POOLS_LOGICAL) && + (poolobj->def->type =3D=3D VIR_STORAGE_POOL_LOGICAL)) || + (MATCH(VIR_CONNECT_LIST_STORAGE_POOLS_DISK) && + (poolobj->def->type =3D=3D VIR_STORAGE_POOL_DISK)) || + (MATCH(VIR_CONNECT_LIST_STORAGE_POOLS_ISCSI) && + (poolobj->def->type =3D=3D VIR_STORAGE_POOL_ISCSI)) || + (MATCH(VIR_CONNECT_LIST_STORAGE_POOLS_SCSI) && + (poolobj->def->type =3D=3D VIR_STORAGE_POOL_SCSI)) || + (MATCH(VIR_CONNECT_LIST_STORAGE_POOLS_MPATH) && + (poolobj->def->type =3D=3D VIR_STORAGE_POOL_MPATH)) || + (MATCH(VIR_CONNECT_LIST_STORAGE_POOLS_RBD) && + (poolobj->def->type =3D=3D VIR_STORAGE_POOL_RBD)) || + (MATCH(VIR_CONNECT_LIST_STORAGE_POOLS_SHEEPDOG) && + (poolobj->def->type =3D=3D VIR_STORAGE_POOL_SHEEPDOG)) || + (MATCH(VIR_CONNECT_LIST_STORAGE_POOLS_GLUSTER) && + (poolobj->def->type =3D=3D VIR_STORAGE_POOL_GLUSTER)) || + (MATCH(VIR_CONNECT_LIST_STORAGE_POOLS_ZFS) && + (poolobj->def->type =3D=3D VIR_STORAGE_POOL_ZFS)) || + (MATCH(VIR_CONNECT_LIST_STORAGE_POOLS_VSTORAGE) && + (poolobj->def->type =3D=3D VIR_STORAGE_POOL_VSTORAGE)))) + return false; + } + + return true; +} +#undef MATCH + +int +virStoragePoolObjListExport(virConnectPtr conn, + virStoragePoolObjList poolobjs, + virStoragePoolPtr **pools, + virStoragePoolObjListFilter filter, + unsigned int flags) +{ + virStoragePoolPtr *tmp_pools =3D NULL; + virStoragePoolPtr pool =3D NULL; + int npools =3D 0; + int ret =3D -1; + size_t i; + + if (pools && VIR_ALLOC_N(tmp_pools, poolobjs.count + 1) < 0) + goto cleanup; + + for (i =3D 0; i < poolobjs.count; i++) { + virStoragePoolObjPtr poolobj =3D poolobjs.objs[i]; + virStoragePoolObjLock(poolobj); + if ((!filter || filter(conn, poolobj->def)) && + virStoragePoolMatch(poolobj, flags)) { + if (pools) { + if (!(pool =3D virGetStoragePool(conn, + poolobj->def->name, + poolobj->def->uuid, + NULL, NULL))) { + virStoragePoolObjUnlock(poolobj); + goto cleanup; + } + tmp_pools[npools] =3D pool; + } + npools++; + } + virStoragePoolObjUnlock(poolobj); + } + + if (tmp_pools) { + /* trim the array to the final size */ + ignore_value(VIR_REALLOC_N(tmp_pools, npools + 1)); + *pools =3D tmp_pools; + tmp_pools =3D NULL; + } + + ret =3D npools; + + cleanup: + if (tmp_pools) { + for (i =3D 0; i < npools; i++) + virObjectUnref(tmp_pools[i]); + } + + VIR_FREE(tmp_pools); + return ret; +} diff --git a/src/conf/virstorageobj.h b/src/conf/virstorageobj.h new file mode 100644 index 0000000..e00954e --- /dev/null +++ b/src/conf/virstorageobj.h @@ -0,0 +1,142 @@ +/* + * virstorageobj.h: internal storage pool and volume objects handling + * (derived from storage_conf.h) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see + * . + */ + +#ifndef __VIRSTORAGEOBJ_H__ +# define __VIRSTORAGEOBJ_H__ + +# include "internal.h" + +# include "storage_conf.h" + +typedef struct _virStoragePoolObj virStoragePoolObj; +typedef virStoragePoolObj *virStoragePoolObjPtr; + +struct _virStoragePoolObj { + virMutex lock; + + char *configFile; + char *autostartLink; + bool active; + int autostart; + unsigned int asyncjobs; + + virStoragePoolDefPtr def; + virStoragePoolDefPtr newDef; + + virStorageVolDefList volumes; +}; + +typedef struct _virStoragePoolObjList virStoragePoolObjList; +typedef virStoragePoolObjList *virStoragePoolObjListPtr; +struct _virStoragePoolObjList { + size_t count; + virStoragePoolObjPtr *objs; +}; + +typedef struct _virStorageDriverState virStorageDriverState; +typedef virStorageDriverState *virStorageDriverStatePtr; + +struct _virStorageDriverState { + virMutex lock; + + virStoragePoolObjList pools; + + char *configDir; + char *autostartDir; + char *stateDir; + bool privileged; + + /* Immutable pointer, self-locking APIs */ + virObjectEventStatePtr storageEventState; +}; + +typedef bool (*virStoragePoolObjListFilter)(virConnectPtr conn, + virStoragePoolDefPtr def); + +static inline int +virStoragePoolObjIsActive(virStoragePoolObjPtr pool) +{ + return pool->active; +} + +int virStoragePoolLoadAllConfigs(virStoragePoolObjListPtr pools, + const char *configDir, + const char *autostartDir); + +int virStoragePoolLoadAllState(virStoragePoolObjListPtr pools, + const char *stateDir); + +virStoragePoolObjPtr +virStoragePoolLoadState(virStoragePoolObjListPtr pools, + const char *stateDir, + const char *name); +virStoragePoolObjPtr +virStoragePoolObjFindByUUID(virStoragePoolObjListPtr pools, + const unsigned char *uuid); +virStoragePoolObjPtr +virStoragePoolObjFindByName(virStoragePoolObjListPtr pools, + const char *name); +virStoragePoolObjPtr +virStoragePoolSourceFindDuplicateDevices(virStoragePoolObjPtr pool, + virStoragePoolDefPtr def); + +virStorageVolDefPtr +virStorageVolDefFindByKey(virStoragePoolObjPtr pool, + const char *key); +virStorageVolDefPtr +virStorageVolDefFindByPath(virStoragePoolObjPtr pool, + const char *path); +virStorageVolDefPtr +virStorageVolDefFindByName(virStoragePoolObjPtr pool, + const char *name); + +void virStoragePoolObjClearVols(virStoragePoolObjPtr pool); + +virStoragePoolObjPtr +virStoragePoolObjAssignDef(virStoragePoolObjListPtr pools, + virStoragePoolDefPtr def); + +int virStoragePoolObjSaveDef(virStorageDriverStatePtr driver, + virStoragePoolObjPtr pool, + virStoragePoolDefPtr def); +int virStoragePoolObjDeleteDef(virStoragePoolObjPtr pool); + +void virStoragePoolObjFree(virStoragePoolObjPtr pool); +void virStoragePoolObjListFree(virStoragePoolObjListPtr pools); +void virStoragePoolObjRemove(virStoragePoolObjListPtr pools, + virStoragePoolObjPtr pool); + +int virStoragePoolObjIsDuplicate(virStoragePoolObjListPtr pools, + virStoragePoolDefPtr def, + unsigned int check_active); + +int virStoragePoolSourceFindDuplicate(virConnectPtr conn, + virStoragePoolObjListPtr pools, + virStoragePoolDefPtr def); + +void virStoragePoolObjLock(virStoragePoolObjPtr obj); +void virStoragePoolObjUnlock(virStoragePoolObjPtr obj); + +int virStoragePoolObjListExport(virConnectPtr conn, + virStoragePoolObjList poolobjs, + virStoragePoolPtr **pools, + virStoragePoolObjListFilter filter, + unsigned int flags); + +#endif /* __VIRSTORAGEOBJ_H__ */ diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 8af5454..0869b56 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -869,26 +869,10 @@ virStoragePoolFormatDiskTypeToString; virStoragePoolFormatFileSystemNetTypeToString; virStoragePoolFormatFileSystemTypeToString; virStoragePoolFormatLogicalTypeToString; -virStoragePoolLoadAllConfigs; -virStoragePoolLoadAllState; -virStoragePoolObjAssignDef; -virStoragePoolObjClearVols; -virStoragePoolObjDeleteDef; -virStoragePoolObjFindByName; -virStoragePoolObjFindByUUID; -virStoragePoolObjIsDuplicate; -virStoragePoolObjListExport; -virStoragePoolObjListFree; -virStoragePoolObjLock; -virStoragePoolObjRemove; -virStoragePoolObjSaveDef; -virStoragePoolObjUnlock; virStoragePoolSaveConfig; virStoragePoolSaveState; virStoragePoolSourceClear; virStoragePoolSourceDeviceClear; -virStoragePoolSourceFindDuplicate; -virStoragePoolSourceFindDuplicateDevices; virStoragePoolSourceFree; virStoragePoolSourceListFormat; virStoragePoolSourceListNewSource; @@ -998,6 +982,25 @@ virSecretObjSetValue; virSecretObjSetValueSize; =20 =20 +# conf/virstorageobj.h +virStoragePoolLoadAllConfigs; +virStoragePoolLoadAllState; +virStoragePoolObjAssignDef; +virStoragePoolObjClearVols; +virStoragePoolObjDeleteDef; +virStoragePoolObjFindByName; +virStoragePoolObjFindByUUID; +virStoragePoolObjIsDuplicate; +virStoragePoolObjListExport; +virStoragePoolObjListFree; +virStoragePoolObjLock; +virStoragePoolObjRemove; +virStoragePoolObjSaveDef; +virStoragePoolObjUnlock; +virStoragePoolSourceFindDuplicate; +virStoragePoolSourceFindDuplicateDevices; + + # cpu/cpu.h cpuBaseline; cpuBaselineXML; diff --git a/src/storage/storage_backend.h b/src/storage/storage_backend.h index f433071..21ac845 100644 --- a/src/storage/storage_backend.h +++ b/src/storage/storage_backend.h @@ -22,7 +22,7 @@ # include =20 # include "internal.h" -# include "storage_conf.h" +# include "virstorageobj.h" # include "storage_driver.h" =20 typedef char * (*virStorageBackendFindPoolSources)(virConnectPtr conn, diff --git a/src/storage/storage_driver.h b/src/storage/storage_driver.h index f0aca36..530bc33 100644 --- a/src/storage/storage_driver.h +++ b/src/storage/storage_driver.h @@ -27,7 +27,7 @@ # include =20 # include "domain_conf.h" -# include "storage_conf.h" +# include "virstorageobj.h" # include "virstoragefile.h" =20 int virStorageFileInit(virStorageSourcePtr src); diff --git a/src/storage/storage_util.h b/src/storage/storage_util.h index 326d555..fa3b652 100644 --- a/src/storage/storage_util.h +++ b/src/storage/storage_util.h @@ -22,7 +22,6 @@ # include =20 # include "internal.h" -# include "storage_conf.h" # include "vircommand.h" # include "storage_driver.h" # include "storage_backend.h" diff --git a/src/test/test_driver.c b/src/test/test_driver.c index 1023956..18eaf56 100644 --- a/src/test/test_driver.c +++ b/src/test/test_driver.c @@ -49,6 +49,7 @@ #include "snapshot_conf.h" #include "fdstream.h" #include "storage_conf.h" +#include "virstorageobj.h" #include "storage_event.h" #include "node_device_conf.h" #include "virnodedeviceobj.h" --=20 2.9.3 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sun May 5 13:33:51 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 1489669689412330.861479438203; Thu, 16 Mar 2017 06:08:09 -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 89A17347A42; Thu, 16 Mar 2017 13:08:05 +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 5D510627DE; Thu, 16 Mar 2017 13:08:05 +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 0509D1853D07; Thu, 16 Mar 2017 13:08:05 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v2GD7s8I018777 for ; Thu, 16 Mar 2017 09:07:54 -0400 Received: by smtp.corp.redhat.com (Postfix) id C1CE617A79; Thu, 16 Mar 2017 13:07:54 +0000 (UTC) Received: from localhost.localdomain.com (ovpn-116-76.phx2.redhat.com [10.3.116.76]) by smtp.corp.redhat.com (Postfix) with ESMTP id 7FC4118B3D for ; Thu, 16 Mar 2017 13:07:54 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 89A17347A42 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 89A17347A42 From: John Ferlan To: libvir-list@redhat.com Date: Thu, 16 Mar 2017 09:07:45 -0400 Message-Id: <20170316130747.25288-3-jferlan@redhat.com> In-Reply-To: <20170316130747.25288-1-jferlan@redhat.com> References: <20170316130747.25288-1-jferlan@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-loop: libvir-list@redhat.com Subject: [libvirt] [REPOST PATCH 2/4] conf: Adjust coding style for storage conf sources X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.29]); Thu, 16 Mar 2017 13:08:06 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Alter the format of the code to follow more recent style guidelines of two empty lines between functions, function decls with "[static] type" on one line followed by function name with arguments to functions each on one line. Signed-off-by: John Ferlan --- src/conf/storage_conf.c | 31 ++++++++++++++++++++++++++++--- src/conf/virstorageobj.c | 16 ++++++++++++++++ 2 files changed, 44 insertions(+), 3 deletions(-) diff --git a/src/conf/storage_conf.c b/src/conf/storage_conf.c index 32fc02a..6b34cea 100644 --- a/src/conf/storage_conf.c +++ b/src/conf/storage_conf.c @@ -142,6 +142,7 @@ struct _virStoragePoolTypeInfo { virStorageVolOptions volOptions; }; =20 + static int virStorageVolumeFormatFromString(const char *format) { @@ -151,6 +152,7 @@ virStorageVolumeFormatFromString(const char *format) return ret; } =20 + static virStoragePoolTypeInfo poolTypeInfo[] =3D { {.poolType =3D VIR_STORAGE_POOL_LOGICAL, .poolOptions =3D { @@ -300,6 +302,7 @@ virStoragePoolTypeInfoLookup(int type) return NULL; } =20 + static virStoragePoolOptionsPtr virStoragePoolOptionsForPoolType(int type) { @@ -309,6 +312,7 @@ virStoragePoolOptionsForPoolType(int type) return &backend->poolOptions; } =20 + static virStorageVolOptionsPtr virStorageVolOptionsForPoolType(int type) { @@ -338,6 +342,7 @@ virStorageVolDefFree(virStorageVolDefPtr def) VIR_FREE(def); } =20 + void virStoragePoolSourceDeviceClear(virStoragePoolSourceDevicePtr dev) { @@ -345,6 +350,7 @@ virStoragePoolSourceDeviceClear(virStoragePoolSourceDev= icePtr dev) VIR_FREE(dev->path); } =20 + void virStoragePoolSourceClear(virStoragePoolSourcePtr source) { @@ -369,6 +375,7 @@ virStoragePoolSourceClear(virStoragePoolSourcePtr sourc= e) VIR_FREE(source->product); } =20 + void virStoragePoolSourceFree(virStoragePoolSourcePtr source) { @@ -376,6 +383,7 @@ virStoragePoolSourceFree(virStoragePoolSourcePtr source) VIR_FREE(source); } =20 + void virStoragePoolDefFree(virStoragePoolDefPtr def) { @@ -544,6 +552,7 @@ virStoragePoolDefParseSource(xmlXPathContextPtr ctxt, return ret; } =20 + virStoragePoolSourcePtr virStoragePoolDefParseSourceString(const char *srcSpec, int pool_type) @@ -581,6 +590,7 @@ virStoragePoolDefParseSourceString(const char *srcSpec, return ret; } =20 + static int virStorageDefParsePerms(xmlXPathContextPtr ctxt, virStoragePermsPtr perms, @@ -800,6 +810,7 @@ virStoragePoolDefParseXML(xmlXPathContextPtr ctxt) goto cleanup; } =20 + virStoragePoolDefPtr virStoragePoolDefParseNode(xmlDocPtr xml, xmlNodePtr root) @@ -828,6 +839,7 @@ virStoragePoolDefParseNode(xmlDocPtr xml, return def; } =20 + static virStoragePoolDefPtr virStoragePoolDefParse(const char *xmlStr, const char *filename) @@ -843,12 +855,14 @@ virStoragePoolDefParse(const char *xmlStr, return ret; } =20 + virStoragePoolDefPtr virStoragePoolDefParseString(const char *xmlStr) { return virStoragePoolDefParse(xmlStr, NULL); } =20 + virStoragePoolDefPtr virStoragePoolDefParseFile(const char *filename) { @@ -1024,6 +1038,7 @@ virStoragePoolDefFormatBuf(virBufferPtr buf, return 0; } =20 + char * virStoragePoolDefFormat(virStoragePoolDefPtr def) { @@ -1061,6 +1076,7 @@ virStorageSize(const char *unit, return 0; } =20 + static virStorageVolDefPtr virStorageVolDefParseXML(virStoragePoolDefPtr pool, xmlXPathContextPtr ctxt, @@ -1236,6 +1252,7 @@ virStorageVolDefParseXML(virStoragePoolDefPtr pool, goto cleanup; } =20 + virStorageVolDefPtr virStorageVolDefParseNode(virStoragePoolDefPtr pool, xmlDocPtr xml, @@ -1266,6 +1283,7 @@ virStorageVolDefParseNode(virStoragePoolDefPtr pool, return def; } =20 + static virStorageVolDefPtr virStorageVolDefParse(virStoragePoolDefPtr pool, const char *xmlStr, @@ -1283,6 +1301,7 @@ virStorageVolDefParse(virStoragePoolDefPtr pool, return ret; } =20 + virStorageVolDefPtr virStorageVolDefParseString(virStoragePoolDefPtr pool, const char *xmlStr, @@ -1291,6 +1310,7 @@ virStorageVolDefParseString(virStoragePoolDefPtr pool, return virStorageVolDefParse(pool, xmlStr, NULL, flags); } =20 + virStorageVolDefPtr virStorageVolDefParseFile(virStoragePoolDefPtr pool, const char *filename, @@ -1299,6 +1319,7 @@ virStorageVolDefParseFile(virStoragePoolDefPtr pool, return virStorageVolDefParse(pool, NULL, filename, flags); } =20 + static void virStorageVolTimestampFormat(virBufferPtr buf, const char *name, struct timespec *ts) @@ -1312,6 +1333,7 @@ virStorageVolTimestampFormat(virBufferPtr buf, const = char *name, virBufferAsprintf(buf, "\n", name); } =20 + static int virStorageVolTargetDefFormat(virStorageVolOptionsPtr options, virBufferPtr buf, @@ -1403,6 +1425,7 @@ virStorageVolTargetDefFormat(virStorageVolOptionsPtr = options, return 0; } =20 + char * virStorageVolDefFormat(virStoragePoolDefPtr pool, virStorageVolDefPtr def) @@ -1485,9 +1508,10 @@ virStorageVolDefFormat(virStoragePoolDefPtr pool, } =20 =20 -static int virStoragePoolSaveXML(const char *path, - virStoragePoolDefPtr def, - const char *xml) +static int +virStoragePoolSaveXML(const char *path, + virStoragePoolDefPtr def, + const char *xml) { char uuidstr[VIR_UUID_STRING_BUFLEN]; int ret =3D -1; @@ -1572,6 +1596,7 @@ virStoragePoolSourceListNewSource(virStoragePoolSourc= eListPtr list) return source; } =20 + char * virStoragePoolSourceListFormat(virStoragePoolSourceListPtr def) { diff --git a/src/conf/virstorageobj.c b/src/conf/virstorageobj.c index 5f2f947..1474838 100644 --- a/src/conf/virstorageobj.c +++ b/src/conf/virstorageobj.c @@ -56,6 +56,7 @@ virStoragePoolObjFree(virStoragePoolObjPtr obj) VIR_FREE(obj); } =20 + void virStoragePoolObjListFree(virStoragePoolObjListPtr pools) { @@ -66,6 +67,7 @@ virStoragePoolObjListFree(virStoragePoolObjListPtr pools) pools->count =3D 0; } =20 + void virStoragePoolObjRemove(virStoragePoolObjListPtr pools, virStoragePoolObjPtr pool) @@ -104,6 +106,7 @@ virStoragePoolObjFindByUUID(virStoragePoolObjListPtr po= ols, return NULL; } =20 + virStoragePoolObjPtr virStoragePoolObjFindByName(virStoragePoolObjListPtr pools, const char *name) @@ -120,6 +123,7 @@ virStoragePoolObjFindByName(virStoragePoolObjListPtr po= ols, return NULL; } =20 + virStoragePoolObjPtr virStoragePoolSourceFindDuplicateDevices(virStoragePoolObjPtr pool, virStoragePoolDefPtr def) @@ -136,6 +140,7 @@ virStoragePoolSourceFindDuplicateDevices(virStoragePool= ObjPtr pool, return NULL; } =20 + void virStoragePoolObjClearVols(virStoragePoolObjPtr pool) { @@ -147,6 +152,7 @@ virStoragePoolObjClearVols(virStoragePoolObjPtr pool) pool->volumes.count =3D 0; } =20 + virStorageVolDefPtr virStorageVolDefFindByKey(virStoragePoolObjPtr pool, const char *key) @@ -160,6 +166,7 @@ virStorageVolDefFindByKey(virStoragePoolObjPtr pool, return NULL; } =20 + virStorageVolDefPtr virStorageVolDefFindByPath(virStoragePoolObjPtr pool, const char *path) @@ -173,6 +180,7 @@ virStorageVolDefFindByPath(virStoragePoolObjPtr pool, return NULL; } =20 + virStorageVolDefPtr virStorageVolDefFindByName(virStoragePoolObjPtr pool, const char *name) @@ -186,6 +194,7 @@ virStorageVolDefFindByName(virStoragePoolObjPtr pool, return NULL; } =20 + virStoragePoolObjPtr virStoragePoolObjAssignDef(virStoragePoolObjListPtr pools, virStoragePoolDefPtr def) @@ -225,6 +234,7 @@ virStoragePoolObjAssignDef(virStoragePoolObjListPtr poo= ls, return pool; } =20 + static virStoragePoolObjPtr virStoragePoolObjLoad(virStoragePoolObjListPtr pools, const char *file, @@ -428,6 +438,7 @@ virStoragePoolObjSaveDef(virStorageDriverStatePtr drive= r, return virStoragePoolSaveConfig(pool->configFile, def); } =20 + int virStoragePoolObjDeleteDef(virStoragePoolObjPtr pool) { @@ -654,6 +665,7 @@ matchSCSIAdapterParent(virStorageAdapterSCSIHostPtr poo= l_scsi_host, return false; } =20 + static bool virStoragePoolSourceMatchSingleHost(virStoragePoolSourcePtr poolsrc, virStoragePoolSourcePtr defsrc) @@ -848,18 +860,21 @@ virStoragePoolSourceFindDuplicate(virConnectPtr conn, return ret; } =20 + void virStoragePoolObjLock(virStoragePoolObjPtr obj) { virMutexLock(&obj->lock); } =20 + void virStoragePoolObjUnlock(virStoragePoolObjPtr obj) { virMutexUnlock(&obj->lock); } =20 + #define MATCH(FLAG) (flags & (FLAG)) static bool virStoragePoolMatch(virStoragePoolObjPtr poolobj, @@ -924,6 +939,7 @@ virStoragePoolMatch(virStoragePoolObjPtr poolobj, } #undef MATCH =20 + int virStoragePoolObjListExport(virConnectPtr conn, virStoragePoolObjList poolobjs, --=20 2.9.3 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sun May 5 13:33:51 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 14896696934451000.9483827308399; Thu, 16 Mar 2017 06:08:13 -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 F13887E9F1; Thu, 16 Mar 2017 13:08:09 +0000 (UTC) Received: from colo-mx.corp.redhat.com (unknown [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 6A64618862; Thu, 16 Mar 2017 13:08:09 +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 178FF5EC62; Thu, 16 Mar 2017 13:08:09 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v2GD7uFI018788 for ; Thu, 16 Mar 2017 09:07:56 -0400 Received: by smtp.corp.redhat.com (Postfix) id C5A4718B37; Thu, 16 Mar 2017 13:07:56 +0000 (UTC) Received: from localhost.localdomain.com (ovpn-116-76.phx2.redhat.com [10.3.116.76]) by smtp.corp.redhat.com (Postfix) with ESMTP id 85EA818825 for ; Thu, 16 Mar 2017 13:07:54 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com F13887E9F1 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 F13887E9F1 From: John Ferlan To: libvir-list@redhat.com Date: Thu, 16 Mar 2017 09:07:46 -0400 Message-Id: <20170316130747.25288-4-jferlan@redhat.com> In-Reply-To: <20170316130747.25288-1-jferlan@redhat.com> References: <20170316130747.25288-1-jferlan@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-loop: libvir-list@redhat.com Subject: [libvirt] [REPOST PATCH 3/4] conf: Alter coding style of storage conf function prototypes 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.26]); Thu, 16 Mar 2017 13:08:10 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" In an effort to be consistent with the source module, alter the function prototypes to follow the similar style of source with the "type" on one line followed by the function name and arguments on subsequent lines with with argument getting it's own line. Signed-off-by: John Ferlan --- src/conf/storage_conf.h | 68 ++++++++++++++++++++++++++++------------ src/conf/virstorageobj.h | 81 +++++++++++++++++++++++++++++++-------------= ---- 2 files changed, 101 insertions(+), 48 deletions(-) diff --git a/src/conf/storage_conf.h b/src/conf/storage_conf.h index 6cd6a5c..8ac6796 100644 --- a/src/conf/storage_conf.h +++ b/src/conf/storage_conf.h @@ -239,12 +239,21 @@ struct _virStoragePoolSourceList { virStoragePoolSourcePtr sources; }; =20 -virStoragePoolDefPtr virStoragePoolDefParseXML(xmlXPathContextPtr ctxt); -virStoragePoolDefPtr virStoragePoolDefParseString(const char *xml); -virStoragePoolDefPtr virStoragePoolDefParseFile(const char *filename); -virStoragePoolDefPtr virStoragePoolDefParseNode(xmlDocPtr xml, - xmlNodePtr root); -char *virStoragePoolDefFormat(virStoragePoolDefPtr def); +virStoragePoolDefPtr +virStoragePoolDefParseXML(xmlXPathContextPtr ctxt); + +virStoragePoolDefPtr +virStoragePoolDefParseString(const char *xml); + +virStoragePoolDefPtr +virStoragePoolDefParseFile(const char *filename); + +virStoragePoolDefPtr +virStoragePoolDefParseNode(xmlDocPtr xml, + xmlNodePtr root); + +char * +virStoragePoolDefFormat(virStoragePoolDefPtr def); =20 typedef enum { /* do not require volume capacity at all */ @@ -252,38 +261,59 @@ typedef enum { /* do not require volume capacity if the volume has a backing store */ VIR_VOL_XML_PARSE_OPT_CAPACITY =3D 1 << 1, } virStorageVolDefParseFlags; + virStorageVolDefPtr virStorageVolDefParseString(virStoragePoolDefPtr pool, const char *xml, unsigned int flags); + virStorageVolDefPtr virStorageVolDefParseFile(virStoragePoolDefPtr pool, const char *filename, unsigned int flags); + virStorageVolDefPtr virStorageVolDefParseNode(virStoragePoolDefPtr pool, xmlDocPtr xml, xmlNodePtr root, unsigned int flags); -char *virStorageVolDefFormat(virStoragePoolDefPtr pool, - virStorageVolDefPtr def); - -int virStoragePoolSaveState(const char *stateFile, - virStoragePoolDefPtr def); -int virStoragePoolSaveConfig(const char *configFile, - virStoragePoolDefPtr def); -void virStorageVolDefFree(virStorageVolDefPtr def); -void virStoragePoolSourceClear(virStoragePoolSourcePtr source); -void virStoragePoolSourceDeviceClear(virStoragePoolSourceDevicePtr dev); -void virStoragePoolSourceFree(virStoragePoolSourcePtr source); -void virStoragePoolDefFree(virStoragePoolDefPtr def); + +char * +virStorageVolDefFormat(virStoragePoolDefPtr pool, + virStorageVolDefPtr def); + +int +virStoragePoolSaveState(const char *stateFile, + virStoragePoolDefPtr def); + +int +virStoragePoolSaveConfig(const char *configFile, + virStoragePoolDefPtr def); + +void +virStorageVolDefFree(virStorageVolDefPtr def); + +void +virStoragePoolSourceClear(virStoragePoolSourcePtr source); + +void +virStoragePoolSourceDeviceClear(virStoragePoolSourceDevicePtr dev); + +void +virStoragePoolSourceFree(virStoragePoolSourcePtr source); + +void +virStoragePoolDefFree(virStoragePoolDefPtr def); =20 virStoragePoolSourcePtr virStoragePoolDefParseSourceString(const char *srcSpec, int pool_type); + virStoragePoolSourcePtr virStoragePoolSourceListNewSource(virStoragePoolSourceListPtr list); -char *virStoragePoolSourceListFormat(virStoragePoolSourceListPtr def); + +char * +virStoragePoolSourceListFormat(virStoragePoolSourceListPtr def); =20 typedef enum { VIR_STORAGE_POOL_FS_AUTO =3D 0, diff --git a/src/conf/virstorageobj.h b/src/conf/virstorageobj.h index e00954e..13cec72 100644 --- a/src/conf/virstorageobj.h +++ b/src/conf/virstorageobj.h @@ -66,8 +66,9 @@ struct _virStorageDriverState { virObjectEventStatePtr storageEventState; }; =20 -typedef bool (*virStoragePoolObjListFilter)(virConnectPtr conn, - virStoragePoolDefPtr def); +typedef bool +(*virStoragePoolObjListFilter)(virConnectPtr conn, + virStoragePoolDefPtr def); =20 static inline int virStoragePoolObjIsActive(virStoragePoolObjPtr pool) @@ -75,23 +76,28 @@ virStoragePoolObjIsActive(virStoragePoolObjPtr pool) return pool->active; } =20 -int virStoragePoolLoadAllConfigs(virStoragePoolObjListPtr pools, - const char *configDir, - const char *autostartDir); +int +virStoragePoolLoadAllConfigs(virStoragePoolObjListPtr pools, + const char *configDir, + const char *autostartDir); =20 -int virStoragePoolLoadAllState(virStoragePoolObjListPtr pools, - const char *stateDir); +int +virStoragePoolLoadAllState(virStoragePoolObjListPtr pools, + const char *stateDir); =20 virStoragePoolObjPtr virStoragePoolLoadState(virStoragePoolObjListPtr pools, const char *stateDir, const char *name); + virStoragePoolObjPtr virStoragePoolObjFindByUUID(virStoragePoolObjListPtr pools, const unsigned char *uuid); + virStoragePoolObjPtr virStoragePoolObjFindByName(virStoragePoolObjListPtr pools, const char *name); + virStoragePoolObjPtr virStoragePoolSourceFindDuplicateDevices(virStoragePoolObjPtr pool, virStoragePoolDefPtr def); @@ -99,44 +105,61 @@ virStoragePoolSourceFindDuplicateDevices(virStoragePoo= lObjPtr pool, virStorageVolDefPtr virStorageVolDefFindByKey(virStoragePoolObjPtr pool, const char *key); + virStorageVolDefPtr virStorageVolDefFindByPath(virStoragePoolObjPtr pool, const char *path); + virStorageVolDefPtr virStorageVolDefFindByName(virStoragePoolObjPtr pool, const char *name); =20 -void virStoragePoolObjClearVols(virStoragePoolObjPtr pool); +void +virStoragePoolObjClearVols(virStoragePoolObjPtr pool); =20 virStoragePoolObjPtr virStoragePoolObjAssignDef(virStoragePoolObjListPtr pools, virStoragePoolDefPtr def); =20 -int virStoragePoolObjSaveDef(virStorageDriverStatePtr driver, - virStoragePoolObjPtr pool, - virStoragePoolDefPtr def); -int virStoragePoolObjDeleteDef(virStoragePoolObjPtr pool); +int +virStoragePoolObjSaveDef(virStorageDriverStatePtr driver, + virStoragePoolObjPtr pool, + virStoragePoolDefPtr def); + +int +virStoragePoolObjDeleteDef(virStoragePoolObjPtr pool); + +void +virStoragePoolObjFree(virStoragePoolObjPtr pool); + +void +virStoragePoolObjListFree(virStoragePoolObjListPtr pools); + +void +virStoragePoolObjRemove(virStoragePoolObjListPtr pools, + virStoragePoolObjPtr pool); =20 -void virStoragePoolObjFree(virStoragePoolObjPtr pool); -void virStoragePoolObjListFree(virStoragePoolObjListPtr pools); -void virStoragePoolObjRemove(virStoragePoolObjListPtr pools, - virStoragePoolObjPtr pool); +int +virStoragePoolObjIsDuplicate(virStoragePoolObjListPtr pools, + virStoragePoolDefPtr def, + unsigned int check_active); =20 -int virStoragePoolObjIsDuplicate(virStoragePoolObjListPtr pools, - virStoragePoolDefPtr def, - unsigned int check_active); +int +virStoragePoolSourceFindDuplicate(virConnectPtr conn, + virStoragePoolObjListPtr pools, + virStoragePoolDefPtr def); =20 -int virStoragePoolSourceFindDuplicate(virConnectPtr conn, - virStoragePoolObjListPtr pools, - virStoragePoolDefPtr def); +void +virStoragePoolObjLock(virStoragePoolObjPtr obj); =20 -void virStoragePoolObjLock(virStoragePoolObjPtr obj); -void virStoragePoolObjUnlock(virStoragePoolObjPtr obj); +void +virStoragePoolObjUnlock(virStoragePoolObjPtr obj); =20 -int virStoragePoolObjListExport(virConnectPtr conn, - virStoragePoolObjList poolobjs, - virStoragePoolPtr **pools, - virStoragePoolObjListFilter filter, - unsigned int flags); +int +virStoragePoolObjListExport(virConnectPtr conn, + virStoragePoolObjList poolobjs, + virStoragePoolPtr **pools, + virStoragePoolObjListFilter filter, + unsigned int flags); =20 #endif /* __VIRSTORAGEOBJ_H__ */ --=20 2.9.3 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sun May 5 13:33:51 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 1489669695195760.1971550755932; Thu, 16 Mar 2017 06:08:15 -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 4F21A3DBEC; Thu, 16 Mar 2017 13:08:13 +0000 (UTC) Received: from colo-mx.corp.redhat.com (unknown [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id F0CB05DD6E; Thu, 16 Mar 2017 13:08:12 +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 A1AF55EC62; Thu, 16 Mar 2017 13:08:12 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v2GD7wSS018800 for ; Thu, 16 Mar 2017 09:07:58 -0400 Received: by smtp.corp.redhat.com (Postfix) id 60AEA18B3A; Thu, 16 Mar 2017 13:07:58 +0000 (UTC) Received: from localhost.localdomain.com (ovpn-116-76.phx2.redhat.com [10.3.116.76]) by smtp.corp.redhat.com (Postfix) with ESMTP id 1F26C18B3F for ; Thu, 16 Mar 2017 13:07:56 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 4F21A3DBEC 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 4F21A3DBEC From: John Ferlan To: libvir-list@redhat.com Date: Thu, 16 Mar 2017 09:07:47 -0400 Message-Id: <20170316130747.25288-5-jferlan@redhat.com> In-Reply-To: <20170316130747.25288-1-jferlan@redhat.com> References: <20170316130747.25288-1-jferlan@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-loop: libvir-list@redhat.com Subject: [libvirt] [REPOST PATCH 4/4] conf: Use consistent function name prefixes for virstorageobj 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, 16 Mar 2017 13:08:14 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Use "virStoragePoolObj" as a prefix for any external API in virstorageobj. Also a couple of functions were local to virstorageobj.c, so remove their external defs iin virstorageobj.h. NB: The virStorageVolDef* API's won't change. Signed-off-by: John Ferlan --- src/conf/virstorageobj.c | 29 +++++++++++++++-------------- src/conf/virstorageobj.h | 25 ++++++++----------------- src/libvirt_private.syms | 7 +++---- src/storage/storage_driver.c | 24 ++++++++++++------------ 4 files changed, 38 insertions(+), 47 deletions(-) diff --git a/src/conf/virstorageobj.c b/src/conf/virstorageobj.c index 1474838..34f2eb7 100644 --- a/src/conf/virstorageobj.c +++ b/src/conf/virstorageobj.c @@ -124,7 +124,7 @@ virStoragePoolObjFindByName(virStoragePoolObjListPtr po= ols, } =20 =20 -virStoragePoolObjPtr +static virStoragePoolObjPtr virStoragePoolSourceFindDuplicateDevices(virStoragePoolObjPtr pool, virStoragePoolDefPtr def) { @@ -279,10 +279,10 @@ virStoragePoolObjLoad(virStoragePoolObjListPtr pools, } =20 =20 -virStoragePoolObjPtr -virStoragePoolLoadState(virStoragePoolObjListPtr pools, - const char *stateDir, - const char *name) +static virStoragePoolObjPtr +virStoragePoolObjLoadState(virStoragePoolObjListPtr pools, + const char *stateDir, + const char *name) { char *stateFile =3D NULL; virStoragePoolDefPtr def =3D NULL; @@ -339,8 +339,8 @@ virStoragePoolLoadState(virStoragePoolObjListPtr pools, =20 =20 int -virStoragePoolLoadAllState(virStoragePoolObjListPtr pools, - const char *stateDir) +virStoragePoolObjLoadAllState(virStoragePoolObjListPtr pools, + const char *stateDir) { DIR *dir; struct dirent *entry; @@ -356,7 +356,8 @@ virStoragePoolLoadAllState(virStoragePoolObjListPtr poo= ls, if (!virFileStripSuffix(entry->d_name, ".xml")) continue; =20 - if (!(pool =3D virStoragePoolLoadState(pools, stateDir, entry->d_n= ame))) + if (!(pool =3D virStoragePoolObjLoadState(pools, stateDir, + entry->d_name))) continue; virStoragePoolObjUnlock(pool); } @@ -367,9 +368,9 @@ virStoragePoolLoadAllState(virStoragePoolObjListPtr poo= ls, =20 =20 int -virStoragePoolLoadAllConfigs(virStoragePoolObjListPtr pools, - const char *configDir, - const char *autostartDir) +virStoragePoolObjLoadAllConfigs(virStoragePoolObjListPtr pools, + const char *configDir, + const char *autostartDir) { DIR *dir; struct dirent *entry; @@ -697,9 +698,9 @@ virStoragePoolSourceISCSIMatch(virStoragePoolObjPtr mat= chpool, =20 =20 int -virStoragePoolSourceFindDuplicate(virConnectPtr conn, - virStoragePoolObjListPtr pools, - virStoragePoolDefPtr def) +virStoragePoolObjSourceFindDuplicate(virConnectPtr conn, + virStoragePoolObjListPtr pools, + virStoragePoolDefPtr def) { size_t i; int ret =3D 1; diff --git a/src/conf/virstorageobj.h b/src/conf/virstorageobj.h index 13cec72..ecba94e 100644 --- a/src/conf/virstorageobj.h +++ b/src/conf/virstorageobj.h @@ -77,18 +77,13 @@ virStoragePoolObjIsActive(virStoragePoolObjPtr pool) } =20 int -virStoragePoolLoadAllConfigs(virStoragePoolObjListPtr pools, - const char *configDir, - const char *autostartDir); +virStoragePoolObjLoadAllConfigs(virStoragePoolObjListPtr pools, + const char *configDir, + const char *autostartDir); =20 int -virStoragePoolLoadAllState(virStoragePoolObjListPtr pools, - const char *stateDir); - -virStoragePoolObjPtr -virStoragePoolLoadState(virStoragePoolObjListPtr pools, - const char *stateDir, - const char *name); +virStoragePoolObjLoadAllState(virStoragePoolObjListPtr pools, + const char *stateDir); =20 virStoragePoolObjPtr virStoragePoolObjFindByUUID(virStoragePoolObjListPtr pools, @@ -98,10 +93,6 @@ virStoragePoolObjPtr virStoragePoolObjFindByName(virStoragePoolObjListPtr pools, const char *name); =20 -virStoragePoolObjPtr -virStoragePoolSourceFindDuplicateDevices(virStoragePoolObjPtr pool, - virStoragePoolDefPtr def); - virStorageVolDefPtr virStorageVolDefFindByKey(virStoragePoolObjPtr pool, const char *key); @@ -145,9 +136,9 @@ virStoragePoolObjIsDuplicate(virStoragePoolObjListPtr p= ools, unsigned int check_active); =20 int -virStoragePoolSourceFindDuplicate(virConnectPtr conn, - virStoragePoolObjListPtr pools, - virStoragePoolDefPtr def); +virStoragePoolObjSourceFindDuplicate(virConnectPtr conn, + virStoragePoolObjListPtr pools, + virStoragePoolDefPtr def); =20 void virStoragePoolObjLock(virStoragePoolObjPtr obj); diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 0869b56..3cd537a 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -983,8 +983,6 @@ virSecretObjSetValueSize; =20 =20 # conf/virstorageobj.h -virStoragePoolLoadAllConfigs; -virStoragePoolLoadAllState; virStoragePoolObjAssignDef; virStoragePoolObjClearVols; virStoragePoolObjDeleteDef; @@ -993,12 +991,13 @@ virStoragePoolObjFindByUUID; virStoragePoolObjIsDuplicate; virStoragePoolObjListExport; virStoragePoolObjListFree; +virStoragePoolObjLoadAllConfigs; +virStoragePoolObjLoadAllState; virStoragePoolObjLock; virStoragePoolObjRemove; virStoragePoolObjSaveDef; +virStoragePoolObjSourceFindDuplicate; virStoragePoolObjUnlock; -virStoragePoolSourceFindDuplicate; -virStoragePoolSourceFindDuplicateDevices; =20 =20 # cpu/cpu.h diff --git a/src/storage/storage_driver.c b/src/storage/storage_driver.c index 0bc047f..287a862 100644 --- a/src/storage/storage_driver.c +++ b/src/storage/storage_driver.c @@ -267,13 +267,13 @@ storageStateInitialize(bool privileged, goto error; } =20 - if (virStoragePoolLoadAllState(&driver->pools, - driver->stateDir) < 0) + if (virStoragePoolObjLoadAllState(&driver->pools, + driver->stateDir) < 0) goto error; =20 - if (virStoragePoolLoadAllConfigs(&driver->pools, - driver->configDir, - driver->autostartDir) < 0) + if (virStoragePoolObjLoadAllConfigs(&driver->pools, + driver->configDir, + driver->autostartDir) < 0) goto error; =20 storagePoolUpdateAllState(); @@ -323,11 +323,11 @@ storageStateReload(void) return -1; =20 storageDriverLock(); - virStoragePoolLoadAllState(&driver->pools, - driver->stateDir); - virStoragePoolLoadAllConfigs(&driver->pools, - driver->configDir, - driver->autostartDir); + virStoragePoolObjLoadAllState(&driver->pools, + driver->stateDir); + virStoragePoolObjLoadAllConfigs(&driver->pools, + driver->configDir, + driver->autostartDir); storageDriverAutostart(); storageDriverUnlock(); =20 @@ -695,7 +695,7 @@ storagePoolCreateXML(virConnectPtr conn, if (virStoragePoolObjIsDuplicate(&driver->pools, def, 1) < 0) goto cleanup; =20 - if (virStoragePoolSourceFindDuplicate(conn, &driver->pools, def) < 0) + if (virStoragePoolObjSourceFindDuplicate(conn, &driver->pools, def) < = 0) goto cleanup; =20 if ((backend =3D virStorageBackendForType(def->type)) =3D=3D NULL) @@ -790,7 +790,7 @@ storagePoolDefineXML(virConnectPtr conn, if (virStoragePoolObjIsDuplicate(&driver->pools, def, 0) < 0) goto cleanup; =20 - if (virStoragePoolSourceFindDuplicate(conn, &driver->pools, def) < 0) + if (virStoragePoolObjSourceFindDuplicate(conn, &driver->pools, def) < = 0) goto cleanup; =20 if (virStorageBackendForType(def->type) =3D=3D NULL) --=20 2.9.3 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list