提交 90e65353 编写于 作者: J John Ferlan

storage: Privatize virStoragePoolObjListPtr

Move the structure into virstorageobj.c.

Use the virStoragePoolObjListNew allocator to fill in the @pools for
the storage driver and test driver.
上级 d4f80d43
......@@ -62,6 +62,11 @@ struct _virStoragePoolObj {
virStorageVolDefList volumes;
};
struct _virStoragePoolObjList {
size_t count;
virStoragePoolObjPtr *objs;
};
static int
virStoragePoolObjOnceInit(void)
......@@ -241,7 +246,19 @@ virStoragePoolObjListFree(virStoragePoolObjListPtr pools)
for (i = 0; i < pools->count; i++)
virObjectUnref(pools->objs[i]);
VIR_FREE(pools->objs);
pools->count = 0;
VIR_FREE(pools);
}
virStoragePoolObjListPtr
virStoragePoolObjListNew(void)
{
virStoragePoolObjListPtr pools;
if (VIR_ALLOC(pools) < 0)
return NULL;
return pools;
}
......
......@@ -29,10 +29,6 @@ typedef virStoragePoolObj *virStoragePoolObjPtr;
typedef struct _virStoragePoolObjList virStoragePoolObjList;
typedef virStoragePoolObjList *virStoragePoolObjListPtr;
struct _virStoragePoolObjList {
size_t count;
virStoragePoolObjPtr *objs;
};
typedef struct _virStorageDriverState virStorageDriverState;
typedef virStorageDriverState *virStorageDriverStatePtr;
......@@ -40,7 +36,7 @@ typedef virStorageDriverState *virStorageDriverStatePtr;
struct _virStorageDriverState {
virMutex lock;
virStoragePoolObjList pools;
virStoragePoolObjListPtr pools;
char *configDir;
char *autostartDir;
......@@ -244,6 +240,9 @@ virStoragePoolObjListSearch(virStoragePoolObjListPtr pools,
virStoragePoolObjListSearcher searcher,
const void *opaque);
virStoragePoolObjListPtr
virStoragePoolObjListNew(void);
void
virStoragePoolObjRemove(virStoragePoolObjListPtr pools,
virStoragePoolObjPtr obj);
......
......@@ -1096,6 +1096,7 @@ virStoragePoolObjIsDuplicate;
virStoragePoolObjListExport;
virStoragePoolObjListForEach;
virStoragePoolObjListFree;
virStoragePoolObjListNew;
virStoragePoolObjListSearch;
virStoragePoolObjLoadAllConfigs;
virStoragePoolObjLoadAllState;
......
......@@ -93,7 +93,7 @@ virStoragePoolUpdateInactive(virStoragePoolObjPtr *objptr)
virStoragePoolObjPtr obj = *objptr;
if (!virStoragePoolObjGetConfigFile(obj)) {
virStoragePoolObjRemove(&driver->pools, obj);
virStoragePoolObjRemove(driver->pools, obj);
*objptr = NULL;
} else if (virStoragePoolObjGetNewDef(obj)) {
virStoragePoolObjDefUseNewDef(obj);
......@@ -162,7 +162,7 @@ storagePoolUpdateStateCallback(virStoragePoolObjPtr obj,
static void
storagePoolUpdateAllState(void)
{
virStoragePoolObjListForEach(&driver->pools,
virStoragePoolObjListForEach(driver->pools,
storagePoolUpdateStateCallback,
NULL);
}
......@@ -227,7 +227,7 @@ storageDriverAutostart(void)
conn = virConnectOpen("qemu:///session");
/* Ignoring NULL conn - let backends decide */
virStoragePoolObjListForEach(&driver->pools,
virStoragePoolObjListForEach(driver->pools,
storageDriverAutostartCallback,
conn);
......@@ -257,6 +257,9 @@ storageStateInitialize(bool privileged,
}
storageDriverLock();
if (!(driver->pools = virStoragePoolObjListNew()))
goto error;
if (privileged) {
if (VIR_STRDUP(driver->configDir,
SYSCONFDIR "/libvirt/storage") < 0 ||
......@@ -288,11 +291,11 @@ storageStateInitialize(bool privileged,
goto error;
}
if (virStoragePoolObjLoadAllState(&driver->pools,
if (virStoragePoolObjLoadAllState(driver->pools,
driver->stateDir) < 0)
goto error;
if (virStoragePoolObjLoadAllConfigs(&driver->pools,
if (virStoragePoolObjLoadAllConfigs(driver->pools,
driver->configDir,
driver->autostartDir) < 0)
goto error;
......@@ -344,9 +347,9 @@ storageStateReload(void)
return -1;
storageDriverLock();
virStoragePoolObjLoadAllState(&driver->pools,
virStoragePoolObjLoadAllState(driver->pools,
driver->stateDir);
virStoragePoolObjLoadAllConfigs(&driver->pools,
virStoragePoolObjLoadAllConfigs(driver->pools,
driver->configDir,
driver->autostartDir);
storageDriverAutostart();
......@@ -372,7 +375,7 @@ storageStateCleanup(void)
virObjectUnref(driver->storageEventState);
/* free inactive pools */
virStoragePoolObjListFree(&driver->pools);
virStoragePoolObjListFree(driver->pools);
VIR_FREE(driver->configDir);
VIR_FREE(driver->autostartDir);
......@@ -392,7 +395,7 @@ storagePoolObjFindByUUID(const unsigned char *uuid,
virStoragePoolObjPtr obj;
char uuidstr[VIR_UUID_STRING_BUFLEN];
if (!(obj = virStoragePoolObjFindByUUID(&driver->pools, uuid))) {
if (!(obj = virStoragePoolObjFindByUUID(driver->pools, uuid))) {
virUUIDFormat(uuid, uuidstr);
if (name)
virReportError(VIR_ERR_NO_STORAGE_POOL,
......@@ -427,7 +430,7 @@ storagePoolObjFindByName(const char *name)
virStoragePoolObjPtr obj;
storageDriverLock();
if (!(obj = virStoragePoolObjFindByName(&driver->pools, name)))
if (!(obj = virStoragePoolObjFindByName(driver->pools, name)))
virReportError(VIR_ERR_NO_STORAGE_POOL,
_("no storage pool with matching name '%s'"), name);
storageDriverUnlock();
......@@ -513,7 +516,7 @@ storageConnectNumOfStoragePools(virConnectPtr conn)
return -1;
storageDriverLock();
nactive = virStoragePoolObjNumOfStoragePools(&driver->pools, conn, true,
nactive = virStoragePoolObjNumOfStoragePools(driver->pools, conn, true,
virConnectNumOfStoragePoolsCheckACL);
storageDriverUnlock();
......@@ -532,7 +535,7 @@ storageConnectListStoragePools(virConnectPtr conn,
return -1;
storageDriverLock();
got = virStoragePoolObjGetNames(&driver->pools, conn, true,
got = virStoragePoolObjGetNames(driver->pools, conn, true,
virConnectListStoragePoolsCheckACL,
names, maxnames);
storageDriverUnlock();
......@@ -548,7 +551,7 @@ storageConnectNumOfDefinedStoragePools(virConnectPtr conn)
return -1;
storageDriverLock();
nactive = virStoragePoolObjNumOfStoragePools(&driver->pools, conn, false,
nactive = virStoragePoolObjNumOfStoragePools(driver->pools, conn, false,
virConnectNumOfDefinedStoragePoolsCheckACL);
storageDriverUnlock();
......@@ -567,7 +570,7 @@ storageConnectListDefinedStoragePools(virConnectPtr conn,
return -1;
storageDriverLock();
got = virStoragePoolObjGetNames(&driver->pools, conn, false,
got = virStoragePoolObjGetNames(driver->pools, conn, false,
virConnectListDefinedStoragePoolsCheckACL,
names, maxnames);
storageDriverUnlock();
......@@ -686,16 +689,16 @@ storagePoolCreateXML(virConnectPtr conn,
if (virStoragePoolCreateXMLEnsureACL(conn, newDef) < 0)
goto cleanup;
if (virStoragePoolObjIsDuplicate(&driver->pools, newDef, 1) < 0)
if (virStoragePoolObjIsDuplicate(driver->pools, newDef, 1) < 0)
goto cleanup;
if (virStoragePoolObjSourceFindDuplicate(conn, &driver->pools, newDef) < 0)
if (virStoragePoolObjSourceFindDuplicate(conn, driver->pools, newDef) < 0)
goto cleanup;
if ((backend = virStorageBackendForType(newDef->type)) == NULL)
goto cleanup;
if (!(obj = virStoragePoolObjAssignDef(&driver->pools, newDef)))
if (!(obj = virStoragePoolObjAssignDef(driver->pools, newDef)))
goto cleanup;
newDef = NULL;
def = virStoragePoolObjGetDef(obj);
......@@ -709,7 +712,7 @@ storagePoolCreateXML(virConnectPtr conn,
if (build_flags ||
(flags & VIR_STORAGE_POOL_CREATE_WITH_BUILD)) {
if (backend->buildPool(conn, obj, build_flags) < 0) {
virStoragePoolObjRemove(&driver->pools, obj);
virStoragePoolObjRemove(driver->pools, obj);
obj = NULL;
goto cleanup;
}
......@@ -718,7 +721,7 @@ storagePoolCreateXML(virConnectPtr conn,
if (backend->startPool &&
backend->startPool(conn, obj) < 0) {
virStoragePoolObjRemove(&driver->pools, obj);
virStoragePoolObjRemove(driver->pools, obj);
obj = NULL;
goto cleanup;
}
......@@ -732,7 +735,7 @@ storagePoolCreateXML(virConnectPtr conn,
unlink(stateFile);
if (backend->stopPool)
backend->stopPool(conn, obj);
virStoragePoolObjRemove(&driver->pools, obj);
virStoragePoolObjRemove(driver->pools, obj);
obj = NULL;
goto cleanup;
}
......@@ -780,22 +783,22 @@ storagePoolDefineXML(virConnectPtr conn,
if (virStoragePoolDefineXMLEnsureACL(conn, newDef) < 0)
goto cleanup;
if (virStoragePoolObjIsDuplicate(&driver->pools, newDef, 0) < 0)
if (virStoragePoolObjIsDuplicate(driver->pools, newDef, 0) < 0)
goto cleanup;
if (virStoragePoolObjSourceFindDuplicate(conn, &driver->pools, newDef) < 0)
if (virStoragePoolObjSourceFindDuplicate(conn, driver->pools, newDef) < 0)
goto cleanup;
if (virStorageBackendForType(newDef->type) == NULL)
goto cleanup;
if (!(obj = virStoragePoolObjAssignDef(&driver->pools, newDef)))
if (!(obj = virStoragePoolObjAssignDef(driver->pools, newDef)))
goto cleanup;
newDef = NULL;
def = virStoragePoolObjGetDef(obj);
if (virStoragePoolObjSaveDef(driver, obj, def) < 0) {
virStoragePoolObjRemove(&driver->pools, obj);
virStoragePoolObjRemove(driver->pools, obj);
obj = NULL;
goto cleanup;
}
......@@ -864,7 +867,7 @@ storagePoolUndefine(virStoragePoolPtr pool)
0);
VIR_INFO("Undefining storage pool '%s'", def->name);
virStoragePoolObjRemove(&driver->pools, obj);
virStoragePoolObjRemove(driver->pools, obj);
obj = NULL;
ret = 0;
......@@ -1521,7 +1524,7 @@ storageVolLookupByKey(virConnectPtr conn,
virStorageVolPtr vol = NULL;
storageDriverLock();
if ((obj = virStoragePoolObjListSearch(&driver->pools,
if ((obj = virStoragePoolObjListSearch(driver->pools,
storageVolLookupByKeyCallback,
&data)) && data.voldef) {
def = virStoragePoolObjGetDef(obj);
......@@ -1606,7 +1609,7 @@ storageVolLookupByPath(virConnectPtr conn,
return NULL;
storageDriverLock();
if ((obj = virStoragePoolObjListSearch(&driver->pools,
if ((obj = virStoragePoolObjListSearch(driver->pools,
storageVolLookupByPathCallback,
&data)) && data.voldef) {
def = virStoragePoolObjGetDef(obj);
......@@ -1665,7 +1668,7 @@ storagePoolLookupByTargetPath(virConnectPtr conn,
return NULL;
storageDriverLock();
if ((obj = virStoragePoolObjListSearch(&driver->pools,
if ((obj = virStoragePoolObjListSearch(driver->pools,
storagePoolLookupByTargetPathCallback,
cleanpath))) {
def = virStoragePoolObjGetDef(obj);
......@@ -1971,10 +1974,10 @@ storageVolCreateXMLFrom(virStoragePoolPtr pool,
NULL);
storageDriverLock();
obj = virStoragePoolObjFindByUUID(&driver->pools, pool->uuid);
obj = virStoragePoolObjFindByUUID(driver->pools, pool->uuid);
if (obj && STRNEQ(pool->name, volsrc->pool)) {
virObjectUnlock(obj);
objsrc = virStoragePoolObjFindByName(&driver->pools, volsrc->pool);
objsrc = virStoragePoolObjFindByName(driver->pools, volsrc->pool);
virObjectLock(obj);
}
storageDriverUnlock();
......@@ -2271,7 +2274,7 @@ virStorageVolPoolRefreshThread(void *opaque)
if (virStorageBackendPloopRestoreDesc(cbdata->vol_path) < 0)
goto cleanup;
}
if (!(obj = virStoragePoolObjFindByName(&driver->pools,
if (!(obj = virStoragePoolObjFindByName(driver->pools,
cbdata->pool_name)))
goto cleanup;
def = virStoragePoolObjGetDef(obj);
......@@ -2687,7 +2690,7 @@ storageConnectListAllStoragePools(virConnectPtr conn,
goto cleanup;
storageDriverLock();
ret = virStoragePoolObjListExport(conn, &driver->pools, pools,
ret = virStoragePoolObjListExport(conn, driver->pools, pools,
virConnectListAllStoragePoolsCheckACL,
flags);
storageDriverUnlock();
......@@ -3092,7 +3095,7 @@ virStoragePoolObjFindPoolByUUID(const unsigned char *uuid)
virStoragePoolObjPtr obj;
storageDriverLock();
obj = virStoragePoolObjFindByUUID(&driver->pools, uuid);
obj = virStoragePoolObjFindByUUID(driver->pools, uuid);
storageDriverUnlock();
return obj;
}
......
......@@ -100,7 +100,7 @@ struct _testDriver {
virInterfaceObjListPtr ifaces;
bool transaction_running;
virInterfaceObjListPtr backupIfaces;
virStoragePoolObjList pools;
virStoragePoolObjListPtr pools;
virNodeDeviceObjListPtr devs;
int numCells;
testCell cells[MAX_CELLS];
......@@ -155,7 +155,7 @@ testDriverFree(testDriverPtr driver)
virNodeDeviceObjListFree(driver->devs);
virObjectUnref(driver->networks);
virObjectUnref(driver->ifaces);
virStoragePoolObjListFree(&driver->pools);
virStoragePoolObjListFree(driver->pools);
virObjectUnref(driver->eventState);
virMutexUnlock(&driver->lock);
virMutexDestroy(&driver->lock);
......@@ -419,7 +419,8 @@ testDriverNew(void)
!(ret->ifaces = virInterfaceObjListNew()) ||
!(ret->domains = virDomainObjListNew()) ||
!(ret->networks = virNetworkObjListNew()) ||
!(ret->devs = virNodeDeviceObjListNew()))
!(ret->devs = virNodeDeviceObjListNew()) ||
!(ret->pools = virStoragePoolObjListNew()))
goto error;
virAtomicIntSet(&ret->nextDomID, 1);
......@@ -1112,8 +1113,7 @@ testParseStorage(testDriverPtr privconn,
if (!def)
goto error;
if (!(obj = virStoragePoolObjAssignDef(&privconn->pools,
def))) {
if (!(obj = virStoragePoolObjAssignDef(privconn->pools, def))) {
virStoragePoolDefFree(def);
goto error;
}
......@@ -4076,7 +4076,7 @@ testStoragePoolObjFindByName(testDriverPtr privconn,
virStoragePoolObjPtr obj;
testDriverLock(privconn);
obj = virStoragePoolObjFindByName(&privconn->pools, name);
obj = virStoragePoolObjFindByName(privconn->pools, name);
testDriverUnlock(privconn);
if (!obj)
......@@ -4136,7 +4136,7 @@ testStoragePoolObjFindByUUID(testDriverPtr privconn,
char uuidstr[VIR_UUID_STRING_BUFLEN];
testDriverLock(privconn);
obj = virStoragePoolObjFindByUUID(&privconn->pools, uuid);
obj = virStoragePoolObjFindByUUID(privconn->pools, uuid);
testDriverUnlock(privconn);
if (!obj) {
......@@ -4204,7 +4204,7 @@ testConnectNumOfStoragePools(virConnectPtr conn)
int numActive = 0;
testDriverLock(privconn);
numActive = virStoragePoolObjNumOfStoragePools(&privconn->pools, conn,
numActive = virStoragePoolObjNumOfStoragePools(privconn->pools, conn,
true, NULL);
testDriverUnlock(privconn);
......@@ -4221,7 +4221,7 @@ testConnectListStoragePools(virConnectPtr conn,
int n = 0;
testDriverLock(privconn);
n = virStoragePoolObjGetNames(&privconn->pools, conn, true, NULL,
n = virStoragePoolObjGetNames(privconn->pools, conn, true, NULL,
names, maxnames);
testDriverUnlock(privconn);
......@@ -4236,7 +4236,7 @@ testConnectNumOfDefinedStoragePools(virConnectPtr conn)
int numInactive = 0;
testDriverLock(privconn);
numInactive = virStoragePoolObjNumOfStoragePools(&privconn->pools, conn,
numInactive = virStoragePoolObjNumOfStoragePools(privconn->pools, conn,
false, NULL);
testDriverUnlock(privconn);
......@@ -4253,7 +4253,7 @@ testConnectListDefinedStoragePools(virConnectPtr conn,
int n = 0;
testDriverLock(privconn);
n = virStoragePoolObjGetNames(&privconn->pools, conn, false, NULL,
n = virStoragePoolObjGetNames(privconn->pools, conn, false, NULL,
names, maxnames);
testDriverUnlock(privconn);
......@@ -4272,7 +4272,7 @@ testConnectListAllStoragePools(virConnectPtr conn,
virCheckFlags(VIR_CONNECT_LIST_STORAGE_POOLS_FILTERS_ALL, -1);
testDriverLock(privconn);
ret = virStoragePoolObjListExport(conn, &privconn->pools, pools,
ret = virStoragePoolObjListExport(conn, privconn->pools, pools,
NULL, flags);
testDriverUnlock(privconn);
......@@ -4440,16 +4440,16 @@ testStoragePoolCreateXML(virConnectPtr conn,
if (!(newDef = virStoragePoolDefParseString(xml)))
goto cleanup;
obj = virStoragePoolObjFindByUUID(&privconn->pools, newDef->uuid);
obj = virStoragePoolObjFindByUUID(privconn->pools, newDef->uuid);
if (!obj)
obj = virStoragePoolObjFindByName(&privconn->pools, newDef->name);
obj = virStoragePoolObjFindByName(privconn->pools, newDef->name);
if (obj) {
virReportError(VIR_ERR_INTERNAL_ERROR,
"%s", _("storage pool already exists"));
goto cleanup;
}
if (!(obj = virStoragePoolObjAssignDef(&privconn->pools, newDef)))
if (!(obj = virStoragePoolObjAssignDef(privconn->pools, newDef)))
goto cleanup;
newDef = NULL;
def = virStoragePoolObjGetDef(obj);
......@@ -4462,14 +4462,14 @@ testStoragePoolCreateXML(virConnectPtr conn,
if (testCreateVport(privconn,
def->source.adapter.data.fchost.wwnn,
def->source.adapter.data.fchost.wwpn) < 0) {
virStoragePoolObjRemove(&privconn->pools, obj);
virStoragePoolObjRemove(privconn->pools, obj);
obj = NULL;
goto cleanup;
}
}
if (testStoragePoolObjSetDefaults(obj) == -1) {
virStoragePoolObjRemove(&privconn->pools, obj);
virStoragePoolObjRemove(privconn->pools, obj);
obj = NULL;
goto cleanup;
}
......@@ -4518,7 +4518,7 @@ testStoragePoolDefineXML(virConnectPtr conn,
newDef->allocation = defaultPoolAlloc;
newDef->available = defaultPoolCap - defaultPoolAlloc;
if (!(obj = virStoragePoolObjAssignDef(&privconn->pools, newDef)))
if (!(obj = virStoragePoolObjAssignDef(privconn->pools, newDef)))
goto cleanup;
newDef = NULL;
def = virStoragePoolObjGetDef(obj);
......@@ -4528,7 +4528,7 @@ testStoragePoolDefineXML(virConnectPtr conn,
0);
if (testStoragePoolObjSetDefaults(obj) == -1) {
virStoragePoolObjRemove(&privconn->pools, obj);
virStoragePoolObjRemove(privconn->pools, obj);
obj = NULL;
goto cleanup;
}
......@@ -4558,7 +4558,7 @@ testStoragePoolUndefine(virStoragePoolPtr pool)
VIR_STORAGE_POOL_EVENT_UNDEFINED,
0);
virStoragePoolObjRemove(&privconn->pools, obj);
virStoragePoolObjRemove(privconn->pools, obj);
testObjectEventQueue(privconn, event);
return 0;
......@@ -4651,7 +4651,7 @@ testStoragePoolDestroy(virStoragePoolPtr pool)
0);
if (!(virStoragePoolObjGetConfigFile(obj))) {
virStoragePoolObjRemove(&privconn->pools, obj);
virStoragePoolObjRemove(privconn->pools, obj);
obj = NULL;
}
ret = 0;
......@@ -4940,7 +4940,7 @@ testStorageVolLookupByKey(virConnectPtr conn,
virStorageVolPtr vol = NULL;
testDriverLock(privconn);
if ((obj = virStoragePoolObjListSearch(&privconn->pools,
if ((obj = virStoragePoolObjListSearch(privconn->pools,
testStorageVolLookupByKeyCallback,
&data)) && data.voldef) {
def = virStoragePoolObjGetDef(obj);
......@@ -4984,7 +4984,7 @@ testStorageVolLookupByPath(virConnectPtr conn,
virStorageVolPtr vol = NULL;
testDriverLock(privconn);
if ((obj = virStoragePoolObjListSearch(&privconn->pools,
if ((obj = virStoragePoolObjListSearch(privconn->pools,
testStorageVolLookupByPathCallback,
&data)) && data.voldef) {
def = virStoragePoolObjGetDef(obj);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册