]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/libvirt.git/commitdiff
* src/xend_internal.c src/xml.c: fix for shareable drive support
authorDaniel Veillard <veillard@redhat.com>
Mon, 13 Nov 2006 17:09:31 +0000 (17:09 +0000)
committerDaniel Veillard <veillard@redhat.com>
Mon, 13 Nov 2006 17:09:31 +0000 (17:09 +0000)
  rhbz#214908
Daniel

ChangeLog
src/xend_internal.c
src/xml.c

index bf8c29938ec8ef37617a66f48f479a21e9bc6316..255d8f0f4cae275ce776f3c5498af420467eca00 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Mon Nov 13 17:18:00 CET 2006 Daniel Veillard <veillard@redhat.com>
+
+       * src/xend_internal.c src/xml.c: fix for shareable drive support
+         rhbz#214908
+
 Fri Nov 10 17:53:41 EDT 2006 Daniel Berrange <berrange@redhat.com>
 
        * src/xml.c: Fix memory leak, by freeing xmlParserContextPtr object
index 54a9f9e22e6e23421cf7e635d306fcea67f09035..990d8a0550d8b2dbaaf8b0841d8baafb31d3d61e 100644 (file)
@@ -1690,6 +1690,8 @@ xend_parse_sexp_desc(virConnectPtr conn, struct sexpr *root, int xendConfigVersi
                xend has already done this ? */
             if ((mode != NULL) && (!strcmp(mode, "r")))
                 virBufferVSprintf(&buf, "      <readonly/>\n");
+           else if ((mode != NULL) && (!strcmp(mode, "w!")))
+                virBufferVSprintf(&buf, "      <shareable/>\n");
             virBufferAdd(&buf, "    </disk>\n", 12);
 
             bad_parse:
index 7559e44b9d7803e6722b87a6ae174b8f057decfb..b1ef663d72c970a788f2e9492df26092d47e7bec 100644 (file)
--- a/src/xml.c
+++ b/src/xml.c
@@ -955,6 +955,7 @@ virDomainParseXMLDiskDesc(xmlNodePtr node, virBufferPtr buf, int hvm, int xendCo
     xmlChar *drvName = NULL;
     xmlChar *drvType = NULL;
     int ro = 0;
+    int shareable = 0;
     int typ = 0;
     int cdrom = 0;
 
@@ -988,6 +989,8 @@ virDomainParseXMLDiskDesc(xmlNodePtr node, virBufferPtr buf, int hvm, int xendCo
                     drvType = xmlGetProp(cur, BAD_CAST "type");
             } else if (xmlStrEqual(cur->name, BAD_CAST "readonly")) {
                 ro = 1;
+            } else if (xmlStrEqual(cur->name, BAD_CAST "shareable")) {
+               shareable = 1;
             }
         }
         cur = cur->next;
@@ -1076,10 +1079,12 @@ virDomainParseXMLDiskDesc(xmlNodePtr node, virBufferPtr buf, int hvm, int xendCo
                 virBufferVSprintf(buf, "(uname 'phy:/dev/%s')", source);
         }
     }
-    if (ro == 0)
-        virBufferVSprintf(buf, "(mode 'w')");
-    else if (ro == 1)
+    if (ro == 1)
         virBufferVSprintf(buf, "(mode 'r')");
+    else if (shareable == 1)
+        virBufferVSprintf(buf, "(mode 'w!')");
+    else
+        virBufferVSprintf(buf, "(mode 'w')");
 
     virBufferAdd(buf, ")", 1);
     virBufferAdd(buf, ")", 1);