]> xenbits.xensource.com Git - xen.git/commitdiff
xend: A few blktap2 fixes
authorKeir Fraser <keir.fraser@citrix.com>
Mon, 7 Jun 2010 06:19:43 +0000 (07:19 +0100)
committerKeir Fraser <keir.fraser@citrix.com>
Mon, 7 Jun 2010 06:19:43 +0000 (07:19 +0100)
1. Bug fix for error: "Error: Device /dev/xvdp (51952, tap2) is
already connected." (xenstore does not clean after DomU stoped)
2. Bug fix for error: "File 'vhd:/path/.../disk.img' doesn't exist."
(not correct parsing)
3. Bug fix for error: "Error: Device 51952 not connected" (in config
file for DomU we should be use prefix "tap2:tapdisk:xxx" for devices
from (aio, ram, qcow, vhd, remus) or "tap:tapdisk:xxx" for devices
from (sync, vmdk, qcow2, ioemu))
4. Bug fix for error: "Disk is not accessible" (if use 'tap2'-device
type, then '/dev/xpvd' may not be accessible immediately after its
creation)

Signed-off-by: eXeC001er <execooler@gmail.com>
tools/python/xen/util/blkif.py
tools/python/xen/xend/XendBootloader.py
tools/python/xen/xend/XendDomainInfo.py

index cbe76b613f78d13110748c7e335f86f40e2acd64..ca5a3081b51437507079937b69c0b4cd3d42f198 100644 (file)
@@ -87,7 +87,7 @@ def _parse_uname(uname):
                 fn = "/dev/%s" %(fn,)
                
         if typ in ("tap", "tap2"):
-            (taptype, fn) = fn.split(":", 1)
+            (taptype, fn) = fn.split(":", 2)[1:3]
     return (fn, taptype)
 
 def blkdev_uname_to_file(uname):
index 0cef917358e21a47169c3b634b0b89ebf499529d..3824d5ac17a73729a2c0bd2a4b488e24bc3fc8ea 100644 (file)
@@ -38,10 +38,15 @@ def bootloader(blexec, disk, dom, quiet = False, blargs = '', kernel = '',
         msg = "Bootloader isn't executable"
         log.error(msg)
         raise VmError(msg)
-    if not os.access(disk, os.R_OK):
-        msg = "Disk isn't accessible"
-        log.error(msg)
-        raise VmError(msg)
+    attempt = 0
+    while True:
+        if not os.access(disk, os.R_OK) and attempt > 3:
+            msg = "Disk isn't accessible"
+            log.error(msg)
+            raise VmError(msg)
+        else:
+            break
+        attempt = attempt + 1
 
     if os.uname()[0] == "NetBSD" and disk.startswith('/dev/'):
        disk = disk.replace("/dev/", "/dev/r")
index 0c01e7779e85f87b5d35b14ffda3f1167931204c..0c9f2e70c5f8edd34f85f22af3b88b561d78e188 100644 (file)
@@ -3299,7 +3299,7 @@ class XendDomainInfo:
                     log.info("Unmounting %s from %s." %
                              (fn, BOOTLOADER_LOOPBACK_DEVICE))
 
-                    dom0.destroyDevice('tap', BOOTLOADER_LOOPBACK_DEVICE)
+                    dom0.destroyDevice(devtype, BOOTLOADER_LOOPBACK_DEVICE, force = True)
 
             if blcfg is None:
                 msg = "Had a bootloader specified, but can't find disk"