bitkeeper revision 1.1159.223.56 (41fffbb0baSUSOWVCJ_0NFmEtCmUkw)
authoriap10@labyrinth.cl.cam.ac.uk <iap10@labyrinth.cl.cam.ac.uk>
Tue, 1 Feb 2005 21:59:12 +0000 (21:59 +0000)
committeriap10@labyrinth.cl.cam.ac.uk <iap10@labyrinth.cl.cam.ac.uk>
Tue, 1 Feb 2005 21:59:12 +0000 (21:59 +0000)
Fix the device number calculation for /dev/hd* device names;
ide device numbering works differently to scsi

Signed-off-by: Jody Belka <knew-xen@pimb.org>
Signed-off-by: ian.pratt@cl.cam.ac.uk
tools/python/xen/xend/server/blkif.py

index b980ebcb721bb550cd62ddea96e25a7b968a8ced..8a1de09bfc0a8743064a94738ada6e2a2d2dd2e4 100755 (executable)
@@ -66,8 +66,11 @@ def blkdev_name_to_number(name):
     if re.match( '/dev/sd[a-p]([0-9]|1[0-5])', n):
         return 8 * 256 + 16 * (ord(n[7:8]) - ord('a')) + int(n[8:])
 
-    if re.match( '/dev/hd[a-p]([0-9]|[1-5][0-9]|6[0-3])', n):
-        return 3 * 256 + 16 * (ord(n[7:8]) - ord('a')) + int(n[8:])        
+    if 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
 
     # see if this is a hex device number
     if re.match( '^(0x)?[0-9a-fA-F]+$', name ):