[libvirt] [PATCH 2/9] Parse backingStore before capacity in volume XML

Ján Tomko jtomko at redhat.com
Thu Feb 19 14:59:10 UTC 2015


So we can allow omitting the capacity element if backing store is
present.
---
 src/conf/storage_conf.c | 62 ++++++++++++++++++++++++-------------------------
 1 file changed, 31 insertions(+), 31 deletions(-)

diff --git a/src/conf/storage_conf.c b/src/conf/storage_conf.c
index c8a860b..00cea64 100644
--- a/src/conf/storage_conf.c
+++ b/src/conf/storage_conf.c
@@ -1289,6 +1289,37 @@ virStorageVolDefParseXML(virStoragePoolDefPtr pool,
         }
     }
 
+    if ((backingStore = virXPathString("string(./backingStore/path)", ctxt))) {
+        if (VIR_ALLOC(ret->target.backingStore) < 0)
+            goto error;
+
+        ret->target.backingStore->path = backingStore;
+        backingStore = NULL;
+
+        if (options->formatFromString) {
+            char *format = virXPathString("string(./backingStore/format/@type)", ctxt);
+            if (format == NULL)
+                ret->target.backingStore->format = options->defaultFormat;
+            else
+                ret->target.backingStore->format = (options->formatFromString)(format);
+
+            if (ret->target.backingStore->format < 0) {
+                virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                               _("unknown volume format type %s"), format);
+                VIR_FREE(format);
+                goto error;
+            }
+            VIR_FREE(format);
+        }
+
+        if (VIR_ALLOC(ret->target.backingStore->perms) < 0)
+            goto error;
+        if (virStorageDefParsePerms(ctxt, ret->target.backingStore->perms,
+                                    "./backingStore/permissions",
+                                    DEFAULT_VOL_PERM_MODE) < 0)
+            goto error;
+    }
+
     capacity = virXPathString("string(./capacity)", ctxt);
     unit = virXPathString("string(./capacity/@unit)", ctxt);
     if (capacity == NULL) {
@@ -1341,37 +1372,6 @@ virStorageVolDefParseXML(virStoragePoolDefPtr pool,
             goto error;
     }
 
-    if ((backingStore = virXPathString("string(./backingStore/path)", ctxt))) {
-        if (VIR_ALLOC(ret->target.backingStore) < 0)
-            goto error;
-
-        ret->target.backingStore->path = backingStore;
-        backingStore = NULL;
-
-        if (options->formatFromString) {
-            char *format = virXPathString("string(./backingStore/format/@type)", ctxt);
-            if (format == NULL)
-                ret->target.backingStore->format = options->defaultFormat;
-            else
-                ret->target.backingStore->format = (options->formatFromString)(format);
-
-            if (ret->target.backingStore->format < 0) {
-                virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-                               _("unknown volume format type %s"), format);
-                VIR_FREE(format);
-                goto error;
-            }
-            VIR_FREE(format);
-        }
-
-        if (VIR_ALLOC(ret->target.backingStore->perms) < 0)
-            goto error;
-        if (virStorageDefParsePerms(ctxt, ret->target.backingStore->perms,
-                                    "./backingStore/permissions",
-                                    DEFAULT_VOL_PERM_MODE) < 0)
-            goto error;
-    }
-
     ret->target.compat = virXPathString("string(./target/compat)", ctxt);
     if (ret->target.compat) {
         char **version = virStringSplit(ret->target.compat, ".", 2);
-- 
2.0.5




More information about the libvir-list mailing list