Skip to contentSkip to conversation

Allow Xend to find device number for sdX or hdX with udev

PATCH In review Anthony Liguori 5 participants 5 messages Jan 14, 2005 – Jan 17, 2005

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 Allow Xend to find device number for sdX or hdX with udev

Symptom:
When using a udev-based dom0, if you try to create a domU with a virtual sda device and you do not have a local scsi device xm create fails.

Fix:
When using udev, only the device nodes needed are made. The follow patch changes Xend to return a device number based on:

http://www.lanana.org/docs/device-list/devices.txt

For sd and hd devices if stat() fails. It was tested against both 2.0.2 and 2.0.3.

Regards,

Signature · 6 lines
Anthony Liguori
Linux Technology Center (LTC) - IBM Austin
E-mail: [email protected]
Phone: (512) 838-1208

Signed-off-by: Anthony Liguori <[email protected]>

Only in xen-2.0-new/tools/python/xen/lowlevel/xu: xu.c~

tools/python/xen/xend/server/blkif.py +6 -0
diff -ur xen-2.0/tools/python/xen/xend/server/blkif.py xen-2.0-new/tools/python/xen/xend/server/blkif.py
@@ -63,6 +63,12 @@
         log.debug("exception looking up device number for %s: %s", name, ex)
 	pass
 
+    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:])        
+
     # see if this is a hex device number
     if re.match( '^(0x)?[0-9a-fA-F]+$', name ):
 	return string.atoi(name,16)
#1 lore raw
Quoted 4 lines · Anthony Liguori

Symptom:
When using a udev-based dom0, if you try to create a domU with a virtual sda device and you do not have a local scsi device xm create fails.

Quoted 8 lines

Fix:
When using udev, only the device nodes needed are made. The follow patch changes Xend to return a device number based on:

http://www.lanana.org/docs/device-list/devices.txt

For sd and hd devices if stat() fails. It was tested against both 2.0.2 and 2.0.3.

Another solution is to tell udev to automatically create /dev/sda1 every time it gets started:

# mknod /etc/udev/devices b 8 1

When udev starts, all device files inside /etc/udev/devices are automatically copied to /dev, with no further configuration or triggering of hotplug or coldplug events.

NOTE: This is what I use for VMware, which needs a lot of /dev/vm* devices to function properly: I moved all VMware-specific device files into /etc/udev/devices so when udev starts, those files are copied back to /dev.

-------------------------------------------------------
The SF.Net email is sponsored by: Beat the post-holiday blues Get a FREE limited edition SourceForge.net t-shirt from ThinkGeek. It's fun and FREE -- well, almost....http://www.thinkgeek.com/sfshirt

#2 lore raw
Quoted 1 line · Felipe Alfaro Solana

When udev starts, all device files inside /etc/udev/devices are automatically copied to /dev, with no further configuration or triggering of hotplug or coldplug events.

It depends on your distribution, for example gentoo doesn't use /etc/udev/devices/, but /lib/udev-state/devices.tar.bz2.

-jkt

Signature · 8 lines
cd /local/pub && more beer > /dev/mouth



-------------------------------------------------------
The SF.Net email is sponsored by: Beat the post-holiday blues
Get a FREE limited edition SourceForge.net t-shirt from ThinkGeek.
It's fun and FREE -- well, almost....http://www.thinkgeek.com/sfshirt
#3 lore raw
In reply to Anthony Liguori
Quoted 5 lines · Anthony Liguori

The follow patch changes Xend to return a device number based on:

http://www.lanana.org/docs/device-list/devices.txt

For sd and hd devices if stat() fails.

I would suggest not using stat() at all, and not using that device list at all (even though the hd and sd parts are equal ofcourse), but creating the mapping based on the mapping to the other direction inside "drivers/xen/blokfront/vbd.c". That file defines the "xvd" devices in addition to "hd" and "sd" devices.

-- Naked

-------------------------------------------------------
The SF.Net email is sponsored by: Beat the post-holiday blues Get a FREE limited edition SourceForge.net t-shirt from ThinkGeek. It's fun and FREE -- well, almost....http://www.thinkgeek.com/sfshirt

#4 lore raw
Quoted 5 lines
Quoted 4 lines · Anthony Liguori

The follow patch changes Xend to return a device number based on:

http://www.lanana.org/docs/device-list/devices.txt

Quoted 7 lines
Quoted 1 line

For sd and hd devices if stat() fails.

I would suggest not using stat() at all, and not using that device list at all (even though the hd and sd parts are equal ofcourse), but creating the mapping based on the mapping to the other direction inside "drivers/xen/blokfront/vbd.c". That file defines the "xvd" devices in addition to "hd" and "sd" devices.

We've considered doing the name lookup in blkfront, but there are complications with it being done so early in the boot sequence, and each target devices that is supported requires special case code anyhow.

Passing linux major/minor numbers across the device channel interface is admittedly rather ugly, but its not a big problem.

Ian

-------------------------------------------------------
The SF.Net email is sponsored by: Beat the post-holiday blues Get a FREE limited edition SourceForge.net t-shirt from ThinkGeek. It's fun and FREE -- well, almost....http://www.thinkgeek.com/sfshirt