mirror of
https://github.com/libvirt/libvirt.git
synced 2025-02-25 18:55:26 -06:00
storage: volume: Rework lookup of volume objects
Add a helper to do all the lookup steps and remove a ton of duplicated code.
This commit is contained in:
parent
30d99eb534
commit
f332ffc0dc
@ -1520,44 +1520,67 @@ storageVolDeleteInternal(virStorageVolPtr obj,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static virStorageVolDefPtr
|
||||||
|
virStorageVolDefFromVol(virStorageVolPtr obj,
|
||||||
|
virStoragePoolObjPtr *pool,
|
||||||
|
virStorageBackendPtr *backend)
|
||||||
|
{
|
||||||
|
virStorageDriverStatePtr driver = obj->conn->storagePrivateData;
|
||||||
|
virStorageVolDefPtr vol = NULL;
|
||||||
|
|
||||||
|
*pool = NULL;
|
||||||
|
|
||||||
|
storageDriverLock(driver);
|
||||||
|
*pool = virStoragePoolObjFindByName(&driver->pools, obj->pool);
|
||||||
|
storageDriverUnlock(driver);
|
||||||
|
|
||||||
|
if (!*pool) {
|
||||||
|
virReportError(VIR_ERR_NO_STORAGE_POOL,
|
||||||
|
_("no storage pool with matching name '%s'"),
|
||||||
|
obj->pool);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!virStoragePoolObjIsActive(*pool)) {
|
||||||
|
virReportError(VIR_ERR_OPERATION_INVALID,
|
||||||
|
_("storage pool '%s' is not active"),
|
||||||
|
(*pool)->def->name);
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(vol = virStorageVolDefFindByName(*pool, obj->name))) {
|
||||||
|
virReportError(VIR_ERR_NO_STORAGE_VOL,
|
||||||
|
_("no storage vol with matching name '%s'"),
|
||||||
|
obj->name);
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (backend) {
|
||||||
|
if (!(*backend = virStorageBackendForType((*pool)->def->type)))
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
|
return vol;
|
||||||
|
|
||||||
|
error:
|
||||||
|
virStoragePoolObjUnlock(*pool);
|
||||||
|
*pool = NULL;
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
storageVolDelete(virStorageVolPtr obj,
|
storageVolDelete(virStorageVolPtr obj,
|
||||||
unsigned int flags)
|
unsigned int flags)
|
||||||
{
|
{
|
||||||
virStorageDriverStatePtr driver = obj->conn->storagePrivateData;
|
|
||||||
virStoragePoolObjPtr pool;
|
virStoragePoolObjPtr pool;
|
||||||
virStorageBackendPtr backend;
|
virStorageBackendPtr backend;
|
||||||
virStorageVolDefPtr vol = NULL;
|
virStorageVolDefPtr vol = NULL;
|
||||||
int ret = -1;
|
int ret = -1;
|
||||||
|
|
||||||
storageDriverLock(driver);
|
if (!(vol = virStorageVolDefFromVol(obj, &pool, &backend)))
|
||||||
pool = virStoragePoolObjFindByName(&driver->pools, obj->pool);
|
return -1;
|
||||||
storageDriverUnlock(driver);
|
|
||||||
|
|
||||||
if (!pool) {
|
|
||||||
virReportError(VIR_ERR_NO_STORAGE_POOL,
|
|
||||||
_("no storage pool with matching name '%s'"),
|
|
||||||
obj->pool);
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!virStoragePoolObjIsActive(pool)) {
|
|
||||||
virReportError(VIR_ERR_OPERATION_INVALID,
|
|
||||||
_("storage pool '%s' is not active"), pool->def->name);
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((backend = virStorageBackendForType(pool->def->type)) == NULL)
|
|
||||||
goto cleanup;
|
|
||||||
|
|
||||||
vol = virStorageVolDefFindByName(pool, obj->name);
|
|
||||||
|
|
||||||
if (!vol) {
|
|
||||||
virReportError(VIR_ERR_NO_STORAGE_VOL,
|
|
||||||
_("no storage vol with matching name '%s'"),
|
|
||||||
obj->name);
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (virStorageVolDeleteEnsureACL(obj->conn, pool->def, vol) < 0)
|
if (virStorageVolDeleteEnsureACL(obj->conn, pool->def, vol) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
@ -1582,8 +1605,7 @@ storageVolDelete(virStorageVolPtr obj,
|
|||||||
ret = 0;
|
ret = 0;
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
if (pool)
|
virStoragePoolObjUnlock(pool);
|
||||||
virStoragePoolObjUnlock(pool);
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1898,38 +1920,14 @@ storageVolDownload(virStorageVolPtr obj,
|
|||||||
unsigned long long length,
|
unsigned long long length,
|
||||||
unsigned int flags)
|
unsigned int flags)
|
||||||
{
|
{
|
||||||
virStorageDriverStatePtr driver = obj->conn->storagePrivateData;
|
|
||||||
virStoragePoolObjPtr pool = NULL;
|
virStoragePoolObjPtr pool = NULL;
|
||||||
virStorageVolDefPtr vol = NULL;
|
virStorageVolDefPtr vol = NULL;
|
||||||
int ret = -1;
|
int ret = -1;
|
||||||
|
|
||||||
virCheckFlags(0, -1);
|
virCheckFlags(0, -1);
|
||||||
|
|
||||||
storageDriverLock(driver);
|
if (!(vol = virStorageVolDefFromVol(obj, &pool, NULL)))
|
||||||
pool = virStoragePoolObjFindByName(&driver->pools, obj->pool);
|
return -1;
|
||||||
storageDriverUnlock(driver);
|
|
||||||
|
|
||||||
if (!pool) {
|
|
||||||
virReportError(VIR_ERR_NO_STORAGE_POOL,
|
|
||||||
_("no storage pool with matching name '%s'"),
|
|
||||||
obj->pool);
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!virStoragePoolObjIsActive(pool)) {
|
|
||||||
virReportError(VIR_ERR_OPERATION_INVALID,
|
|
||||||
_("storage pool '%s' is not active"), pool->def->name);
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
vol = virStorageVolDefFindByName(pool, obj->name);
|
|
||||||
|
|
||||||
if (vol == NULL) {
|
|
||||||
virReportError(VIR_ERR_NO_STORAGE_VOL,
|
|
||||||
_("no storage vol with matching name '%s'"),
|
|
||||||
obj->name);
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (virStorageVolDownloadEnsureACL(obj->conn, pool->def, vol) < 0)
|
if (virStorageVolDownloadEnsureACL(obj->conn, pool->def, vol) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
@ -1950,8 +1948,7 @@ storageVolDownload(virStorageVolPtr obj,
|
|||||||
ret = 0;
|
ret = 0;
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
if (pool)
|
virStoragePoolObjUnlock(pool);
|
||||||
virStoragePoolObjUnlock(pool);
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -1964,38 +1961,14 @@ storageVolUpload(virStorageVolPtr obj,
|
|||||||
unsigned long long length,
|
unsigned long long length,
|
||||||
unsigned int flags)
|
unsigned int flags)
|
||||||
{
|
{
|
||||||
virStorageDriverStatePtr driver = obj->conn->storagePrivateData;
|
|
||||||
virStoragePoolObjPtr pool = NULL;
|
virStoragePoolObjPtr pool = NULL;
|
||||||
virStorageVolDefPtr vol = NULL;
|
virStorageVolDefPtr vol = NULL;
|
||||||
int ret = -1;
|
int ret = -1;
|
||||||
|
|
||||||
virCheckFlags(0, -1);
|
virCheckFlags(0, -1);
|
||||||
|
|
||||||
storageDriverLock(driver);
|
if (!(vol = virStorageVolDefFromVol(obj, &pool, NULL)))
|
||||||
pool = virStoragePoolObjFindByName(&driver->pools, obj->pool);
|
return -1;
|
||||||
storageDriverUnlock(driver);
|
|
||||||
|
|
||||||
if (!pool) {
|
|
||||||
virReportError(VIR_ERR_NO_STORAGE_POOL,
|
|
||||||
_("no storage pool with matching name '%s'"),
|
|
||||||
obj->pool);
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!virStoragePoolObjIsActive(pool)) {
|
|
||||||
virReportError(VIR_ERR_OPERATION_INVALID,
|
|
||||||
_("storage pool '%s' is not active"), pool->def->name);
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
vol = virStorageVolDefFindByName(pool, obj->name);
|
|
||||||
|
|
||||||
if (vol == NULL) {
|
|
||||||
virReportError(VIR_ERR_NO_STORAGE_VOL,
|
|
||||||
_("no storage vol with matching name '%s'"),
|
|
||||||
obj->name);
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (virStorageVolUploadEnsureACL(obj->conn, pool->def, vol) < 0)
|
if (virStorageVolUploadEnsureACL(obj->conn, pool->def, vol) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
@ -2044,8 +2017,7 @@ storageVolUpload(virStorageVolPtr obj,
|
|||||||
ret = 0;
|
ret = 0;
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
if (pool)
|
virStoragePoolObjUnlock(pool);
|
||||||
virStoragePoolObjUnlock(pool);
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -2055,7 +2027,6 @@ storageVolResize(virStorageVolPtr obj,
|
|||||||
unsigned long long capacity,
|
unsigned long long capacity,
|
||||||
unsigned int flags)
|
unsigned int flags)
|
||||||
{
|
{
|
||||||
virStorageDriverStatePtr driver = obj->conn->storagePrivateData;
|
|
||||||
virStorageBackendPtr backend;
|
virStorageBackendPtr backend;
|
||||||
virStoragePoolObjPtr pool = NULL;
|
virStoragePoolObjPtr pool = NULL;
|
||||||
virStorageVolDefPtr vol = NULL;
|
virStorageVolDefPtr vol = NULL;
|
||||||
@ -2066,34 +2037,8 @@ storageVolResize(virStorageVolPtr obj,
|
|||||||
VIR_STORAGE_VOL_RESIZE_DELTA |
|
VIR_STORAGE_VOL_RESIZE_DELTA |
|
||||||
VIR_STORAGE_VOL_RESIZE_SHRINK, -1);
|
VIR_STORAGE_VOL_RESIZE_SHRINK, -1);
|
||||||
|
|
||||||
storageDriverLock(driver);
|
if (!(vol = virStorageVolDefFromVol(obj, &pool, &backend)))
|
||||||
pool = virStoragePoolObjFindByName(&driver->pools, obj->pool);
|
return -1;
|
||||||
storageDriverUnlock(driver);
|
|
||||||
|
|
||||||
if (!pool) {
|
|
||||||
virReportError(VIR_ERR_NO_STORAGE_POOL,
|
|
||||||
_("no storage pool with matching name '%s'"),
|
|
||||||
obj->pool);
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!virStoragePoolObjIsActive(pool)) {
|
|
||||||
virReportError(VIR_ERR_OPERATION_INVALID,
|
|
||||||
_("storage pool '%s' is not active"), pool->def->name);
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((backend = virStorageBackendForType(pool->def->type)) == NULL)
|
|
||||||
goto cleanup;
|
|
||||||
|
|
||||||
vol = virStorageVolDefFindByName(pool, obj->name);
|
|
||||||
|
|
||||||
if (vol == NULL) {
|
|
||||||
virReportError(VIR_ERR_NO_STORAGE_VOL,
|
|
||||||
_("no storage vol with matching name '%s'"),
|
|
||||||
obj->name);
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (virStorageVolResizeEnsureACL(obj->conn, pool->def, vol) < 0)
|
if (virStorageVolResizeEnsureACL(obj->conn, pool->def, vol) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
@ -2161,8 +2106,7 @@ storageVolResize(virStorageVolPtr obj,
|
|||||||
ret = 0;
|
ret = 0;
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
if (pool)
|
virStoragePoolObjUnlock(pool);
|
||||||
virStoragePoolObjUnlock(pool);
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -2369,7 +2313,6 @@ storageVolWipePattern(virStorageVolPtr obj,
|
|||||||
unsigned int algorithm,
|
unsigned int algorithm,
|
||||||
unsigned int flags)
|
unsigned int flags)
|
||||||
{
|
{
|
||||||
virStorageDriverStatePtr driver = obj->conn->storagePrivateData;
|
|
||||||
virStoragePoolObjPtr pool = NULL;
|
virStoragePoolObjPtr pool = NULL;
|
||||||
virStorageVolDefPtr vol = NULL;
|
virStorageVolDefPtr vol = NULL;
|
||||||
int ret = -1;
|
int ret = -1;
|
||||||
@ -2383,31 +2326,9 @@ storageVolWipePattern(virStorageVolPtr obj,
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
storageDriverLock(driver);
|
if (!(vol = virStorageVolDefFromVol(obj, &pool, NULL)))
|
||||||
pool = virStoragePoolObjFindByName(&driver->pools, obj->pool);
|
return -1;
|
||||||
storageDriverUnlock(driver);
|
|
||||||
|
|
||||||
if (!pool) {
|
|
||||||
virReportError(VIR_ERR_NO_STORAGE_POOL,
|
|
||||||
_("no storage pool with matching name '%s'"),
|
|
||||||
obj->pool);
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!virStoragePoolObjIsActive(pool)) {
|
|
||||||
virReportError(VIR_ERR_OPERATION_INVALID,
|
|
||||||
_("storage pool '%s' is not active"), pool->def->name);
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
vol = virStorageVolDefFindByName(pool, obj->name);
|
|
||||||
|
|
||||||
if (vol == NULL) {
|
|
||||||
virReportError(VIR_ERR_NO_STORAGE_VOL,
|
|
||||||
_("no storage vol with matching name '%s'"),
|
|
||||||
obj->name);
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (virStorageVolWipePatternEnsureACL(obj->conn, pool->def, vol) < 0)
|
if (virStorageVolWipePatternEnsureACL(obj->conn, pool->def, vol) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
@ -2433,12 +2354,9 @@ storageVolWipePattern(virStorageVolPtr obj,
|
|||||||
ret = 0;
|
ret = 0;
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
if (pool) {
|
virStoragePoolObjUnlock(pool);
|
||||||
virStoragePoolObjUnlock(pool);
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
@ -2453,44 +2371,17 @@ static int
|
|||||||
storageVolGetInfo(virStorageVolPtr obj,
|
storageVolGetInfo(virStorageVolPtr obj,
|
||||||
virStorageVolInfoPtr info)
|
virStorageVolInfoPtr info)
|
||||||
{
|
{
|
||||||
virStorageDriverStatePtr driver = obj->conn->storagePrivateData;
|
|
||||||
virStoragePoolObjPtr pool;
|
virStoragePoolObjPtr pool;
|
||||||
virStorageBackendPtr backend;
|
virStorageBackendPtr backend;
|
||||||
virStorageVolDefPtr vol;
|
virStorageVolDefPtr vol;
|
||||||
int ret = -1;
|
int ret = -1;
|
||||||
|
|
||||||
storageDriverLock(driver);
|
if (!(vol = virStorageVolDefFromVol(obj, &pool, &backend)))
|
||||||
pool = virStoragePoolObjFindByName(&driver->pools, obj->pool);
|
return -1;
|
||||||
storageDriverUnlock(driver);
|
|
||||||
|
|
||||||
if (!pool) {
|
|
||||||
virReportError(VIR_ERR_NO_STORAGE_POOL,
|
|
||||||
_("no storage pool with matching name '%s'"),
|
|
||||||
obj->pool);
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!virStoragePoolObjIsActive(pool)) {
|
|
||||||
virReportError(VIR_ERR_OPERATION_INVALID,
|
|
||||||
_("storage pool '%s' is not active"), pool->def->name);
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
vol = virStorageVolDefFindByName(pool, obj->name);
|
|
||||||
|
|
||||||
if (!vol) {
|
|
||||||
virReportError(VIR_ERR_NO_STORAGE_VOL,
|
|
||||||
_("no storage vol with matching name '%s'"),
|
|
||||||
obj->name);
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (virStorageVolGetInfoEnsureACL(obj->conn, pool->def, vol) < 0)
|
if (virStorageVolGetInfoEnsureACL(obj->conn, pool->def, vol) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
if ((backend = virStorageBackendForType(pool->def->type)) == NULL)
|
|
||||||
goto cleanup;
|
|
||||||
|
|
||||||
if (backend->refreshVol &&
|
if (backend->refreshVol &&
|
||||||
backend->refreshVol(obj->conn, pool, vol) < 0)
|
backend->refreshVol(obj->conn, pool, vol) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
@ -2502,8 +2393,7 @@ storageVolGetInfo(virStorageVolPtr obj,
|
|||||||
ret = 0;
|
ret = 0;
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
if (pool)
|
virStoragePoolObjUnlock(pool);
|
||||||
virStoragePoolObjUnlock(pool);
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2511,7 +2401,6 @@ static char *
|
|||||||
storageVolGetXMLDesc(virStorageVolPtr obj,
|
storageVolGetXMLDesc(virStorageVolPtr obj,
|
||||||
unsigned int flags)
|
unsigned int flags)
|
||||||
{
|
{
|
||||||
virStorageDriverStatePtr driver = obj->conn->storagePrivateData;
|
|
||||||
virStoragePoolObjPtr pool;
|
virStoragePoolObjPtr pool;
|
||||||
virStorageBackendPtr backend;
|
virStorageBackendPtr backend;
|
||||||
virStorageVolDefPtr vol;
|
virStorageVolDefPtr vol;
|
||||||
@ -2519,38 +2408,12 @@ storageVolGetXMLDesc(virStorageVolPtr obj,
|
|||||||
|
|
||||||
virCheckFlags(0, NULL);
|
virCheckFlags(0, NULL);
|
||||||
|
|
||||||
storageDriverLock(driver);
|
if (!(vol = virStorageVolDefFromVol(obj, &pool, &backend)))
|
||||||
pool = virStoragePoolObjFindByName(&driver->pools, obj->pool);
|
return NULL;
|
||||||
storageDriverUnlock(driver);
|
|
||||||
|
|
||||||
if (!pool) {
|
|
||||||
virReportError(VIR_ERR_NO_STORAGE_POOL,
|
|
||||||
_("no storage pool with matching name '%s'"),
|
|
||||||
obj->pool);
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!virStoragePoolObjIsActive(pool)) {
|
|
||||||
virReportError(VIR_ERR_OPERATION_INVALID,
|
|
||||||
_("storage pool '%s' is not active"), pool->def->name);
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
vol = virStorageVolDefFindByName(pool, obj->name);
|
|
||||||
|
|
||||||
if (!vol) {
|
|
||||||
virReportError(VIR_ERR_NO_STORAGE_VOL,
|
|
||||||
_("no storage vol with matching name '%s'"),
|
|
||||||
obj->name);
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (virStorageVolGetXMLDescEnsureACL(obj->conn, pool->def, vol) < 0)
|
if (virStorageVolGetXMLDescEnsureACL(obj->conn, pool->def, vol) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
if ((backend = virStorageBackendForType(pool->def->type)) == NULL)
|
|
||||||
goto cleanup;
|
|
||||||
|
|
||||||
if (backend->refreshVol &&
|
if (backend->refreshVol &&
|
||||||
backend->refreshVol(obj->conn, pool, vol) < 0)
|
backend->refreshVol(obj->conn, pool, vol) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
@ -2558,8 +2421,7 @@ storageVolGetXMLDesc(virStorageVolPtr obj,
|
|||||||
ret = virStorageVolDefFormat(pool->def, vol);
|
ret = virStorageVolDefFormat(pool->def, vol);
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
if (pool)
|
virStoragePoolObjUnlock(pool);
|
||||||
virStoragePoolObjUnlock(pool);
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -2567,35 +2429,12 @@ storageVolGetXMLDesc(virStorageVolPtr obj,
|
|||||||
static char *
|
static char *
|
||||||
storageVolGetPath(virStorageVolPtr obj)
|
storageVolGetPath(virStorageVolPtr obj)
|
||||||
{
|
{
|
||||||
virStorageDriverStatePtr driver = obj->conn->storagePrivateData;
|
|
||||||
virStoragePoolObjPtr pool;
|
virStoragePoolObjPtr pool;
|
||||||
virStorageVolDefPtr vol;
|
virStorageVolDefPtr vol;
|
||||||
char *ret = NULL;
|
char *ret = NULL;
|
||||||
|
|
||||||
storageDriverLock(driver);
|
if (!(vol = virStorageVolDefFromVol(obj, &pool, NULL)))
|
||||||
pool = virStoragePoolObjFindByName(&driver->pools, obj->pool);
|
return NULL;
|
||||||
storageDriverUnlock(driver);
|
|
||||||
if (!pool) {
|
|
||||||
virReportError(VIR_ERR_NO_STORAGE_POOL,
|
|
||||||
_("no storage pool with matching name '%s'"),
|
|
||||||
obj->pool);
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!virStoragePoolObjIsActive(pool)) {
|
|
||||||
virReportError(VIR_ERR_OPERATION_INVALID,
|
|
||||||
_("storage pool '%s' is not active"), pool->def->name);
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
vol = virStorageVolDefFindByName(pool, obj->name);
|
|
||||||
|
|
||||||
if (!vol) {
|
|
||||||
virReportError(VIR_ERR_NO_STORAGE_VOL,
|
|
||||||
_("no storage vol with matching name '%s'"),
|
|
||||||
obj->name);
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (virStorageVolGetPathEnsureACL(obj->conn, pool->def, vol) < 0)
|
if (virStorageVolGetPathEnsureACL(obj->conn, pool->def, vol) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
@ -2603,8 +2442,7 @@ storageVolGetPath(virStorageVolPtr obj)
|
|||||||
ignore_value(VIR_STRDUP(ret, vol->target.path));
|
ignore_value(VIR_STRDUP(ret, vol->target.path));
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
if (pool)
|
virStoragePoolObjUnlock(pool);
|
||||||
virStoragePoolObjUnlock(pool);
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user