]> xenbits.xensource.com Git - libvirt.git/commitdiff
storage: Extract common code to retrieve driver backend for support check
authorPeter Krempa <pkrempa@redhat.com>
Mon, 16 Oct 2017 11:23:51 +0000 (13:23 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Fri, 3 Nov 2017 08:15:41 +0000 (09:15 +0100)
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.

src/storage/storage_source.c

index 419fa3d43fe1f1653018d321ac8cc0d25a8d8960..e3c5c3285af01bc060f177ac05284257a5aaaac1 100644 (file)
@@ -44,24 +44,30 @@ virStorageFileIsInitialized(const virStorageSource *src)
 }
 
 
-static bool
-virStorageFileSupportsBackingChainTraversal(virStorageSourcePtr src)
+static virStorageFileBackendPtr
+virStorageFileGetBackendForSupportCheck(const virStorageSource *src)
 {
     int actualType;
-    virStorageFileBackendPtr backend;
 
     if (!src)
-        return false;
+        return NULL;
+
+    if (src->drv)
+        return src->drv->backend;
+
     actualType = virStorageSourceGetActualType(src);
 
-    if (src->drv) {
-        backend = src->drv->backend;
-    } else {
-        if (!(backend = virStorageFileBackendForTypeInternal(actualType,
-                                                             src->protocol,
-                                                             false)))
-            return false;
-    }
+    return virStorageFileBackendForTypeInternal(actualType, src->protocol, false);
+}
+
+
+static bool
+virStorageFileSupportsBackingChainTraversal(virStorageSourcePtr src)
+{
+    virStorageFileBackendPtr backend;
+
+    if (!(backend = virStorageFileGetBackendForSupportCheck(src)))
+        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;
 }