storage: Extract common code to retrieve driver backend for support check

The 'file access' module of the storage driver has few feature checks to
determine whether libvirt supports given storage driver method. The code
to retrieve the driver struct needed for the check is the same so it can
be extracted.
This commit is contained in:
Peter Krempa 2017-10-16 13:23:51 +02:00
parent a1e3e8ddbd
commit 8c6b6684a8

View File

@ -44,24 +44,30 @@ virStorageFileIsInitialized(const virStorageSource *src)
}
static virStorageFileBackendPtr
virStorageFileGetBackendForSupportCheck(const virStorageSource *src)
{
int actualType;
if (!src)
return NULL;
if (src->drv)
return src->drv->backend;
actualType = virStorageSourceGetActualType(src);
return virStorageFileBackendForTypeInternal(actualType, src->protocol, false);
}
static bool
virStorageFileSupportsBackingChainTraversal(virStorageSourcePtr src)
{
int actualType;
virStorageFileBackendPtr backend;
if (!src)
if (!(backend = virStorageFileGetBackendForSupportCheck(src)))
return false;
actualType = virStorageSourceGetActualType(src);
if (src->drv) {
backend = src->drv->backend;
} else {
if (!(backend = virStorageFileBackendForTypeInternal(actualType,
src->protocol,
false)))
return false;
}
return backend->storageFileGetUniqueIdentifier &&
backend->storageFileRead &&
@ -80,21 +86,10 @@ virStorageFileSupportsBackingChainTraversal(virStorageSourcePtr src)
bool
virStorageFileSupportsSecurityDriver(const virStorageSource *src)
{
int actualType;
virStorageFileBackendPtr backend;
if (!src)
if (!(backend = virStorageFileGetBackendForSupportCheck(src)))
return false;
actualType = virStorageSourceGetActualType(src);
if (src->drv) {
backend = src->drv->backend;
} else {
if (!(backend = virStorageFileBackendForTypeInternal(actualType,
src->protocol,
false)))
return false;
}
return !!backend->storageFileChown;
}