[libvirt] [PATCH/RFC] qemu/kvm: allow to hot remove scsi/virtio disks

Daniel Veillard veillard at redhat.com
Tue Oct 21 13:25:25 UTC 2008


On Fri, Oct 17, 2008 at 04:24:52PM +0200, Guido Günther wrote:
> On Fri, Oct 17, 2008 at 02:37:17PM +0200, Daniel Veillard wrote:
> [..snip..] 
> >   Looks fine, i just removed a couple of extra spaces at end of line
> > before commiting :-)
> Thanks a lot for applying this so quickly! Attached is a patch that
> allows for unplugging of disks. To do that I added a token to
> virDomainDiskDef that holds the PCI bus/slot number [1] so we can
> indentify the device on unplug. It's a union since other
> busses/hypervisors might have other requirements. The token is meant as
> an internal handle and will never show up in an XML and should probably
> move up into virDomainDeviceDef. Comments are welcome.

  In principle this looks just fine to me except a couple of stylistic
issues:

[...]
> +++ b/src/domain_conf.h
> @@ -84,6 +84,12 @@ struct _virDomainDiskDef {
>      int type;
>      int device;
>      int bus;
> +    union {
> +        struct {
> +            int bus;
> +            int slot;
> +        } pci;
> +    } token;

 I'm not sure what the point of the token union is. Other adressing
mechanism may be used still I think having the structure not unioned
at this point makes things a bit clearer.

> +static int qemudDomainDetchPciDiskDevice(virDomainPtr dom, virDomainDeviceDefPtr dev)

  Well I don't really see an improvement in using "Detch" instead of
  "Detach", it's not like the identifier is much smaller, makes it less
  readable IMHO, ditto for qemudDomainDetchDevice()

[...]
> +    if (detach->token.pci.slot < 1 || detach->token.pci.bus != 0) {
> +        qemudReportError(dom->conn, dom, NULL, VIR_ERR_OPERATION_FAILED,
> +                         _("disk %s cannot be detached"), detach->dst);
> +        return -1;
> +    }

  shouldn't the error be "non PCI disk %s cannot be detached" instead ?

> +    ret = asprintf(&cmd, "pci_del 0 %d", detach->token.pci.slot);
> +    if (ret == -1) {
> +        qemudReportError(dom->conn, NULL, NULL, VIR_ERR_NO_MEMORY, NULL);
> +        return ret;
> +    }
> +
> +    if (qemudMonitorCommand(driver, vm, cmd, &reply) < 0) {
> +        qemudReportError(dom->conn, dom, NULL, VIR_ERR_OPERATION_FAILED,
> +                         _("cannot detach disk %s"), detach->dst);

  Live attach/detach operations are among the ones the harder to debug from
an user perspective I would suggest to try to be as explicit as possible
   "failed to execute detach disk %s command"

> +        VIR_FREE(cmd);
> +        return -1;
> +    }
> +
> +    DEBUG ("pci_del reply: %s", reply);
> +    /* If the command fails due to a wrong slot qemu prints: invalid slot, 
> +     * nothing is printed on success */
> +    if (strstr(reply, "invalid slot")) {
> +        qemudReportError (dom->conn, dom, NULL, VIR_ERR_OPERATION_FAILED,
> +                          _("cannot detach disk %s"), detach->dst);


    same thing if we have a hint about why this failed ...
        "cannot detach disk %s : invalid slot"

[...]
> +static int qemudDomainDetchDevice(virDomainPtr dom,
> +                                   const char *xml) {

  Detach :-)


> +    if (dev->type == VIR_DOMAIN_DEVICE_DISK &&
> +        dev->data.disk->device == VIR_DOMAIN_DISK_DEVICE_DISK &&
> +        (dev->data.disk->bus == VIR_DOMAIN_DISK_BUS_SCSI ||
> +         dev->data.disk->bus == VIR_DOMAIN_DISK_BUS_VIRTIO))
> +                    ret = qemudDomainDetchPciDiskDevice(dom, dev);
> +    else {
> +        qemudReportError(dom->conn, dom, NULL, VIR_ERR_NO_SUPPORT,
> +                         "%s", _("this device type cannot be attached"));

 or even better turn this positively as
       "only SCSI or virtio disk device can be attached dynamically"


  Those are just stylistic issues, I can apply the patch with those
  changed if you wish if you don't have time for a new patch,

    thanks,

Daniel

-- 
Daniel Veillard      | libxml Gnome XML XSLT toolkit  http://xmlsoft.org/
daniel at veillard.com  | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library  http://libvirt.org/




More information about the libvir-list mailing list