[libvirt] [PATCH]: Fix "virsh attach-disk" and "virsh attach-interface"

Daniel P. Berrange berrange at redhat.com
Tue Aug 5 15:36:37 UTC 2008


On Tue, Aug 05, 2008 at 04:10:59PM +0100, Daniel P. Berrange wrote:
> On Tue, Aug 05, 2008 at 12:02:47PM +0200, Chris Lalancette wrote:
> > 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.
> 
> ACK
> 
> > 2)  (minor) In xenDaemonDomainDefineXML (that's a mouthful!), there is a stray
> > "fprintf".  This is now converted to a proper virXendError().
> 
> ACK
> 
> > 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.
> 
> This isn't entirely correct. The previous code was in fact inconsistent in this
> area. Taking libvirt 0.4.4 as an example
> 
>   - xenDaemonAttachDevice  calls into
>   - virParseXMLDevice  returns the SEXPR by calling into
>   - virDomainParseXMLDiskDesc or virDomainParseXMLIfDesc
> 
> The DiskDesc method returns an SEXPR with a '(device ' prefix. THe IfDesc method
> returns a SEXPR without a '(device ' prefix. I'm pretty sure I've used the disk
> hotplug in RHEL5, which implies it does accept a (device prefix. I've never tried
> network hotplug, so can't say whether that worked or not. In any case I think this
> needs some more investigation of behaviour on Xen 3.0.3, vs  3.1.0 and 3.2.0 before
> we change the SEXPR again

Ok, I've found the original xenDaemonAttachDevice() had this hack to make
them consistent:

    if (!memcmp(sexpr, "(device ", 8)) {
        conf = sexpr + 8;
        *(conf + strlen(conf) -1) = 0; /* suppress final ) */
    }
    else
        conf = sexpr;

Which is just gross. 

So, ACK to your original patch - it brings us back into line with expected
SEXPR for XenD we had in the past

Daniel
-- 
|: Red Hat, Engineering, London   -o-   http://people.redhat.com/berrange/ :|
|: http://libvirt.org  -o-  http://virt-manager.org  -o-  http://ovirt.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505  -o-  F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|




More information about the libvir-list mailing list