[PATCH 07/13] util: storage: Allow passing <source> also for managed PR case

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



To allow storing status information in the XML move the validation that
the 'path' is not valid for managed PR daemon case into
qemuDomainValidateStorageSource and allow parsing of the data even in
case when managed='yes'.

Signed-off-by: Peter Krempa <pkrempa@xxxxxxxxxx>
---
 src/qemu/qemu_domain.c    | 18 +++++++++++++-----
 src/util/virstoragefile.c | 37 ++++++++++++++++++-------------------
 2 files changed, 31 insertions(+), 24 deletions(-)

diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index c8d2daa26f..eaa796260c 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 <reservations/>"));
@@ -1950,24 +1950,23 @@ virStoragePRDefParseXML(xmlXPathContextPtr ctxt)
                            _("missing connection mode for <reservations/>"));
             goto cleanup;
         }
+    }

-        if (STRNEQ(type, "unix")) {
-            virReportError(VIR_ERR_XML_ERROR,
-                           _("unsupported connection type for <reservations/>: %s"),
-                           type);
-            goto cleanup;
-        }
-
-        if (STRNEQ(mode, "client")) {
-            virReportError(VIR_ERR_XML_ERROR,
-                           _("unsupported connection mode for <reservations/>: %s"),
-                           mode);
-            goto cleanup;
-        }
+    if (type && STRNEQ(type, "unix")) {
+        virReportError(VIR_ERR_XML_ERROR,
+                       _("unsupported connection type for <reservations/>: %s"),
+                       type);
+        goto cleanup;
+    }

-        VIR_STEAL_PTR(prd->path, path);
+    if (mode && STRNEQ(mode, "client")) {
+        virReportError(VIR_ERR_XML_ERROR,
+                       _("unsupported connection mode for <reservations/>: %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, "<reservations managed='%s'",
                       virTristateBoolTypeToString(prd->managed));
-    if (prd->managed == VIR_TRISTATE_BOOL_NO) {
+    if (prd->path) {
         virBufferAddLit(buf, ">\n");
         virBufferAdjustIndent(buf, 2);
         virBufferAddLit(buf, "<source type='unix'");
-- 
2.16.2

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list



[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux