[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen-4.0-testing] Fix "Error: Device 51952 not connected"?error when using pygrub



# HG changeset patch
# User Keir Fraser <keir@xxxxxxx>
# Date 1289230618 0
# Node ID 5c8057e8f9af3ff4ba01c2151f3c2bb2d461c363
# Parent  1f0a8d20b756dc9f089eda56121d37109d837004
Fix "Error: Device 51952 not connected"?error when using pygrub

The following is the process of booting a DomU with 'mounted-blktap2'
(VHD
for example) and 'pygrub' as bootloader:

1. Connect boot-device to Dom0 as '/dev/xpvd'
2. Pygrub get info for load DomU
3. Disconnect boot-device from Dom0
4. Boot DomU

During step 3 the created device is disconnected from Dom0, but
xenstore?does not?scrape away after the device is disconnected so you
get the following error:

?? ?"Error: Device /dev/xvdp (51952, tap2) is already connected."

During step 3 xend calls destroyDevice always with 'tap' as argument.

Signed-off-by: eXeC001er <execooler@xxxxxxxxx>
Signed-off-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
xen-unstable changeset:   21999:cd5b4135fe03
xen-unstable date:        Mon Aug 16 17:11:30 2010 +0100
---
 tools/python/xen/xend/XendDomainInfo.py |    9 ++++++---
 1 files changed, 6 insertions(+), 3 deletions(-)

diff -r 1f0a8d20b756 -r 5c8057e8f9af tools/python/xen/xend/XendDomainInfo.py
--- a/tools/python/xen/xend/XendDomainInfo.py   Mon Nov 08 15:35:30 2010 +0000
+++ b/tools/python/xen/xend/XendDomainInfo.py   Mon Nov 08 15:36:58 2010 +0000
@@ -3243,6 +3243,7 @@ class XendDomainInfo:
 
             taptype = blkdev_uname_to_taptype(disk)
             mounted = devtype in ['tap', 'tap2'] and taptype != 'aio' and 
taptype != 'sync' and not os.stat(fn).st_rdev
+            mounted_vbd_uuid = 0
             if mounted:
                 # This is a file, not a device.  pygrub can cope with a
                 # file if it's raw, but if it's QCOW or other such formats
@@ -3258,7 +3259,8 @@ class XendDomainInfo:
 
                 from xen.xend import XendDomain
                 dom0 = XendDomain.instance().privilegedDomain()
-                dom0._waitForDeviceUUID(dom0.create_vbd(vbd, disk))
+                mounted_vbd_uuid = dom0.create_vbd(vbd, disk);
+                dom0._waitForDeviceUUID(mounted_vbd_uuid)
                 fn = BOOTLOADER_LOOPBACK_DEVICE
 
             try:
@@ -3268,8 +3270,9 @@ class XendDomainInfo:
                 if mounted:
                     log.info("Unmounting %s from %s." %
                              (fn, BOOTLOADER_LOOPBACK_DEVICE))
-
-                    dom0.destroyDevice('tap', BOOTLOADER_LOOPBACK_DEVICE)
+                    _, vbd_info = dom0.info['devices'][mounted_vbd_uuid]
+                    
dom0.destroyDevice(dom0.getBlockDeviceClass(vbd_info['devid']), 
+                                       BOOTLOADER_LOOPBACK_DEVICE, force = 
True)
 
             if blcfg is None:
                 msg = "Had a bootloader specified, but can't find disk"

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.