[libvirt] [PATCH 2/3] Simplify conditions in virStorageBackendProbeTarget

Ján Tomko jtomko at redhat.com
Thu Jun 5 17:11:14 UTC 2014


Jump out early if no metadata was detected (for directories).
Join the error and cleanup labels.
---
 src/storage/storage_backend_fs.c | 42 +++++++++++++++++-----------------------
 1 file changed, 18 insertions(+), 24 deletions(-)

diff --git a/src/storage/storage_backend_fs.c b/src/storage/storage_backend_fs.c
index 172ef16..133e059 100644
--- a/src/storage/storage_backend_fs.c
+++ b/src/storage/storage_backend_fs.c
@@ -84,27 +84,27 @@ virStorageBackendProbeTarget(virStorageSourcePtr target,
     fd = rc;
 
     if (virStorageBackendUpdateVolTargetInfoFD(target, fd, &sb, true) < 0)
-        goto error;
+        goto cleanup;
 
     if (S_ISDIR(sb.st_mode)) {
         target->format = VIR_STORAGE_FILE_DIR;
-    } else {
-        if (!(meta = virStorageFileGetMetadataFromFD(target->path,
-                                                     fd,
-                                                     VIR_STORAGE_FILE_AUTO,
-                                                     backingStoreFormat)))
-            goto error;
-
-        if (VIR_STRDUP(*backingStore, meta->backingStoreRaw) < 0)
-            goto error;
+        ret = 0;
+        goto cleanup;
     }
 
-    VIR_FORCE_CLOSE(fd);
+    if (!(meta = virStorageFileGetMetadataFromFD(target->path,
+                                                 fd,
+                                                 VIR_STORAGE_FILE_AUTO,
+                                                 backingStoreFormat)))
+        goto cleanup;
+
+    if (VIR_STRDUP(*backingStore, meta->backingStoreRaw) < 0)
+        goto cleanup;
 
     /* Default to success below this point */
     ret = 0;
 
-    if (meta && *backingStore &&
+    if (*backingStore &&
         *backingStoreFormat == VIR_STORAGE_FILE_AUTO &&
         virStorageIsFile(*backingStore)) {
         if ((rc = virStorageFileProbeFormat(*backingStore, -1, -1)) < 0) {
@@ -120,10 +120,10 @@ virStorageBackendProbeTarget(virStorageSourcePtr target,
         }
     }
 
-    if (meta && meta->capacity)
+    if (meta->capacity)
         target->capacity = meta->capacity;
 
-    if (encryption && meta && meta->encryption) {
+    if (encryption && meta->encryption) {
         *encryption = meta->encryption;
         meta->encryption = NULL;
 
@@ -144,23 +144,17 @@ virStorageBackendProbeTarget(virStorageSourcePtr target,
     }
 
     virBitmapFree(target->features);
-    if (meta) {
-        target->features = meta->features;
-        meta->features = NULL;
-    }
+    target->features = meta->features;
+    meta->features = NULL;
 
-    if (meta && meta->compat) {
+    if (meta->compat) {
         VIR_FREE(target->compat);
         target->compat = meta->compat;
         meta->compat = NULL;
     }
 
-    goto cleanup;
-
- error:
-    VIR_FORCE_CLOSE(fd);
-
  cleanup:
+    VIR_FORCE_CLOSE(fd);
     virStorageSourceFree(meta);
     return ret;
 
-- 
1.8.3.2




More information about the libvir-list mailing list