From 2b121dbc10bf39b611335a7e5b1864f455fbaf75 Mon Sep 17 00:00:00 2001 From: Ata E Husain Bohra Date: Fri, 9 Nov 2012 23:18:07 -0800 Subject: [PATCH] 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. --- daemon/remote.c | 6 ++++-- src/conf/storage_conf.c | 3 ++- src/datatypes.c | 25 +++++++++++++++++++++++-- src/datatypes.h | 24 +++++++++++++++++++++--- src/esx/esx_storage_driver.c | 14 +++++++------- src/parallels/parallels_storage.c | 24 ++++++++++++++++-------- src/phyp/phyp_driver.c | 12 ++++++------ src/remote/remote_driver.c | 6 ++++-- src/storage/storage_driver.c | 28 ++++++++++++++++++---------- src/test/test_driver.c | 30 ++++++++++++++++++++---------- src/vbox/vbox_tmpl.c | 14 +++++++++----- 11 files changed, 130 insertions(+), 56 deletions(-) diff --git a/daemon/remote.c b/daemon/remote.c index 340d07de6f..41b8ea860d 100644 --- a/daemon/remote.c +++ b/daemon/remote.c @@ -4651,14 +4651,16 @@ get_nonnull_interface(virConnectPtr conn, remote_nonnull_interface iface) static virStoragePoolPtr 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 get_nonnull_storage_vol(virConnectPtr conn, remote_nonnull_storage_vol vol) { virStorageVolPtr ret; - ret = virGetStorageVol(conn, vol.pool, vol.name, vol.key); + ret = virGetStorageVol(conn, vol.pool, vol.name, vol.key, + NULL, NULL); return ret; } diff --git a/src/conf/storage_conf.c b/src/conf/storage_conf.c index 9a765d8d53..1c9934c4ea 100644 --- a/src/conf/storage_conf.c +++ b/src/conf/storage_conf.c @@ -1981,7 +1981,8 @@ virStoragePoolList(virConnectPtr conn, if (pools) { if (!(pool = virGetStoragePool(conn, poolobj->def->name, - poolobj->def->uuid))) { + poolobj->def->uuid, + NULL, NULL))) { virStoragePoolObjUnlock(poolobj); goto cleanup; } diff --git a/src/datatypes.c b/src/datatypes.c index ff7c524666..c0ed3a2700 100644 --- a/src/datatypes.c +++ b/src/datatypes.c @@ -379,6 +379,8 @@ virInterfaceDispose(void *obj) * @conn: the hypervisor connection * @name: pointer to the storage pool name * @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, * if yes return a new pointer to it, if no allocate a new structure, @@ -389,7 +391,8 @@ virInterfaceDispose(void *obj) */ virStoragePoolPtr virGetStoragePool(virConnectPtr conn, const char *name, - const unsigned char *uuid) + const unsigned char *uuid, + void *privateData, virFreeCallback freeFunc) { virStoragePoolPtr ret = NULL; @@ -412,6 +415,10 @@ virGetStoragePool(virConnectPtr conn, const char *name, ret->conn = virObjectRef(conn); memcpy(&(ret->uuid[0]), uuid, VIR_UUID_BUFLEN); + /* set the driver specific data */ + ret->privateData = privateData; + ret->privateDataFreeFunc = freeFunc; + return ret; no_memory: @@ -442,6 +449,10 @@ virStoragePoolDispose(void *obj) virUUIDFormat(pool->uuid, uuidstr); VIR_DEBUG("release pool %p %s %s", pool, pool->name, uuidstr); + if (pool->privateDataFreeFunc) { + pool->privateDataFreeFunc(pool->privateData); + } + VIR_FREE(pool->name); virObjectUnref(pool->conn); } @@ -453,6 +464,8 @@ virStoragePoolDispose(void *obj) * @pool: pool owning the volume * @name: pointer to the storage vol name * @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, * if yes return a new pointer to it, if no allocate a new structure, @@ -463,7 +476,7 @@ virStoragePoolDispose(void *obj) */ virStorageVolPtr virGetStorageVol(virConnectPtr conn, const char *pool, const char *name, - const char *key) + const char *key, void *privateData, virFreeCallback freeFunc) { virStorageVolPtr ret = NULL; @@ -489,6 +502,10 @@ virGetStorageVol(virConnectPtr conn, const char *pool, const char *name, ret->conn = virObjectRef(conn); + /* set driver specific data */ + ret->privateData = privateData; + ret->privateDataFreeFunc = freeFunc; + return ret; no_memory: @@ -516,6 +533,10 @@ virStorageVolDispose(void *obj) virStorageVolPtr vol = obj; VIR_DEBUG("release vol %p %s", vol, vol->name); + if (vol->privateDataFreeFunc) { + vol->privateDataFreeFunc(vol->privateData); + } + VIR_FREE(vol->key); VIR_FREE(vol->name); VIR_FREE(vol->pool); diff --git a/src/datatypes.h b/src/datatypes.h index e4c8262ac9..55f97ed7a1 100644 --- a/src/datatypes.h +++ b/src/datatypes.h @@ -196,6 +196,13 @@ struct _virStoragePool { virConnectPtr conn; /* pointer back to the connection */ char *name; /* the storage pool external name */ 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 *name; /* the storage vol external name */ 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; }; /** @@ -293,12 +307,16 @@ virInterfacePtr virGetInterface(virConnectPtr conn, const char *name, const char *mac); virStoragePoolPtr virGetStoragePool(virConnectPtr conn, - const char *name, - const unsigned char *uuid); + const char *name, + const unsigned char *uuid, + void *privateData, + virFreeCallback freeFunc); virStorageVolPtr virGetStorageVol(virConnectPtr conn, const char *pool, const char *name, - const char *key); + const char *key, + void *privateData, + virFreeCallback freeFunc); virNodeDevicePtr virGetNodeDevice(virConnectPtr conn, const char *name); virSecretPtr virGetSecret(virConnectPtr conn, diff --git a/src/esx/esx_storage_driver.c b/src/esx/esx_storage_driver.c index 08d5ab1b6a..53a1e24229 100644 --- a/src/esx/esx_storage_driver.c +++ b/src/esx/esx_storage_driver.c @@ -282,7 +282,7 @@ esxStoragePoolLookupByName(virConnectPtr conn, const char *name) md5_buffer(hostMount->mountInfo->path, strlen(hostMount->mountInfo->path), md5); - pool = virGetStoragePool(conn, name, md5); + pool = virGetStoragePool(conn, name, md5, NULL, NULL); cleanup: esxVI_ObjectContent_Free(&datastore); @@ -348,7 +348,7 @@ esxStoragePoolLookupByUUID(virConnectPtr conn, const unsigned char *uuid) goto cleanup; } - pool = virGetStoragePool(conn, name, uuid); + pool = virGetStoragePool(conn, name, uuid, NULL, NULL); cleanup: esxVI_String_Free(&propertyNameList); @@ -766,7 +766,7 @@ esxStorageVolumeLookupByName(virStoragePoolPtr pool, const char *name) goto cleanup; } - volume = virGetStorageVol(pool->conn, pool->name, name, key); + volume = virGetStorageVol(pool->conn, pool->name, name, key, NULL, NULL); cleanup: VIR_FREE(datastorePath); @@ -800,7 +800,7 @@ esxStorageVolumeLookupByPath(virConnectPtr conn, const char *path) goto cleanup; } - volume = virGetStorageVol(conn, datastoreName, directoryAndFileName, key); + volume = virGetStorageVol(conn, datastoreName, directoryAndFileName, key, NULL, NULL); cleanup: VIR_FREE(datastoreName); @@ -934,7 +934,7 @@ esxStorageVolumeLookupByKey(virConnectPtr conn, const char *key) if (STREQ(key, key_candidate)) { /* Found matching UUID */ volume = virGetStorageVol(conn, datastoreName, - volumeName, key); + volumeName, key, NULL, NULL); goto cleanup; } } @@ -1155,7 +1155,7 @@ esxStorageVolumeCreateXML(virStoragePoolPtr pool, const char *xmldesc, goto cleanup; } - volume = virGetStorageVol(pool->conn, pool->name, def->name, key); + volume = virGetStorageVol(pool->conn, pool->name, def->name, key, NULL, NULL); cleanup: if (virtualDiskSpec != NULL) { @@ -1357,7 +1357,7 @@ esxStorageVolumeCreateXMLFrom(virStoragePoolPtr pool, const char *xmldesc, goto cleanup; } - volume = virGetStorageVol(pool->conn, pool->name, def->name, key); + volume = virGetStorageVol(pool->conn, pool->name, def->name, key, NULL, NULL); cleanup: VIR_FREE(sourceDatastorePath); diff --git a/src/parallels/parallels_storage.c b/src/parallels/parallels_storage.c index 71f3f892f2..8d4e2c6e8b 100644 --- a/src/parallels/parallels_storage.c +++ b/src/parallels/parallels_storage.c @@ -350,7 +350,8 @@ parallelsStoragePoolLookupByUUID(virConnectPtr conn, const unsigned char *uuid) goto cleanup; } - ret = virGetStoragePool(conn, pool->def->name, pool->def->uuid); + ret = virGetStoragePool(conn, pool->def->name, pool->def->uuid, + NULL, NULL); cleanup: if (pool) @@ -374,7 +375,8 @@ parallelsStoragePoolLookupByName(virConnectPtr conn, const char *name) goto cleanup; } - ret = virGetStoragePool(conn, pool->def->name, pool->def->uuid); + ret = virGetStoragePool(conn, pool->def->name, pool->def->uuid, + NULL, NULL); cleanup: if (pool) @@ -459,7 +461,8 @@ parallelsStoragePoolDefine(virConnectPtr conn, goto cleanup; } - ret = virGetStoragePool(conn, pool->def->name, pool->def->uuid); + ret = virGetStoragePool(conn, pool->def->name, pool->def->uuid, + NULL, NULL); cleanup: virStoragePoolDefFree(def); @@ -831,7 +834,8 @@ parallelsStorageVolumeLookupByName(virStoragePoolPtr pool, } ret = virGetStorageVol(pool->conn, privpool->def->name, - privvol->name, privvol->key); + privvol->name, privvol->key, + NULL, NULL); cleanup: if (privpool) @@ -857,7 +861,8 @@ parallelsStorageVolumeLookupByKey(virConnectPtr conn, const char *key) if (privvol) { ret = virGetStorageVol(conn, privconn->pools.objs[i]->def->name, - privvol->name, privvol->key); + privvol->name, privvol->key, + NULL, NULL); virStoragePoolObjUnlock(privconn->pools.objs[i]); break; } @@ -889,7 +894,8 @@ parallelsStorageVolumeLookupByPathLocked(virConnectPtr conn, const char *path) if (privvol) { ret = virGetStorageVol(conn, privconn->pools.objs[i]->def->name, - privvol->name, privvol->key); + privvol->name, privvol->key, + NULL, NULL); virStoragePoolObjUnlock(privconn->pools.objs[i]); break; } @@ -1026,7 +1032,8 @@ parallelsStorageVolumeCreateXML(virStoragePoolPtr pool, goto cleanup; ret = virGetStorageVol(pool->conn, privpool->def->name, - privvol->name, privvol->key); + privvol->name, privvol->key, + NULL, NULL); cleanup: if (privpool) virStoragePoolObjUnlock(privpool); @@ -1115,7 +1122,8 @@ parallelsStorageVolumeCreateXMLFrom(virStoragePoolPtr pool, privpool->volumes.objs[privpool->volumes.count++] = privvol; ret = virGetStorageVol(pool->conn, privpool->def->name, - privvol->name, privvol->key); + privvol->name, privvol->key, + NULL, NULL); privvol = NULL; cleanup: diff --git a/src/phyp/phyp_driver.c b/src/phyp/phyp_driver.c index e8cef4fa7d..63017f43ec 100644 --- a/src/phyp/phyp_driver.c +++ b/src/phyp/phyp_driver.c @@ -2021,7 +2021,7 @@ phypVolumeLookupByName(virStoragePoolPtr pool, const char *volname) if (key == NULL) return NULL; - vol = virGetStorageVol(pool->conn, pool->name, volname, key); + vol = virGetStorageVol(pool->conn, pool->name, volname, key, NULL, NULL); VIR_FREE(key); @@ -2111,7 +2111,7 @@ phypStorageVolCreateXML(virStoragePoolPtr pool, if ((vol = virGetStorageVol(pool->conn, pool->name, voldef->name, - key)) == NULL) + key, NULL, NULL)) == NULL) goto err; VIR_FREE(key); @@ -2192,7 +2192,7 @@ phypVolumeLookupByPath(virConnectPtr conn, const char *volname) if (key == NULL) goto cleanup; - vol = virGetStorageVol(conn, ret, volname, key); + vol = virGetStorageVol(conn, ret, volname, key, NULL, NULL); cleanup: VIR_FREE(ret); @@ -2250,7 +2250,7 @@ phypStoragePoolLookupByName(virConnectPtr conn, const char *name) if (phypGetStoragePoolUUID(conn, uuid, name) == -1) return NULL; - return virGetStoragePool(conn, name, uuid); + return virGetStoragePool(conn, name, uuid, NULL, NULL); } static char * @@ -2684,7 +2684,7 @@ phypGetStoragePoolLookUpByUUID(virConnectPtr conn, continue; 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(pools); @@ -2728,7 +2728,7 @@ phypStoragePoolCreateXML(virConnectPtr conn, goto err; } - if ((sp = virGetStoragePool(conn, def->name, def->uuid)) == NULL) + if ((sp = virGetStoragePool(conn, def->name, def->uuid, NULL, NULL)) == NULL) goto err; if (phypBuildStoragePool(conn, def) == -1) diff --git a/src/remote/remote_driver.c b/src/remote/remote_driver.c index 62b77296da..ec33698e5d 100644 --- a/src/remote/remote_driver.c +++ b/src/remote/remote_driver.c @@ -5863,13 +5863,15 @@ get_nonnull_interface(virConnectPtr conn, remote_nonnull_interface iface) static virStoragePoolPtr 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 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 diff --git a/src/storage/storage_driver.c b/src/storage/storage_driver.c index faca2a2189..2e33b803ba 100644 --- a/src/storage/storage_driver.c +++ b/src/storage/storage_driver.c @@ -273,7 +273,8 @@ storagePoolLookupByUUID(virConnectPtr conn, goto cleanup; } - ret = virGetStoragePool(conn, pool->def->name, pool->def->uuid); + ret = virGetStoragePool(conn, pool->def->name, pool->def->uuid, + NULL, NULL); cleanup: if (pool) @@ -298,7 +299,8 @@ storagePoolLookupByName(virConnectPtr conn, goto cleanup; } - ret = virGetStoragePool(conn, pool->def->name, pool->def->uuid); + ret = virGetStoragePool(conn, pool->def->name, pool->def->uuid, + NULL, NULL); cleanup: if (pool) @@ -555,7 +557,8 @@ storagePoolCreate(virConnectPtr conn, VIR_INFO("Creating storage pool '%s'", pool->def->name); pool->active = 1; - ret = virGetStoragePool(conn, pool->def->name, pool->def->uuid); + ret = virGetStoragePool(conn, pool->def->name, pool->def->uuid, + NULL, NULL); cleanup: virStoragePoolDefFree(def); @@ -601,7 +604,8 @@ storagePoolDefine(virConnectPtr conn, def = NULL; 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: virStoragePoolDefFree(def); @@ -1202,7 +1206,8 @@ storagePoolListAllVolumes(virStoragePoolPtr pool, for (i = 0 ; i < obj->volumes.count; i++) { if (!(vol = virGetStorageVol(pool->conn, obj->def->name, obj->volumes.objs[i]->name, - obj->volumes.objs[i]->key))) + obj->volumes.objs[i]->key, + NULL, NULL))) goto cleanup; tmp_vols[nvols++] = vol; } @@ -1258,7 +1263,8 @@ storageVolumeLookupByName(virStoragePoolPtr obj, 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: if (pool) @@ -1285,7 +1291,8 @@ storageVolumeLookupByKey(virConnectPtr conn, ret = virGetStorageVol(conn, driver->pools.objs[i]->def->name, vol->name, - vol->key); + vol->key, + NULL, NULL); } virStoragePoolObjUnlock(driver->pools.objs[i]); } @@ -1338,7 +1345,8 @@ storageVolumeLookupByPath(virConnectPtr conn, ret = virGetStorageVol(conn, driver->pools.objs[i]->def->name, vol->name, - vol->key); + vol->key, + NULL, NULL); } virStoragePoolObjUnlock(driver->pools.objs[i]); } @@ -1415,7 +1423,7 @@ storageVolumeCreateXML(virStoragePoolPtr obj, pool->volumes.objs[pool->volumes.count++] = voldef; volobj = virGetStorageVol(obj->conn, pool->def->name, voldef->name, - voldef->key); + voldef->key, NULL, NULL); if (!volobj) { pool->volumes.count--; goto cleanup; @@ -1587,7 +1595,7 @@ storageVolumeCreateXMLFrom(virStoragePoolPtr obj, pool->volumes.objs[pool->volumes.count++] = newvol; volobj = virGetStorageVol(obj->conn, pool->def->name, newvol->name, - newvol->key); + newvol->key, NULL, NULL); /* Drop the pool lock during volume allocation */ pool->asyncjobs++; diff --git a/src/test/test_driver.c b/src/test/test_driver.c index 9e4d9f2b2f..6ca59e279e 100644 --- a/src/test/test_driver.c +++ b/src/test/test_driver.c @@ -3885,7 +3885,8 @@ testStoragePoolLookupByUUID(virConnectPtr conn, goto cleanup; } - ret = virGetStoragePool(conn, pool->def->name, pool->def->uuid); + ret = virGetStoragePool(conn, pool->def->name, pool->def->uuid, + NULL, NULL); cleanup: if (pool) @@ -3909,7 +3910,8 @@ testStoragePoolLookupByName(virConnectPtr conn, goto cleanup; } - ret = virGetStoragePool(conn, pool->def->name, pool->def->uuid); + ret = virGetStoragePool(conn, pool->def->name, pool->def->uuid, + NULL, NULL); cleanup: if (pool) @@ -4201,7 +4203,8 @@ testStoragePoolCreate(virConnectPtr conn, } pool->active = 1; - ret = virGetStoragePool(conn, pool->def->name, pool->def->uuid); + ret = virGetStoragePool(conn, pool->def->name, pool->def->uuid, + NULL, NULL); cleanup: virStoragePoolDefFree(def); @@ -4241,7 +4244,8 @@ testStoragePoolDefine(virConnectPtr conn, goto cleanup; } - ret = virGetStoragePool(conn, pool->def->name, pool->def->uuid); + ret = virGetStoragePool(conn, pool->def->name, pool->def->uuid, + NULL, NULL); cleanup: virStoragePoolDefFree(def); @@ -4668,7 +4672,8 @@ testStoragePoolListAllVolumes(virStoragePoolPtr obj, for (i = 0 ; i < pool->volumes.count; i++) { if (!(vol = virGetStorageVol(obj->conn, pool->def->name, pool->volumes.objs[i]->name, - pool->volumes.objs[i]->key))) + pool->volumes.objs[i]->key, + NULL, NULL))) goto cleanup; tmp_vols[nvols++] = vol; } @@ -4725,7 +4730,8 @@ testStorageVolumeLookupByName(virStoragePoolPtr pool, } ret = virGetStorageVol(pool->conn, privpool->def->name, - privvol->name, privvol->key); + privvol->name, privvol->key, + NULL, NULL); cleanup: if (privpool) @@ -4752,7 +4758,8 @@ testStorageVolumeLookupByKey(virConnectPtr conn, ret = virGetStorageVol(conn, privconn->pools.objs[i]->def->name, privvol->name, - privvol->key); + privvol->key, + NULL, NULL); virStoragePoolObjUnlock(privconn->pools.objs[i]); break; } @@ -4786,7 +4793,8 @@ testStorageVolumeLookupByPath(virConnectPtr conn, ret = virGetStorageVol(conn, privconn->pools.objs[i]->def->name, privvol->name, - privvol->key); + privvol->key, + NULL, NULL); virStoragePoolObjUnlock(privconn->pools.objs[i]); break; } @@ -4875,7 +4883,8 @@ testStorageVolumeCreateXML(virStoragePoolPtr pool, privpool->volumes.objs[privpool->volumes.count++] = privvol; ret = virGetStorageVol(pool->conn, privpool->def->name, - privvol->name, privvol->key); + privvol->name, privvol->key, + NULL, NULL); privvol = NULL; cleanup: @@ -4969,7 +4978,8 @@ testStorageVolumeCreateXMLFrom(virStoragePoolPtr pool, privpool->volumes.objs[privpool->volumes.count++] = privvol; ret = virGetStorageVol(pool->conn, privpool->def->name, - privvol->name, privvol->key); + privvol->name, privvol->key, + NULL, NULL); privvol = NULL; cleanup: diff --git a/src/vbox/vbox_tmpl.c b/src/vbox/vbox_tmpl.c index bcffb2f6b4..f9fa442d1b 100644 --- a/src/vbox/vbox_tmpl.c +++ b/src/vbox/vbox_tmpl.c @@ -8321,7 +8321,7 @@ static virStoragePoolPtr vboxStoragePoolLookupByName(virConnectPtr conn, const c ignore_value(virUUIDParse(uuidstr, uuid)); - ret = virGetStoragePool(conn, name, uuid); + ret = virGetStoragePool(conn, name, uuid, NULL, NULL); } return ret; @@ -8450,7 +8450,8 @@ static virStorageVolPtr vboxStorageVolLookupByName(virStoragePoolPtr pool, const vboxIIDToUUID(&hddIID, uuid); 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("Storage Volume Name: %s", name); @@ -8511,7 +8512,8 @@ static virStorageVolPtr vboxStorageVolLookupByKey(virConnectPtr conn, const char if (hddNameUtf8) { 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"); } else { /* 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 */ 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 Name: %s", hddNameUtf8); @@ -8683,7 +8686,8 @@ static virStorageVolPtr vboxStorageVolCreateXML(virStoragePoolPtr pool, vboxIIDToUUID(&hddIID, uuid); 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);