linux-hotplug.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Problem in udev with %e device numbering
@ 2005-01-29 17:53 Michael Gutmann
  2005-01-29 19:53 ` Kay Sievers
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Michael Gutmann @ 2005-01-29 17:53 UTC (permalink / raw)
  To: linux-hotplug

[-- Attachment #1: Type: text/plain, Size: 1754 bytes --]

Hi,

device numbering with %e breaks with NAME{all_partitions} when using 
usb-devices that attach more than one virtual scsi-disk. I've got a 
multi-card-reader that announces itself as four scsi-drives, even if 
no card is plugged in. Partitions certainly can be found only when a 
card is put into the card reader. Unfortunately they are only found if 
something tries to use the card, f.e. fdisk.
So I have to use NAME(all_partitions}. No problem so far, but I want to
use symbolic names instead of sd?. But if I use SYMLINK="cardreader%e" 
f.e. there are only links to sd[abcd] and not to the partitions.
The only way I see is using NAME{all_partitions}="card%e". But because
the first name ist not card0 but just card, the device nodes for the
next three devices get overwritten with the nodes of the first 
partitions of the first device:

sda  -> card     sdb  -> card1    sdc  -> card2     sdd  -> card3
sda1 -> card1    sdb1 -> card11   sdc1 -> card21    sdd1 -> ...
sda2 -> card2    sdb2 -> card12   sdc2 -> card22
sda3 -> card3    sdb3 -> card13   sdc3 -> card23
...

My first idea was something like SYMLINK{all_partitions}="cardreader%e"
but that didn't work ;-). Second idea was to start the numbering with 
zero. I looked at the sources and found the second the easier way
(patch attached) although the result looks not very appealing and a lot 
like the old /dev ...
The patch seems to work, but it's not absolutely accurately tested
Also I have not inspected the rest of the source if this numbering has
side effects. 8-)

Michael

-- Michael Gutmann
Multimediazentrum Heinrich-Heine-Universität Düsseldorf
D-40225 Düsseldorf, Moorenstr. 5, Geb. 14.77
Tel.: +49 211 81 19730, Fax:  +49 211 81 19741

[-- Attachment #2: namedev.diff --]
[-- Type: text/x-diff, Size: 782 bytes --]

--- udev-050.orig/namedev.c	2005-01-29 17:24:18.000000000 +0100
+++ udev-050/namedev.c	2005-01-29 17:54:36.000000000 +0100
@@ -164,6 +164,8 @@ static int find_free_number(struct udevi
 	struct udevice db_udev;
 
 	strfieldcpy(filename, name);
+	/* starting with filename "name0" instead of just "name" MG */
+        snprintf(filename, NAME_SIZE, "%s%d", name, num);
 	while (1) {
 		dbg("look for existing node '%s'", filename);
 		memset(&db_udev, 0x00, sizeof(struct udevice));
@@ -301,7 +303,7 @@ static void apply_format(struct udevice 
 			break;
 		case 'e':
 			next_free_number = find_free_number(udev, string);
-			if (next_free_number > 0) {
+			if (next_free_number >= 0) {
 				sprintf(temp2, "%d", next_free_number);
 				strfieldcatmax(string, temp2, maxsize);
 			}

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2005-01-30 14:58 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-01-29 17:53 Problem in udev with %e device numbering Michael Gutmann
2005-01-29 19:53 ` Kay Sievers
2005-01-30 10:39 ` Michael Gutmann
2005-01-30 14:58 ` Kay Sievers

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).