From f49a7295194e948041f3767c984b29ca94ee3a63 Mon Sep 17 00:00:00 2001 From: Stefano Stabellini Date: Thu, 29 Jul 2010 14:53:16 +0100 Subject: [PATCH] --- yaml --- r: 204790 b: refs/heads/master c: b98a409b80ac510c95b4f1bafdef28edaeabd3e7 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/block/xen-blkfront.c | 39 ++++++++++++++++++++---------- 2 files changed, 27 insertions(+), 14 deletions(-) diff --git a/[refs] b/[refs] index 21e536a998b9..8507c3e1347d 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: c7f52cdc2f3e1733d3864e439ac2e92edd99ef31 +refs/heads/master: b98a409b80ac510c95b4f1bafdef28edaeabd3e7 diff --git a/trunk/drivers/block/xen-blkfront.c b/trunk/drivers/block/xen-blkfront.c index 6eb2989a9d0a..f63ac3d1f8a4 100644 --- a/trunk/drivers/block/xen-blkfront.c +++ b/trunk/drivers/block/xen-blkfront.c @@ -738,21 +738,34 @@ static int blkfront_probe(struct xenbus_device *dev, } } - /* no unplug has been done: do not hook devices != xen vbds */ - if (xen_hvm_domain() && (xen_platform_pci_unplug & XEN_UNPLUG_IGNORE)) { - int major; - - if (!VDEV_IS_EXTENDED(vdevice)) - major = BLKIF_MAJOR(vdevice); - else - major = XENVBD_MAJOR; - - if (major != XENVBD_MAJOR) { - printk(KERN_INFO - "%s: HVM does not support vbd %d as xen block device\n", - __FUNCTION__, vdevice); + if (xen_hvm_domain()) { + char *type; + int len; + /* no unplug has been done: do not hook devices != xen vbds */ + if (xen_platform_pci_unplug & XEN_UNPLUG_IGNORE) { + int major; + + if (!VDEV_IS_EXTENDED(vdevice)) + major = BLKIF_MAJOR(vdevice); + else + major = XENVBD_MAJOR; + + if (major != XENVBD_MAJOR) { + printk(KERN_INFO + "%s: HVM does not support vbd %d as xen block device\n", + __FUNCTION__, vdevice); + return -ENODEV; + } + } + /* do not create a PV cdrom device if we are an HVM guest */ + type = xenbus_read(XBT_NIL, dev->nodename, "device-type", &len); + if (IS_ERR(type)) + return -ENODEV; + if (strncmp(type, "cdrom", 5) == 0) { + kfree(type); return -ENODEV; } + kfree(type); } info = kzalloc(sizeof(*info), GFP_KERNEL); if (!info) {