# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1214579398 -3600
# Node ID 0728459b3c8ddd321c733500975a06d0d50c12a5
# Parent 10e79ad54c91d2b93bffe7e8b16b6f358d89e61f
tools/python: blkdev_name_to_number fixes
Rework blkdev_name_to_number to allow the tools to attach xvd disks
beyond xvdp.
1. Adds the handling for the /dev/xvd[q-z] and /dev/xvd[a-i][a-z]
extended devices
2. Changes blkdev_name_to_number() to return a tuple of (xenbus,
devnum), and then deals with the resulting fallout.
Signed-off-by: Chris Lalancette <clalance@xxxxxxxxxx>
---
tools/python/xen/util/blkif.py | 37 +++++++++++++++++++---------------
tools/python/xen/xend/server/blkif.py | 6 ++---
tools/python/xen/xm/main.py | 3 --
3 files changed, 25 insertions(+), 21 deletions(-)
diff -r 10e79ad54c91 -r 0728459b3c8d tools/python/xen/util/blkif.py
--- a/tools/python/xen/util/blkif.py Fri Jun 27 16:08:56 2008 +0100
+++ b/tools/python/xen/util/blkif.py Fri Jun 27 16:09:58 2008 +0100
@@ -16,6 +16,9 @@ def blkdev_name_to_number(name):
n = expand_dev_name(name)
+ devname = 'virtual-device'
+ devnum = None
+
try:
return os.stat(n).st_rdev
except Exception, ex:
@@ -25,28 +28,30 @@ def blkdev_name_to_number(name):
if re.match( '/dev/sd[a-z]([1-9]|1[0-5])?$', n):
major = scsi_major[(ord(n[7:8]) - ord('a')) / 16]
minor = ((ord(n[7:8]) - ord('a')) % 16) * 16 + int(n[8:] or 0)
- return major * 256 + minor
- if re.match( '/dev/sd[a-i][a-z]([1-9]|1[0-5])?$', n):
+ devnum = major * 256 + minor
+ elif re.match( '/dev/sd[a-i][a-z]([1-9]|1[0-5])?$', n):
major = scsi_major[((ord(n[7:8]) - ord('a') + 1) * 26 + (ord(n[8:9]) -
ord('a'))) / 16 ]
minor = (((ord(n[7:8]) - ord('a') + 1 ) * 26 + (ord(n[8:9]) -
ord('a'))) % 16) * 16 + int(n[9:] or 0)
- return major * 256 + minor
-
- if re.match( '/dev/hd[a-t]([1-9]|[1-5][0-9]|6[0-3])?', n):
+ devnum = major * 256 + minor
+ elif re.match( '/dev/hd[a-t]([1-9]|[1-5][0-9]|6[0-3])?', n):
ide_majors = [ 3, 22, 33, 34, 56, 57, 88, 89, 90, 91 ]
major = ide_majors[(ord(n[7:8]) - ord('a')) / 2]
minor = ((ord(n[7:8]) - ord('a')) % 2) * 64 + int(n[8:] or 0)
- return major * 256 + minor
+ devnum = major * 256 + minor
+ elif re.match( '/dev/xvd[a-p]([1-9]|1[0-5])?$', n):
+ devnum = (202 << 8) + ((ord(n[8:9]) - ord('a')) << 4) + int(n[9:] or 0)
+ elif re.match('/dev/xvd[q-z]([1-9]|1[0-5])?$', n):
+ devname = 'virtual-device-ext'
+ devnum = (1 << 28) + ((ord(n[8:9]) - ord('a')) << 8) + int(n[9:] or 0)
+ elif re.match('/dev/xvd[a-i][a-z]([1-9]|1[0-5])?$', n):
+ devname = 'virtual-device-ext'
+ devnum = (1 << 28) + (((ord(n[8:9]) - ord('a') + 1) * 26 +
(ord(n[9:10]) - ord('a'))) << 8) + int(n[10:] or 0)
+ elif re.match( '^(0x)[0-9a-fA-F]+$', name ):
+ devnum = string.atoi(name, 16)
+ elif re.match('^[0-9]+$', name):
+ devnum = string.atoi(name, 10)
- if re.match( '/dev/xvd[a-p]([1-9]|1[0-5])?', n):
- return 202 * 256 + 16 * (ord(n[8:9]) - ord('a')) + int(n[9:] or 0)
-
- if re.match( '^(0x)[0-9a-fA-F]+$', name ):
- return string.atoi(name,16)
-
- if re.match('^[0-9]+$', name):
- return string.atoi(name, 10)
-
- return None
+ return (devname, devnum)
def blkdev_segment(name):
"""Take the given block-device name (e.g. '/dev/sda1', 'hda')
diff -r 10e79ad54c91 -r 0728459b3c8d tools/python/xen/xend/server/blkif.py
--- a/tools/python/xen/xend/server/blkif.py Fri Jun 27 16:08:56 2008 +0100
+++ b/tools/python/xen/xend/server/blkif.py Fri Jun 27 16:09:58 2008 +0100
@@ -81,11 +81,11 @@ class BlkifController(DevController):
if security.on() == xsconstants.XS_POLICY_ACM:
self.do_access_control(config, uname)
- devid = blkif.blkdev_name_to_number(dev)
+ (device_path, devid) = blkif.blkdev_name_to_number(dev)
if devid is None:
raise VmError('Unable to find number for device (%s)' % (dev))
- front = { 'virtual-device' : "%i" % devid,
+ front = { device_path : "%i" % devid,
'device-type' : dev_type
}
@@ -204,5 +204,5 @@ class BlkifController(DevController):
dev = devid.split('/')[-1]
dev = int(dev)
except ValueError:
- dev = blkif.blkdev_name_to_number(dev)
+ (device_path, dev) = blkif.blkdev_name_to_number(dev)
return dev
diff -r 10e79ad54c91 -r 0728459b3c8d tools/python/xen/xm/main.py
--- a/tools/python/xen/xm/main.py Fri Jun 27 16:08:56 2008 +0100
+++ b/tools/python/xen/xm/main.py Fri Jun 27 16:09:58 2008 +0100
@@ -2022,8 +2022,7 @@ def xm_block_list(args):
map(server.xenapi.VBD.get_runtime_properties, vbd_refs)
vbd_devs = \
map(server.xenapi.VBD.get_device, vbd_refs)
- vbd_devids = \
- map(blkdev_name_to_number, vbd_devs)
+ vbd_devids = [blkdev_name_to_number(x)[1] for x in vbd_devs]
devs = map(lambda (devid, prop): [devid, map2sxp(prop)],
zip(vbd_devids, vbd_properties))
else:
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|