[libvirt] [PATCH v2 6/9] storage: Clean up storagePoolCreateXML error processing

John Ferlan jferlan at redhat.com
Wed Mar 28 21:19:30 UTC 2018


Rather than 3 separate, but same 4 lines of code - let's create an
error label to make a common error path. This will help shortly when
the error path changes slightly.

Signed-off-by: John Ferlan <jferlan at redhat.com>
---
 src/storage/storage_driver.c | 27 +++++++++++----------------
 1 file changed, 11 insertions(+), 16 deletions(-)

diff --git a/src/storage/storage_driver.c b/src/storage/storage_driver.c
index d5e38af5a..6276545eb 100644
--- a/src/storage/storage_driver.c
+++ b/src/storage/storage_driver.c
@@ -744,22 +744,14 @@ storagePoolCreateXML(virConnectPtr conn,
 
         if (build_flags ||
             (flags & VIR_STORAGE_POOL_CREATE_WITH_BUILD)) {
-            if (backend->buildPool(obj, build_flags) < 0) {
-                virStoragePoolObjRemove(driver->pools, obj);
-                virObjectUnref(obj);
-                obj = NULL;
-                goto cleanup;
-            }
+            if (backend->buildPool(obj, build_flags) < 0)
+                goto error;
         }
     }
 
     if (backend->startPool &&
-        backend->startPool(obj) < 0) {
-        virStoragePoolObjRemove(driver->pools, obj);
-        virObjectUnref(obj);
-        obj = NULL;
-        goto cleanup;
-    }
+        backend->startPool(obj) < 0)
+        goto error;
 
     stateFile = virFileBuildPath(driver->stateDir, def->name, ".xml");
 
@@ -770,10 +762,7 @@ storagePoolCreateXML(virConnectPtr conn,
             unlink(stateFile);
         if (backend->stopPool)
             backend->stopPool(obj);
-        virStoragePoolObjRemove(driver->pools, obj);
-        virObjectUnref(obj);
-        obj = NULL;
-        goto cleanup;
+        goto error;
     }
 
     event = virStoragePoolEventLifecycleNew(def->name,
@@ -793,6 +782,12 @@ storagePoolCreateXML(virConnectPtr conn,
         virObjectEventStateQueue(driver->storageEventState, event);
     virStoragePoolObjEndAPI(&obj);
     return pool;
+
+ error:
+    virStoragePoolObjRemove(driver->pools, obj);
+    virObjectUnref(obj);
+    obj = NULL;
+    goto cleanup;
 }
 
 static virStoragePoolPtr
-- 
2.13.6




More information about the libvir-list mailing list