mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 18:50:05 +01:00
Don't mount raw blktap disks for pygrub
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 <markmc@redhat.com>
This commit is contained in:
1 parent
49a55b0fb3
commit
b43e569511
2 files changed
+16
-8
No files matched your search
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -1786,7 +1786,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
|
||||
@@ -1802,7 +1803,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:
|
||||
|
||||