]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
With the recent refactoring of the domain code, plus the changes with the Xend
authorChris Lalancette <clalance@redhat.com>
Tue, 5 Aug 2008 16:45:07 +0000 (16:45 +0000)
committerChris Lalancette <clalance@redhat.com>
Tue, 5 Aug 2008 16:45:07 +0000 (16:45 +0000)
code, a couple of bugs were introduced into the attach-disk and attach-interface
functionality.  This patch fixes 3 bugs:

1)  In xenDaemonAttachDevice(), there is a switch statement to determine which
of the xenDaemonFormatSxpr{Disk,Net} functions to call.  Unfortunately, the case
statements are all missing the corresponding "break", so we always fall-through
to the default error case.  This patch just adds the appropriate break statements.

2)  (minor) In xenDaemonDomainDefineXML (that's a mouthful!), there is a stray
"fprintf".  This is now converted to a proper virXendError().

3)  xenDaemonFormatSxpr{Disk,Net} were adding an extra (device to the front of
the sexpr expressions that xend did not expect (this is Xend on RHEL 5.2).
Because of this, the attaches would fail.  The patch fixes this by removing the
(device from the front, which makes attach-disk and attach-interface work again.

Signed-off-by: Chris Lalancette <clalance@redhat.com>
ChangeLog
src/xend_internal.c

index 37453b666c90d6417ac1ea9a32d3665cbf24ea5c..f8a2a555d325411be8d5cb0be737349f6fe98993 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+Tue Aug  5 18:43:00 CEST 2008 Chris Lalancette <clalance@redhat.com>
+       * src/xend_internal.c: Fix three bugs related to virsh attach-disk: 
+         a) make sure to break in the xenDaemonAttachDevice() in the switch
+         b) convert a stray fprintf to a virXendError()
+         c) remove an additional "(device" on the front of the sexpr
+         expression passed to xend.  This actually fixes virsh attach-disk
+         and virsh attach-interface work with Xen again
+         
 Tue Aug  5 18:36:00 CEST 2008 Chris Lalancette <clalance@redhat.com>
        * src/stats_linux.c tests/statstest.c: Update the parsing of disks for
          xen block statistics.  In particular, add support for > 16 xvd devices
index 54e1d070431b6abe4c8531c7604071085b8908c4..b05e8706f48b6f27f5a09eac5c762b0081dd21a6 100644 (file)
@@ -3900,6 +3900,7 @@ xenDaemonAttachDevice(virDomainPtr domain, const char *xml)
                                     STREQ(def->os.type, "hvm") ? 1 : 0,
                                     priv->xendConfigVersion) < 0)
             goto cleanup;
+        break;
 
     case VIR_DOMAIN_DEVICE_NET:
         if (xenDaemonFormatSxprNet(domain->conn,
@@ -3908,6 +3909,7 @@ xenDaemonAttachDevice(virDomainPtr domain, const char *xml)
                                    STREQ(def->os.type, "hvm") ? 1 : 0,
                                    priv->xendConfigVersion) < 0)
             goto cleanup;
+        break;
 
     default:
         virXendError(domain->conn, VIR_ERR_NO_SUPPORT, "%s",
@@ -4292,7 +4294,8 @@ virDomainPtr xenDaemonDomainDefineXML(virConnectPtr conn, const char *xmlDesc) {
     ret = xend_op(conn, "", "op", "new", "config", sexpr, NULL);
     VIR_FREE(sexpr);
     if (ret != 0) {
-        fprintf(stderr, _("Failed to create inactive domain %s\n"), name);
+        virXendError(conn, VIR_ERR_XEN_CALL,
+                     _("Failed to create inactive domain %s\n"), name);
         goto error;
     }
 
@@ -5029,7 +5032,6 @@ xenDaemonFormatSxprDisk(virConnectPtr conn ATTRIBUTE_UNUSED,
         xendConfigVersion == 1)
         return 0;
 
-    virBufferAddLit(buf, "(device ");
     /* Normally disks are in a (device (vbd ...)) block
      * but blktap disks ended up in a differently named
      * (device (tap ....)) block.... */
@@ -5083,7 +5085,7 @@ xenDaemonFormatSxprDisk(virConnectPtr conn ATTRIBUTE_UNUSED,
     else
         virBufferAddLit(buf, "(mode 'w')");
 
-    virBufferAddLit(buf, "))");
+    virBufferAddLit(buf, ")");
 
     return 0;
 }
@@ -5117,7 +5119,7 @@ xenDaemonFormatSxprNet(virConnectPtr conn,
         return -1;
     }
 
-    virBufferAddLit(buf, "(device (vif ");
+    virBufferAddLit(buf, "(vif ");
 
     virBufferVSprintf(buf,
                       "(mac '%02x:%02x:%02x:%02x:%02x:%02x')",
@@ -5177,7 +5179,7 @@ xenDaemonFormatSxprNet(virConnectPtr conn,
     if ((hvm) && (xendConfigVersion < 4))
         virBufferAddLit(buf, "(type ioemu)");
 
-    virBufferAddLit(buf, "))");
+    virBufferAddLit(buf, ")");
 
     return 0;
 }