From 6335c2a0cc6e2056d5f2c7724c764ed94cee5d96 Mon Sep 17 00:00:00 2001 From: Chris Lalancette Date: Tue, 5 Aug 2008 16:45:07 +0000 Subject: [PATCH] With the recent refactoring of the domain code, plus the changes with the Xend 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 --- ChangeLog | 8 ++++++++ src/xend_internal.c | 12 +++++++----- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index 37453b666c..f8a2a555d3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +Tue Aug 5 18:43:00 CEST 2008 Chris Lalancette + * 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 * src/stats_linux.c tests/statstest.c: Update the parsing of disks for xen block statistics. In particular, add support for > 16 xvd devices diff --git a/src/xend_internal.c b/src/xend_internal.c index 54e1d07043..b05e8706f4 100644 --- a/src/xend_internal.c +++ b/src/xend_internal.c @@ -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; } -- GitLab