diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index 9c9a1bda6a..7e37d778f8 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -4204,11 +4204,19 @@ qemuDomainValidateStorageSource(virStorageSourcePtr src,
}
}
- if (src->pr &&
- !virQEMUCapsGet(qemuCaps, QEMU_CAPS_PR_MANAGER_HELPER)) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
- _("reservations not supported with this QEMU binary"));
- return -1;
+ if (src->pr) {
+ if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_PR_MANAGER_HELPER)) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ _("reservations not supported with this QEMU binary"));
+ return -1;
+ }
+
+ if (virStoragePRDefIsManaged(src->pr) && src->pr->path) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ _("'path' attribute should not be provided for "
+ "managed reservations"));
+ return -1;
+ }
}
return 0;
diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
index c89bdb9e49..dbbe758f30 100644
--- a/src/util/virstoragefile.c
+++ b/src/util/virstoragefile.c
@@ -1928,11 +1928,11 @@ virStoragePRDefParseXML(xmlXPathContextPtr ctxt)
goto cleanup;
}
- if (prd->managed == VIR_TRISTATE_BOOL_NO) {
- type = virXPathString("string(./source[1]/@type)", ctxt);
- path = virXPathString("string(./source[1]/@path)", ctxt);
- mode = virXPathString("string(./source[1]/@mode)", ctxt);
+ type = virXPathString("string(./source[1]/@type)", ctxt);
+ path = virXPathString("string(./source[1]/@path)", ctxt);
+ mode = virXPathString("string(./source[1]/@mode)", ctxt);
+ if (prd->managed == VIR_TRISTATE_BOOL_NO || type || path || mode) {
if (!type) {
virReportError(VIR_ERR_XML_ERROR, "%s",
_("missing connection type for "));
@@ -1950,24 +1950,23 @@ virStoragePRDefParseXML(xmlXPathContextPtr ctxt)
_("missing connection mode for "));
goto cleanup;
}
-
- if (STRNEQ(type, "unix")) {
- virReportError(VIR_ERR_XML_ERROR,
- _("unsupported connection type for : %s"),
- type);
- goto cleanup;
- }
-
- if (STRNEQ(mode, "client")) {
- virReportError(VIR_ERR_XML_ERROR,
- _("unsupported connection mode for : %s"),
- mode);
- goto cleanup;
- }
-
- VIR_STEAL_PTR(prd->path, path);
}
+ if (type && STRNEQ(type, "unix")) {
+ virReportError(VIR_ERR_XML_ERROR,
+ _("unsupported connection type for : %s"),
+ type);
+ goto cleanup;
+ }
+
+ if (mode && STRNEQ(mode, "client")) {
+ virReportError(VIR_ERR_XML_ERROR,
+ _("unsupported connection mode for : %s"),
+ mode);
+ goto cleanup;
+ }
+
+ VIR_STEAL_PTR(prd->path, path);
VIR_STEAL_PTR(ret, prd);
cleanup:
@@ -1986,7 +1985,7 @@ virStoragePRDefFormat(virBufferPtr buf,
{
virBufferAsprintf(buf, "managed));
- if (prd->managed == VIR_TRISTATE_BOOL_NO) {
+ if (prd->path) {
virBufferAddLit(buf, ">\n");
virBufferAdjustIndent(buf, 2);
virBufferAddLit(buf, "