From: Mark McLoughlin Subject: [PATCH] Don't mount raw blktap disks for pygrub Date: Mon, 05 Mar 2007 11:13:45 +0000 Message-ID: <1173093225.12429.60.camel@blaa> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-/MiO/7kjTJiuIJIzWFWE" Return-path: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: xen-devel List-Id: xen-devel@lists.xenproject.org --=-/MiO/7kjTJiuIJIzWFWE Content-Type: text/plain Content-Transfer-Encoding: 7bit Hi, Currently, we mount all blktap disks for pygrub so that it can boot from e.g. QCOW images. However, since pygrub will handle a raw image just fine without mounting through blktap, we shouldn't bother in that case. Also, it looks like XendDomainInfo.create_vbd() takes the full disk uname rather than the image path. Signed-off-by: Mark McLoughlin Cheers, Mark. --=-/MiO/7kjTJiuIJIzWFWE Content-Disposition: inline; filename=xen-boot-tap-aio-disk.patch Content-Type: text/x-patch; name=xen-boot-tap-aio-disk.patch; charset=UTF-8 Content-Transfer-Encoding: 7bit diff -r 3ac19fda0bc2 tools/python/xen/util/blkif.py --- a/tools/python/xen/util/blkif.py Fri Mar 02 12:11:52 2007 +0000 +++ b/tools/python/xen/util/blkif.py Mon Mar 05 10:06:00 2007 +0000 @@ -66,16 +66,23 @@ def blkdev_segment(name): 'type' : 'Disk' } return val -def blkdev_uname_to_file(uname): - """Take a blkdev uname and return the corresponding filename.""" - fn = None +def _parse_uname(uname): + fn = taptype = None if uname.find(":") != -1: (typ, fn) = uname.split(":", 1) if typ == "phy" and not fn.startswith("/"): fn = "/dev/%s" %(fn,) if typ == "tap": - (typ, fn) = fn.split(":", 1) - return fn + (taptype, fn) = fn.split(":", 1) + return (fn, taptype) + +def blkdev_uname_to_file(uname): + """Take a blkdev uname and return the corresponding filename.""" + return _parse_uname(uname)[0] + +def blkdev_uname_to_taptype(uname): + """Take a blkdev uname and return the blktap type.""" + return _parse_uname(uname)[1] def mount_mode(name): mode = None diff -r 3ac19fda0bc2 tools/python/xen/xend/XendDomainInfo.py --- a/tools/python/xen/xend/XendDomainInfo.py Fri Mar 02 12:11:52 2007 +0000 +++ b/tools/python/xen/xend/XendDomainInfo.py Mon Mar 05 10:30:06 2007 +0000 @@ -34,7 +34,7 @@ from types import StringTypes import xen.lowlevel.xc from xen.util import asserts -from xen.util.blkif import blkdev_uname_to_file +from xen.util.blkif import blkdev_uname_to_file, blkdev_uname_to_taptype from xen.util import security from xen.xend import balloon, sxp, uuid, image, arch, osdep @@ -1768,7 +1768,8 @@ class XendDomainInfo: disk = devinfo[1]['uname'] fn = blkdev_uname_to_file(disk) - mounted = devtype == 'tap' and not os.stat(fn).st_rdev + taptype = blkdev_uname_to_taptype(disk) + mounted = devtype == 'tap' and taptype != 'aio' and taptype != 'sync' and not os.stat(fn).st_rdev 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 @@ -1784,7 +1785,7 @@ class XendDomainInfo: from xen.xend import XendDomain dom0 = XendDomain.instance().privilegedDomain() - dom0._waitForDeviceUUID(dom0.create_vbd(vbd, fn)) + dom0._waitForDeviceUUID(dom0.create_vbd(vbd, disk)) fn = BOOTLOADER_LOOPBACK_DEVICE try: --=-/MiO/7kjTJiuIJIzWFWE Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --=-/MiO/7kjTJiuIJIzWFWE--