diff --git a/src/conf/storage_conf.c b/src/conf/storage_conf.c index 30908861c91da22bd5b53b5a23deb7abbc628baa..b522a4d5e40d95b5589a8f04f96e08773db6392f 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);