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