mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-10-05 22:05:47 +00:00
Add private data pointer to virStoragePool and virStorageVol
This will simplify the refactoring of the ESX storage driver to support a VMFS and an iSCSI backend. One of the tasks the storage driver needs to do is to decide which backend driver needs to be invoked for a given request. This approach extends virStoragePool and virStorageVol to store extra parameters: 1. privateData: stores pointer to respective backend storage driver. 2. privateDataFreeFunc: stores cleanup function pointer. virGetStoragePool and virGetStorageVol are modfied to accept these extra parameters as user params. virStoragePoolDispose and virStorageVolDispose checks for cleanup operation if available. The private data pointer allows the ESX storage driver to store a pointer to the used backend with each storage pool and volume. This avoids the need to detect the correct backend in each storage driver function call.
This commit is contained in:
parent
bb2704e7b5
commit
2b121dbc10
@ -4651,14 +4651,16 @@ get_nonnull_interface(virConnectPtr conn, remote_nonnull_interface iface)
|
|||||||
static virStoragePoolPtr
|
static virStoragePoolPtr
|
||||||
get_nonnull_storage_pool(virConnectPtr conn, remote_nonnull_storage_pool pool)
|
get_nonnull_storage_pool(virConnectPtr conn, remote_nonnull_storage_pool pool)
|
||||||
{
|
{
|
||||||
return virGetStoragePool(conn, pool.name, BAD_CAST pool.uuid);
|
return virGetStoragePool(conn, pool.name, BAD_CAST pool.uuid,
|
||||||
|
NULL, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static virStorageVolPtr
|
static virStorageVolPtr
|
||||||
get_nonnull_storage_vol(virConnectPtr conn, remote_nonnull_storage_vol vol)
|
get_nonnull_storage_vol(virConnectPtr conn, remote_nonnull_storage_vol vol)
|
||||||
{
|
{
|
||||||
virStorageVolPtr ret;
|
virStorageVolPtr ret;
|
||||||
ret = virGetStorageVol(conn, vol.pool, vol.name, vol.key);
|
ret = virGetStorageVol(conn, vol.pool, vol.name, vol.key,
|
||||||
|
NULL, NULL);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1981,7 +1981,8 @@ virStoragePoolList(virConnectPtr conn,
|
|||||||
if (pools) {
|
if (pools) {
|
||||||
if (!(pool = virGetStoragePool(conn,
|
if (!(pool = virGetStoragePool(conn,
|
||||||
poolobj->def->name,
|
poolobj->def->name,
|
||||||
poolobj->def->uuid))) {
|
poolobj->def->uuid,
|
||||||
|
NULL, NULL))) {
|
||||||
virStoragePoolObjUnlock(poolobj);
|
virStoragePoolObjUnlock(poolobj);
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
@ -379,6 +379,8 @@ virInterfaceDispose(void *obj)
|
|||||||
* @conn: the hypervisor connection
|
* @conn: the hypervisor connection
|
||||||
* @name: pointer to the storage pool name
|
* @name: pointer to the storage pool name
|
||||||
* @uuid: pointer to the uuid
|
* @uuid: pointer to the uuid
|
||||||
|
* @privateData: pointer to driver specific private data
|
||||||
|
* @freeFunc: private data cleanup function pointer specfic to driver
|
||||||
*
|
*
|
||||||
* Lookup if the storage pool is already registered for that connection,
|
* Lookup if the storage pool is already registered for that connection,
|
||||||
* if yes return a new pointer to it, if no allocate a new structure,
|
* if yes return a new pointer to it, if no allocate a new structure,
|
||||||
@ -389,7 +391,8 @@ virInterfaceDispose(void *obj)
|
|||||||
*/
|
*/
|
||||||
virStoragePoolPtr
|
virStoragePoolPtr
|
||||||
virGetStoragePool(virConnectPtr conn, const char *name,
|
virGetStoragePool(virConnectPtr conn, const char *name,
|
||||||
const unsigned char *uuid)
|
const unsigned char *uuid,
|
||||||
|
void *privateData, virFreeCallback freeFunc)
|
||||||
{
|
{
|
||||||
virStoragePoolPtr ret = NULL;
|
virStoragePoolPtr ret = NULL;
|
||||||
|
|
||||||
@ -412,6 +415,10 @@ virGetStoragePool(virConnectPtr conn, const char *name,
|
|||||||
ret->conn = virObjectRef(conn);
|
ret->conn = virObjectRef(conn);
|
||||||
memcpy(&(ret->uuid[0]), uuid, VIR_UUID_BUFLEN);
|
memcpy(&(ret->uuid[0]), uuid, VIR_UUID_BUFLEN);
|
||||||
|
|
||||||
|
/* set the driver specific data */
|
||||||
|
ret->privateData = privateData;
|
||||||
|
ret->privateDataFreeFunc = freeFunc;
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
no_memory:
|
no_memory:
|
||||||
@ -442,6 +449,10 @@ virStoragePoolDispose(void *obj)
|
|||||||
virUUIDFormat(pool->uuid, uuidstr);
|
virUUIDFormat(pool->uuid, uuidstr);
|
||||||
VIR_DEBUG("release pool %p %s %s", pool, pool->name, uuidstr);
|
VIR_DEBUG("release pool %p %s %s", pool, pool->name, uuidstr);
|
||||||
|
|
||||||
|
if (pool->privateDataFreeFunc) {
|
||||||
|
pool->privateDataFreeFunc(pool->privateData);
|
||||||
|
}
|
||||||
|
|
||||||
VIR_FREE(pool->name);
|
VIR_FREE(pool->name);
|
||||||
virObjectUnref(pool->conn);
|
virObjectUnref(pool->conn);
|
||||||
}
|
}
|
||||||
@ -453,6 +464,8 @@ virStoragePoolDispose(void *obj)
|
|||||||
* @pool: pool owning the volume
|
* @pool: pool owning the volume
|
||||||
* @name: pointer to the storage vol name
|
* @name: pointer to the storage vol name
|
||||||
* @key: pointer to unique key of the volume
|
* @key: pointer to unique key of the volume
|
||||||
|
* @privateData: pointer to driver specific private data
|
||||||
|
* @freeFunc: private data cleanup function pointer specfic to driver
|
||||||
*
|
*
|
||||||
* Lookup if the storage vol is already registered for that connection,
|
* Lookup if the storage vol is already registered for that connection,
|
||||||
* if yes return a new pointer to it, if no allocate a new structure,
|
* if yes return a new pointer to it, if no allocate a new structure,
|
||||||
@ -463,7 +476,7 @@ virStoragePoolDispose(void *obj)
|
|||||||
*/
|
*/
|
||||||
virStorageVolPtr
|
virStorageVolPtr
|
||||||
virGetStorageVol(virConnectPtr conn, const char *pool, const char *name,
|
virGetStorageVol(virConnectPtr conn, const char *pool, const char *name,
|
||||||
const char *key)
|
const char *key, void *privateData, virFreeCallback freeFunc)
|
||||||
{
|
{
|
||||||
virStorageVolPtr ret = NULL;
|
virStorageVolPtr ret = NULL;
|
||||||
|
|
||||||
@ -489,6 +502,10 @@ virGetStorageVol(virConnectPtr conn, const char *pool, const char *name,
|
|||||||
|
|
||||||
ret->conn = virObjectRef(conn);
|
ret->conn = virObjectRef(conn);
|
||||||
|
|
||||||
|
/* set driver specific data */
|
||||||
|
ret->privateData = privateData;
|
||||||
|
ret->privateDataFreeFunc = freeFunc;
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
no_memory:
|
no_memory:
|
||||||
@ -516,6 +533,10 @@ virStorageVolDispose(void *obj)
|
|||||||
virStorageVolPtr vol = obj;
|
virStorageVolPtr vol = obj;
|
||||||
VIR_DEBUG("release vol %p %s", vol, vol->name);
|
VIR_DEBUG("release vol %p %s", vol, vol->name);
|
||||||
|
|
||||||
|
if (vol->privateDataFreeFunc) {
|
||||||
|
vol->privateDataFreeFunc(vol->privateData);
|
||||||
|
}
|
||||||
|
|
||||||
VIR_FREE(vol->key);
|
VIR_FREE(vol->key);
|
||||||
VIR_FREE(vol->name);
|
VIR_FREE(vol->name);
|
||||||
VIR_FREE(vol->pool);
|
VIR_FREE(vol->pool);
|
||||||
|
@ -196,6 +196,13 @@ struct _virStoragePool {
|
|||||||
virConnectPtr conn; /* pointer back to the connection */
|
virConnectPtr conn; /* pointer back to the connection */
|
||||||
char *name; /* the storage pool external name */
|
char *name; /* the storage pool external name */
|
||||||
unsigned char uuid[VIR_UUID_BUFLEN]; /* the storage pool unique identifier */
|
unsigned char uuid[VIR_UUID_BUFLEN]; /* the storage pool unique identifier */
|
||||||
|
|
||||||
|
/* Private data pointer which can be used by driver as they wish.
|
||||||
|
* Cleanup function pointer can be hooked to provide custom cleanup
|
||||||
|
* operation.
|
||||||
|
*/
|
||||||
|
void *privateData;
|
||||||
|
virFreeCallback privateDataFreeFunc;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -209,6 +216,13 @@ struct _virStorageVol {
|
|||||||
char *pool; /* Pool name of owner */
|
char *pool; /* Pool name of owner */
|
||||||
char *name; /* the storage vol external name */
|
char *name; /* the storage vol external name */
|
||||||
char *key; /* unique key for storage vol */
|
char *key; /* unique key for storage vol */
|
||||||
|
|
||||||
|
/* Private data pointer which can be used by driver as they wish.
|
||||||
|
* Cleanup function pointer can be hooked to provide custom cleanup
|
||||||
|
* operation.
|
||||||
|
*/
|
||||||
|
void *privateData;
|
||||||
|
virFreeCallback privateDataFreeFunc;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -294,11 +308,15 @@ virInterfacePtr virGetInterface(virConnectPtr conn,
|
|||||||
const char *mac);
|
const char *mac);
|
||||||
virStoragePoolPtr virGetStoragePool(virConnectPtr conn,
|
virStoragePoolPtr virGetStoragePool(virConnectPtr conn,
|
||||||
const char *name,
|
const char *name,
|
||||||
const unsigned char *uuid);
|
const unsigned char *uuid,
|
||||||
|
void *privateData,
|
||||||
|
virFreeCallback freeFunc);
|
||||||
virStorageVolPtr virGetStorageVol(virConnectPtr conn,
|
virStorageVolPtr virGetStorageVol(virConnectPtr conn,
|
||||||
const char *pool,
|
const char *pool,
|
||||||
const char *name,
|
const char *name,
|
||||||
const char *key);
|
const char *key,
|
||||||
|
void *privateData,
|
||||||
|
virFreeCallback freeFunc);
|
||||||
virNodeDevicePtr virGetNodeDevice(virConnectPtr conn,
|
virNodeDevicePtr virGetNodeDevice(virConnectPtr conn,
|
||||||
const char *name);
|
const char *name);
|
||||||
virSecretPtr virGetSecret(virConnectPtr conn,
|
virSecretPtr virGetSecret(virConnectPtr conn,
|
||||||
|
@ -282,7 +282,7 @@ esxStoragePoolLookupByName(virConnectPtr conn, const char *name)
|
|||||||
md5_buffer(hostMount->mountInfo->path,
|
md5_buffer(hostMount->mountInfo->path,
|
||||||
strlen(hostMount->mountInfo->path), md5);
|
strlen(hostMount->mountInfo->path), md5);
|
||||||
|
|
||||||
pool = virGetStoragePool(conn, name, md5);
|
pool = virGetStoragePool(conn, name, md5, NULL, NULL);
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
esxVI_ObjectContent_Free(&datastore);
|
esxVI_ObjectContent_Free(&datastore);
|
||||||
@ -348,7 +348,7 @@ esxStoragePoolLookupByUUID(virConnectPtr conn, const unsigned char *uuid)
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
pool = virGetStoragePool(conn, name, uuid);
|
pool = virGetStoragePool(conn, name, uuid, NULL, NULL);
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
esxVI_String_Free(&propertyNameList);
|
esxVI_String_Free(&propertyNameList);
|
||||||
@ -766,7 +766,7 @@ esxStorageVolumeLookupByName(virStoragePoolPtr pool, const char *name)
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
volume = virGetStorageVol(pool->conn, pool->name, name, key);
|
volume = virGetStorageVol(pool->conn, pool->name, name, key, NULL, NULL);
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
VIR_FREE(datastorePath);
|
VIR_FREE(datastorePath);
|
||||||
@ -800,7 +800,7 @@ esxStorageVolumeLookupByPath(virConnectPtr conn, const char *path)
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
volume = virGetStorageVol(conn, datastoreName, directoryAndFileName, key);
|
volume = virGetStorageVol(conn, datastoreName, directoryAndFileName, key, NULL, NULL);
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
VIR_FREE(datastoreName);
|
VIR_FREE(datastoreName);
|
||||||
@ -934,7 +934,7 @@ esxStorageVolumeLookupByKey(virConnectPtr conn, const char *key)
|
|||||||
if (STREQ(key, key_candidate)) {
|
if (STREQ(key, key_candidate)) {
|
||||||
/* Found matching UUID */
|
/* Found matching UUID */
|
||||||
volume = virGetStorageVol(conn, datastoreName,
|
volume = virGetStorageVol(conn, datastoreName,
|
||||||
volumeName, key);
|
volumeName, key, NULL, NULL);
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1155,7 +1155,7 @@ esxStorageVolumeCreateXML(virStoragePoolPtr pool, const char *xmldesc,
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
volume = virGetStorageVol(pool->conn, pool->name, def->name, key);
|
volume = virGetStorageVol(pool->conn, pool->name, def->name, key, NULL, NULL);
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
if (virtualDiskSpec != NULL) {
|
if (virtualDiskSpec != NULL) {
|
||||||
@ -1357,7 +1357,7 @@ esxStorageVolumeCreateXMLFrom(virStoragePoolPtr pool, const char *xmldesc,
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
volume = virGetStorageVol(pool->conn, pool->name, def->name, key);
|
volume = virGetStorageVol(pool->conn, pool->name, def->name, key, NULL, NULL);
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
VIR_FREE(sourceDatastorePath);
|
VIR_FREE(sourceDatastorePath);
|
||||||
|
@ -350,7 +350,8 @@ parallelsStoragePoolLookupByUUID(virConnectPtr conn, const unsigned char *uuid)
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = virGetStoragePool(conn, pool->def->name, pool->def->uuid);
|
ret = virGetStoragePool(conn, pool->def->name, pool->def->uuid,
|
||||||
|
NULL, NULL);
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
if (pool)
|
if (pool)
|
||||||
@ -374,7 +375,8 @@ parallelsStoragePoolLookupByName(virConnectPtr conn, const char *name)
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = virGetStoragePool(conn, pool->def->name, pool->def->uuid);
|
ret = virGetStoragePool(conn, pool->def->name, pool->def->uuid,
|
||||||
|
NULL, NULL);
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
if (pool)
|
if (pool)
|
||||||
@ -459,7 +461,8 @@ parallelsStoragePoolDefine(virConnectPtr conn,
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = virGetStoragePool(conn, pool->def->name, pool->def->uuid);
|
ret = virGetStoragePool(conn, pool->def->name, pool->def->uuid,
|
||||||
|
NULL, NULL);
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
virStoragePoolDefFree(def);
|
virStoragePoolDefFree(def);
|
||||||
@ -831,7 +834,8 @@ parallelsStorageVolumeLookupByName(virStoragePoolPtr pool,
|
|||||||
}
|
}
|
||||||
|
|
||||||
ret = virGetStorageVol(pool->conn, privpool->def->name,
|
ret = virGetStorageVol(pool->conn, privpool->def->name,
|
||||||
privvol->name, privvol->key);
|
privvol->name, privvol->key,
|
||||||
|
NULL, NULL);
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
if (privpool)
|
if (privpool)
|
||||||
@ -857,7 +861,8 @@ parallelsStorageVolumeLookupByKey(virConnectPtr conn, const char *key)
|
|||||||
if (privvol) {
|
if (privvol) {
|
||||||
ret = virGetStorageVol(conn,
|
ret = virGetStorageVol(conn,
|
||||||
privconn->pools.objs[i]->def->name,
|
privconn->pools.objs[i]->def->name,
|
||||||
privvol->name, privvol->key);
|
privvol->name, privvol->key,
|
||||||
|
NULL, NULL);
|
||||||
virStoragePoolObjUnlock(privconn->pools.objs[i]);
|
virStoragePoolObjUnlock(privconn->pools.objs[i]);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -889,7 +894,8 @@ parallelsStorageVolumeLookupByPathLocked(virConnectPtr conn, const char *path)
|
|||||||
if (privvol) {
|
if (privvol) {
|
||||||
ret = virGetStorageVol(conn,
|
ret = virGetStorageVol(conn,
|
||||||
privconn->pools.objs[i]->def->name,
|
privconn->pools.objs[i]->def->name,
|
||||||
privvol->name, privvol->key);
|
privvol->name, privvol->key,
|
||||||
|
NULL, NULL);
|
||||||
virStoragePoolObjUnlock(privconn->pools.objs[i]);
|
virStoragePoolObjUnlock(privconn->pools.objs[i]);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1026,7 +1032,8 @@ parallelsStorageVolumeCreateXML(virStoragePoolPtr pool,
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
ret = virGetStorageVol(pool->conn, privpool->def->name,
|
ret = virGetStorageVol(pool->conn, privpool->def->name,
|
||||||
privvol->name, privvol->key);
|
privvol->name, privvol->key,
|
||||||
|
NULL, NULL);
|
||||||
cleanup:
|
cleanup:
|
||||||
if (privpool)
|
if (privpool)
|
||||||
virStoragePoolObjUnlock(privpool);
|
virStoragePoolObjUnlock(privpool);
|
||||||
@ -1115,7 +1122,8 @@ parallelsStorageVolumeCreateXMLFrom(virStoragePoolPtr pool,
|
|||||||
privpool->volumes.objs[privpool->volumes.count++] = privvol;
|
privpool->volumes.objs[privpool->volumes.count++] = privvol;
|
||||||
|
|
||||||
ret = virGetStorageVol(pool->conn, privpool->def->name,
|
ret = virGetStorageVol(pool->conn, privpool->def->name,
|
||||||
privvol->name, privvol->key);
|
privvol->name, privvol->key,
|
||||||
|
NULL, NULL);
|
||||||
privvol = NULL;
|
privvol = NULL;
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
|
@ -2021,7 +2021,7 @@ phypVolumeLookupByName(virStoragePoolPtr pool, const char *volname)
|
|||||||
if (key == NULL)
|
if (key == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
vol = virGetStorageVol(pool->conn, pool->name, volname, key);
|
vol = virGetStorageVol(pool->conn, pool->name, volname, key, NULL, NULL);
|
||||||
|
|
||||||
VIR_FREE(key);
|
VIR_FREE(key);
|
||||||
|
|
||||||
@ -2111,7 +2111,7 @@ phypStorageVolCreateXML(virStoragePoolPtr pool,
|
|||||||
|
|
||||||
if ((vol =
|
if ((vol =
|
||||||
virGetStorageVol(pool->conn, pool->name, voldef->name,
|
virGetStorageVol(pool->conn, pool->name, voldef->name,
|
||||||
key)) == NULL)
|
key, NULL, NULL)) == NULL)
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
VIR_FREE(key);
|
VIR_FREE(key);
|
||||||
@ -2192,7 +2192,7 @@ phypVolumeLookupByPath(virConnectPtr conn, const char *volname)
|
|||||||
if (key == NULL)
|
if (key == NULL)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
vol = virGetStorageVol(conn, ret, volname, key);
|
vol = virGetStorageVol(conn, ret, volname, key, NULL, NULL);
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
VIR_FREE(ret);
|
VIR_FREE(ret);
|
||||||
@ -2250,7 +2250,7 @@ phypStoragePoolLookupByName(virConnectPtr conn, const char *name)
|
|||||||
if (phypGetStoragePoolUUID(conn, uuid, name) == -1)
|
if (phypGetStoragePoolUUID(conn, uuid, name) == -1)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
return virGetStoragePool(conn, name, uuid);
|
return virGetStoragePool(conn, name, uuid, NULL, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
@ -2684,7 +2684,7 @@ phypGetStoragePoolLookUpByUUID(virConnectPtr conn,
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (!memcmp(local_uuid, uuid, VIR_UUID_BUFLEN)) {
|
if (!memcmp(local_uuid, uuid, VIR_UUID_BUFLEN)) {
|
||||||
sp = virGetStoragePool(conn, pools[i], uuid);
|
sp = virGetStoragePool(conn, pools[i], uuid, NULL, NULL);
|
||||||
VIR_FREE(local_uuid);
|
VIR_FREE(local_uuid);
|
||||||
VIR_FREE(pools);
|
VIR_FREE(pools);
|
||||||
|
|
||||||
@ -2728,7 +2728,7 @@ phypStoragePoolCreateXML(virConnectPtr conn,
|
|||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((sp = virGetStoragePool(conn, def->name, def->uuid)) == NULL)
|
if ((sp = virGetStoragePool(conn, def->name, def->uuid, NULL, NULL)) == NULL)
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
if (phypBuildStoragePool(conn, def) == -1)
|
if (phypBuildStoragePool(conn, def) == -1)
|
||||||
|
@ -5863,13 +5863,15 @@ get_nonnull_interface(virConnectPtr conn, remote_nonnull_interface iface)
|
|||||||
static virStoragePoolPtr
|
static virStoragePoolPtr
|
||||||
get_nonnull_storage_pool(virConnectPtr conn, remote_nonnull_storage_pool pool)
|
get_nonnull_storage_pool(virConnectPtr conn, remote_nonnull_storage_pool pool)
|
||||||
{
|
{
|
||||||
return virGetStoragePool(conn, pool.name, BAD_CAST pool.uuid);
|
return virGetStoragePool(conn, pool.name, BAD_CAST pool.uuid,
|
||||||
|
NULL, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static virStorageVolPtr
|
static virStorageVolPtr
|
||||||
get_nonnull_storage_vol(virConnectPtr conn, remote_nonnull_storage_vol vol)
|
get_nonnull_storage_vol(virConnectPtr conn, remote_nonnull_storage_vol vol)
|
||||||
{
|
{
|
||||||
return virGetStorageVol(conn, vol.pool, vol.name, vol.key);
|
return virGetStorageVol(conn, vol.pool, vol.name, vol.key,
|
||||||
|
NULL, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static virNodeDevicePtr
|
static virNodeDevicePtr
|
||||||
|
@ -273,7 +273,8 @@ storagePoolLookupByUUID(virConnectPtr conn,
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = virGetStoragePool(conn, pool->def->name, pool->def->uuid);
|
ret = virGetStoragePool(conn, pool->def->name, pool->def->uuid,
|
||||||
|
NULL, NULL);
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
if (pool)
|
if (pool)
|
||||||
@ -298,7 +299,8 @@ storagePoolLookupByName(virConnectPtr conn,
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = virGetStoragePool(conn, pool->def->name, pool->def->uuid);
|
ret = virGetStoragePool(conn, pool->def->name, pool->def->uuid,
|
||||||
|
NULL, NULL);
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
if (pool)
|
if (pool)
|
||||||
@ -555,7 +557,8 @@ storagePoolCreate(virConnectPtr conn,
|
|||||||
VIR_INFO("Creating storage pool '%s'", pool->def->name);
|
VIR_INFO("Creating storage pool '%s'", pool->def->name);
|
||||||
pool->active = 1;
|
pool->active = 1;
|
||||||
|
|
||||||
ret = virGetStoragePool(conn, pool->def->name, pool->def->uuid);
|
ret = virGetStoragePool(conn, pool->def->name, pool->def->uuid,
|
||||||
|
NULL, NULL);
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
virStoragePoolDefFree(def);
|
virStoragePoolDefFree(def);
|
||||||
@ -601,7 +604,8 @@ storagePoolDefine(virConnectPtr conn,
|
|||||||
def = NULL;
|
def = NULL;
|
||||||
|
|
||||||
VIR_INFO("Defining storage pool '%s'", pool->def->name);
|
VIR_INFO("Defining storage pool '%s'", pool->def->name);
|
||||||
ret = virGetStoragePool(conn, pool->def->name, pool->def->uuid);
|
ret = virGetStoragePool(conn, pool->def->name, pool->def->uuid,
|
||||||
|
NULL, NULL);
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
virStoragePoolDefFree(def);
|
virStoragePoolDefFree(def);
|
||||||
@ -1202,7 +1206,8 @@ storagePoolListAllVolumes(virStoragePoolPtr pool,
|
|||||||
for (i = 0 ; i < obj->volumes.count; i++) {
|
for (i = 0 ; i < obj->volumes.count; i++) {
|
||||||
if (!(vol = virGetStorageVol(pool->conn, obj->def->name,
|
if (!(vol = virGetStorageVol(pool->conn, obj->def->name,
|
||||||
obj->volumes.objs[i]->name,
|
obj->volumes.objs[i]->name,
|
||||||
obj->volumes.objs[i]->key)))
|
obj->volumes.objs[i]->key,
|
||||||
|
NULL, NULL)))
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
tmp_vols[nvols++] = vol;
|
tmp_vols[nvols++] = vol;
|
||||||
}
|
}
|
||||||
@ -1258,7 +1263,8 @@ storageVolumeLookupByName(virStoragePoolPtr obj,
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = virGetStorageVol(obj->conn, pool->def->name, vol->name, vol->key);
|
ret = virGetStorageVol(obj->conn, pool->def->name, vol->name, vol->key,
|
||||||
|
NULL, NULL);
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
if (pool)
|
if (pool)
|
||||||
@ -1285,7 +1291,8 @@ storageVolumeLookupByKey(virConnectPtr conn,
|
|||||||
ret = virGetStorageVol(conn,
|
ret = virGetStorageVol(conn,
|
||||||
driver->pools.objs[i]->def->name,
|
driver->pools.objs[i]->def->name,
|
||||||
vol->name,
|
vol->name,
|
||||||
vol->key);
|
vol->key,
|
||||||
|
NULL, NULL);
|
||||||
}
|
}
|
||||||
virStoragePoolObjUnlock(driver->pools.objs[i]);
|
virStoragePoolObjUnlock(driver->pools.objs[i]);
|
||||||
}
|
}
|
||||||
@ -1338,7 +1345,8 @@ storageVolumeLookupByPath(virConnectPtr conn,
|
|||||||
ret = virGetStorageVol(conn,
|
ret = virGetStorageVol(conn,
|
||||||
driver->pools.objs[i]->def->name,
|
driver->pools.objs[i]->def->name,
|
||||||
vol->name,
|
vol->name,
|
||||||
vol->key);
|
vol->key,
|
||||||
|
NULL, NULL);
|
||||||
}
|
}
|
||||||
virStoragePoolObjUnlock(driver->pools.objs[i]);
|
virStoragePoolObjUnlock(driver->pools.objs[i]);
|
||||||
}
|
}
|
||||||
@ -1415,7 +1423,7 @@ storageVolumeCreateXML(virStoragePoolPtr obj,
|
|||||||
|
|
||||||
pool->volumes.objs[pool->volumes.count++] = voldef;
|
pool->volumes.objs[pool->volumes.count++] = voldef;
|
||||||
volobj = virGetStorageVol(obj->conn, pool->def->name, voldef->name,
|
volobj = virGetStorageVol(obj->conn, pool->def->name, voldef->name,
|
||||||
voldef->key);
|
voldef->key, NULL, NULL);
|
||||||
if (!volobj) {
|
if (!volobj) {
|
||||||
pool->volumes.count--;
|
pool->volumes.count--;
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
@ -1587,7 +1595,7 @@ storageVolumeCreateXMLFrom(virStoragePoolPtr obj,
|
|||||||
|
|
||||||
pool->volumes.objs[pool->volumes.count++] = newvol;
|
pool->volumes.objs[pool->volumes.count++] = newvol;
|
||||||
volobj = virGetStorageVol(obj->conn, pool->def->name, newvol->name,
|
volobj = virGetStorageVol(obj->conn, pool->def->name, newvol->name,
|
||||||
newvol->key);
|
newvol->key, NULL, NULL);
|
||||||
|
|
||||||
/* Drop the pool lock during volume allocation */
|
/* Drop the pool lock during volume allocation */
|
||||||
pool->asyncjobs++;
|
pool->asyncjobs++;
|
||||||
|
@ -3885,7 +3885,8 @@ testStoragePoolLookupByUUID(virConnectPtr conn,
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = virGetStoragePool(conn, pool->def->name, pool->def->uuid);
|
ret = virGetStoragePool(conn, pool->def->name, pool->def->uuid,
|
||||||
|
NULL, NULL);
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
if (pool)
|
if (pool)
|
||||||
@ -3909,7 +3910,8 @@ testStoragePoolLookupByName(virConnectPtr conn,
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = virGetStoragePool(conn, pool->def->name, pool->def->uuid);
|
ret = virGetStoragePool(conn, pool->def->name, pool->def->uuid,
|
||||||
|
NULL, NULL);
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
if (pool)
|
if (pool)
|
||||||
@ -4201,7 +4203,8 @@ testStoragePoolCreate(virConnectPtr conn,
|
|||||||
}
|
}
|
||||||
pool->active = 1;
|
pool->active = 1;
|
||||||
|
|
||||||
ret = virGetStoragePool(conn, pool->def->name, pool->def->uuid);
|
ret = virGetStoragePool(conn, pool->def->name, pool->def->uuid,
|
||||||
|
NULL, NULL);
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
virStoragePoolDefFree(def);
|
virStoragePoolDefFree(def);
|
||||||
@ -4241,7 +4244,8 @@ testStoragePoolDefine(virConnectPtr conn,
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = virGetStoragePool(conn, pool->def->name, pool->def->uuid);
|
ret = virGetStoragePool(conn, pool->def->name, pool->def->uuid,
|
||||||
|
NULL, NULL);
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
virStoragePoolDefFree(def);
|
virStoragePoolDefFree(def);
|
||||||
@ -4668,7 +4672,8 @@ testStoragePoolListAllVolumes(virStoragePoolPtr obj,
|
|||||||
for (i = 0 ; i < pool->volumes.count; i++) {
|
for (i = 0 ; i < pool->volumes.count; i++) {
|
||||||
if (!(vol = virGetStorageVol(obj->conn, pool->def->name,
|
if (!(vol = virGetStorageVol(obj->conn, pool->def->name,
|
||||||
pool->volumes.objs[i]->name,
|
pool->volumes.objs[i]->name,
|
||||||
pool->volumes.objs[i]->key)))
|
pool->volumes.objs[i]->key,
|
||||||
|
NULL, NULL)))
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
tmp_vols[nvols++] = vol;
|
tmp_vols[nvols++] = vol;
|
||||||
}
|
}
|
||||||
@ -4725,7 +4730,8 @@ testStorageVolumeLookupByName(virStoragePoolPtr pool,
|
|||||||
}
|
}
|
||||||
|
|
||||||
ret = virGetStorageVol(pool->conn, privpool->def->name,
|
ret = virGetStorageVol(pool->conn, privpool->def->name,
|
||||||
privvol->name, privvol->key);
|
privvol->name, privvol->key,
|
||||||
|
NULL, NULL);
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
if (privpool)
|
if (privpool)
|
||||||
@ -4752,7 +4758,8 @@ testStorageVolumeLookupByKey(virConnectPtr conn,
|
|||||||
ret = virGetStorageVol(conn,
|
ret = virGetStorageVol(conn,
|
||||||
privconn->pools.objs[i]->def->name,
|
privconn->pools.objs[i]->def->name,
|
||||||
privvol->name,
|
privvol->name,
|
||||||
privvol->key);
|
privvol->key,
|
||||||
|
NULL, NULL);
|
||||||
virStoragePoolObjUnlock(privconn->pools.objs[i]);
|
virStoragePoolObjUnlock(privconn->pools.objs[i]);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -4786,7 +4793,8 @@ testStorageVolumeLookupByPath(virConnectPtr conn,
|
|||||||
ret = virGetStorageVol(conn,
|
ret = virGetStorageVol(conn,
|
||||||
privconn->pools.objs[i]->def->name,
|
privconn->pools.objs[i]->def->name,
|
||||||
privvol->name,
|
privvol->name,
|
||||||
privvol->key);
|
privvol->key,
|
||||||
|
NULL, NULL);
|
||||||
virStoragePoolObjUnlock(privconn->pools.objs[i]);
|
virStoragePoolObjUnlock(privconn->pools.objs[i]);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -4875,7 +4883,8 @@ testStorageVolumeCreateXML(virStoragePoolPtr pool,
|
|||||||
privpool->volumes.objs[privpool->volumes.count++] = privvol;
|
privpool->volumes.objs[privpool->volumes.count++] = privvol;
|
||||||
|
|
||||||
ret = virGetStorageVol(pool->conn, privpool->def->name,
|
ret = virGetStorageVol(pool->conn, privpool->def->name,
|
||||||
privvol->name, privvol->key);
|
privvol->name, privvol->key,
|
||||||
|
NULL, NULL);
|
||||||
privvol = NULL;
|
privvol = NULL;
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
@ -4969,7 +4978,8 @@ testStorageVolumeCreateXMLFrom(virStoragePoolPtr pool,
|
|||||||
privpool->volumes.objs[privpool->volumes.count++] = privvol;
|
privpool->volumes.objs[privpool->volumes.count++] = privvol;
|
||||||
|
|
||||||
ret = virGetStorageVol(pool->conn, privpool->def->name,
|
ret = virGetStorageVol(pool->conn, privpool->def->name,
|
||||||
privvol->name, privvol->key);
|
privvol->name, privvol->key,
|
||||||
|
NULL, NULL);
|
||||||
privvol = NULL;
|
privvol = NULL;
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
|
@ -8321,7 +8321,7 @@ static virStoragePoolPtr vboxStoragePoolLookupByName(virConnectPtr conn, const c
|
|||||||
|
|
||||||
ignore_value(virUUIDParse(uuidstr, uuid));
|
ignore_value(virUUIDParse(uuidstr, uuid));
|
||||||
|
|
||||||
ret = virGetStoragePool(conn, name, uuid);
|
ret = virGetStoragePool(conn, name, uuid, NULL, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
@ -8450,7 +8450,8 @@ static virStorageVolPtr vboxStorageVolLookupByName(virStoragePoolPtr pool, const
|
|||||||
vboxIIDToUUID(&hddIID, uuid);
|
vboxIIDToUUID(&hddIID, uuid);
|
||||||
virUUIDFormat(uuid, key);
|
virUUIDFormat(uuid, key);
|
||||||
|
|
||||||
ret = virGetStorageVol(pool->conn, pool->name, name, key);
|
ret = virGetStorageVol(pool->conn, pool->name, name, key,
|
||||||
|
NULL, NULL);
|
||||||
|
|
||||||
VIR_DEBUG("virStorageVolPtr: %p", ret);
|
VIR_DEBUG("virStorageVolPtr: %p", ret);
|
||||||
VIR_DEBUG("Storage Volume Name: %s", name);
|
VIR_DEBUG("Storage Volume Name: %s", name);
|
||||||
@ -8511,7 +8512,8 @@ static virStorageVolPtr vboxStorageVolLookupByKey(virConnectPtr conn, const char
|
|||||||
|
|
||||||
if (hddNameUtf8) {
|
if (hddNameUtf8) {
|
||||||
if (vboxStorageNumOfPools(conn) == 1) {
|
if (vboxStorageNumOfPools(conn) == 1) {
|
||||||
ret = virGetStorageVol(conn, "default-pool", hddNameUtf8, key);
|
ret = virGetStorageVol(conn, "default-pool", hddNameUtf8, key,
|
||||||
|
NULL, NULL);
|
||||||
VIR_DEBUG("Storage Volume Pool: %s", "default-pool");
|
VIR_DEBUG("Storage Volume Pool: %s", "default-pool");
|
||||||
} else {
|
} else {
|
||||||
/* TODO: currently only one default pool and thus
|
/* TODO: currently only one default pool and thus
|
||||||
@ -8583,7 +8585,8 @@ static virStorageVolPtr vboxStorageVolLookupByPath(virConnectPtr conn, const cha
|
|||||||
* the check below, change it when pools are supported
|
* the check below, change it when pools are supported
|
||||||
*/
|
*/
|
||||||
if (vboxStorageNumOfPools(conn) == 1)
|
if (vboxStorageNumOfPools(conn) == 1)
|
||||||
ret = virGetStorageVol(conn, "default-pool", hddNameUtf8, key);
|
ret = virGetStorageVol(conn, "default-pool", hddNameUtf8, key,
|
||||||
|
NULL, NULL);
|
||||||
|
|
||||||
VIR_DEBUG("Storage Volume Pool: %s", "default-pool");
|
VIR_DEBUG("Storage Volume Pool: %s", "default-pool");
|
||||||
VIR_DEBUG("Storage Volume Name: %s", hddNameUtf8);
|
VIR_DEBUG("Storage Volume Name: %s", hddNameUtf8);
|
||||||
@ -8683,7 +8686,8 @@ static virStorageVolPtr vboxStorageVolCreateXML(virStoragePoolPtr pool,
|
|||||||
vboxIIDToUUID(&hddIID, uuid);
|
vboxIIDToUUID(&hddIID, uuid);
|
||||||
virUUIDFormat(uuid, key);
|
virUUIDFormat(uuid, key);
|
||||||
|
|
||||||
ret = virGetStorageVol(pool->conn, pool->name, def->name, key);
|
ret = virGetStorageVol(pool->conn, pool->name, def->name, key,
|
||||||
|
NULL, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
vboxIIDUnalloc(&hddIID);
|
vboxIIDUnalloc(&hddIID);
|
||||||
|
Loading…
Reference in New Issue
Block a user