linux-hotplug.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Martin Schlemmer <azarah@nosferatu.za.org>
To: linux-hotplug@vger.kernel.org
Subject: Possible udev bug and some questions
Date: Wed, 24 Dec 2003 22:25:22 +0000	[thread overview]
Message-ID: <marc-linux-hotplug-107230596809166@msgid-missing> (raw)


[-- Attachment #1.1: Type: text/plain, Size: 4131 bytes --]

Hi

I know its not good form to post so many issues in one, but I
am currently on dialup, and not for more than a few hours.  Also
please CC me, as I am not on this list.

1) if you look at the following code in namedev.c (in
 function do_callout()):

--
                if (sysfs_device) {
                        dbg("dev->bus='%s' sysfs_device->bus='%s'",
dev->bus, sysfs_device->bus);
                        if (strcasecmp(dev->bus, sysfs_device->bus) !=
0)
                                continue;

                }
--

there is a slight problem - if sysfs_device = NULL, then the
'strcasecmp(dev->bus, sysfs_device->bus) != 0' test will never
be evaluated, and result in the callout to run for all non-phisical (?)
devices.

Attached is a possible patch, and this also brings me to second
question:

2) If I understand the udev manual correct, all 'methods' should have a
 suitable 'key'.  If I now look again at namedev.c, then whenever we
work with a non-phisical (?) (or not attached to a phisical bus?)
device, then non of the 'keys' used with 'methods' are available, as
get_sysfs_device() fails.  Should any of the 'methods' then be run?
Or more to the code, should any of the do_* (do_callout, etc) functions
then be called for a device for which get_sysfs_device() failed?

Reference code for above (function namedev_name_device()):

--
        /* find the sysfs_device associated with this class device */
        sysfs_device = get_sysfs_device(class_dev);
        if (sysfs_device) {
                dbg("sysfs_device->path='%s'", sysfs_device->path);
                dbg("sysfs_device->bus_id='%s'", sysfs_device->bus_id);
                dbg("sysfs_device->bus='%s'", sysfs_device->bus);
                strfieldcpy(udev->bus_id, sysfs_device->bus_id);
                wait_for_device_to_initialize(sysfs_device);
        } else {
                dbg("class_dev->name = '%s'", class_dev->name);
        }
--

3) After looking at ide-devfs.sh, I converted it to create the 'compat'
symlinks (/dev/{cdroms,discs}/* stuff) if anybody is interested (as
ide-devfs-compat.sh).  Also, it would be nice if somebody could have
a look for holes - I am not sure what will happen with modular ide
setups ...

I would however like to extend it to scsi disks, but not sure what is
the most generic and easy way to try and figure out how many disks
there is ... any ideas?

This sorda brings me to point four:

4) Is there any reason why only one 'method' (meaning only one of the
callouts I may have for ide devices - I may want to use both the
ide-devfs.sh and ide-devfs-compat.sh to have multiple symlinks for on
device ...) is done for each device and/or hotplug event (beside lack
of time to implement) ?  Same for why only 'type' of 'method' is done
for each (if a CALLOUT is done, the rest is skipped) ?

If no other reason that time, is anybody working on it, and if not,
any pointers to not clash with future plans (meaning I might want to
take a shot at implementing it)?

5) I use a devfs-less setup with udev, 2.6.0 kernel with most of the
sysfs patches from Greg, if not all, and a pre 2.3.3 glibc.  Also
have devpts compiled in, and mounted to /dev/pts.  I now have the
following 'w' output:

--
 $ w
 00:22:22 up  1:15, 13 users,  load average: 0.98, 0.28, 0.14
USER     TTY        LOGIN@   IDLE   JCPU   PCPU WHAT
azarah   tty4      23:07    1:14m  1.19s  0.00s /bin/sh
/usr/X11R6/bin/startx
azarah   ttyp0     23:08     ?     0.00s  0.00s -bash
azarah   ttyp1     23:08     ?     0.00s  0.00s -bash
...
--

where I would rather expect something like this (devfs box):

--
 $ w
 00:35:38 up 32 days,  8:01,  1 user,  load average: 0.19, 0.26, 0.20
USER     TTY        LOGIN@   IDLE   JCPU   PCPU WHAT
azarah   pts/0     00:35    1.00s  0.04s  0.02s w
--

Just me, or somebody else have this as well?  I know this could be a
few things (glibc, etc), but I want to try and get a 'starting point'
for debugging (if it should list 'pts/*' as TTY in the first place ...).


Thanks,

-- 
Martin Schlemmer

[-- Attachment #1.2: udev-010-valid-bus-for-CALLOUT.patch --]
[-- Type: text/x-patch, Size: 507 bytes --]

--- udev-010/namedev.c.orig	2003-12-24 17:19:52.992734720 +0200
+++ udev-010/namedev.c	2003-12-24 17:41:57.469383664 +0200
@@ -402,6 +402,9 @@
 			dbg("dev->bus='%s' sysfs_device->bus='%s'", dev->bus, sysfs_device->bus);
 			if (strcasecmp(dev->bus, sysfs_device->bus) != 0)
 				continue;
+		/* for this CALLOUT we need a valid sysfs_device */
+		} else if ((dev->bus != NULL) || (strlen(dev->bus) != 0)) {
+			continue;
 		}
 
 		/* substitute anything that needs to be in the program name */

[-- Attachment #1.3: ide-devfs-compat.sh --]
[-- Type: text/x-sh, Size: 927 bytes --]

#!/bin/sh

# udev CALLOUT script
# return compat devfs-names for ide-devices
# CALLOUT, BUS="ide", PROGRAM="/etc/udev/ide-devfs-compat.sh %k %b %n", ID="hd*", NAME="%1c", SYMLINK="%2c"

HOST=${2%\.[0-9]}
TARGET=${2#[0-9]\.}

if [ -z ${HOST#[13579]} ]; then
	HOST=`expr $HOST - 1`
	BUS="1"
else
	BUS="0"
fi

get_dev_number() {
	local x=
	local num=0
	local MEDIA=
	
	for x in /proc/ide/*/media; do
		if [ -e "$x" ]; then
			MEDIA=`cat $x`
			if [ "$MEDIA" = "$2" ]; then
				num=`expr $num + 1`
			fi
			if [ "$x" = "/proc/ide/$1/media" ]; then
				break
			fi
		fi
	done
	
	echo `expr $num - 1`
}

if [ -z "$3" ]; then
	MEDIA=`cat /proc/ide/$1/media`
	if [ "$MEDIA" = "cdrom" ]; then
		echo $1 cdroms/cdrom`get_dev_number $1 cdrom`
	elif [ "$MEDIA" = "disk" ]; then
		echo $1 discs/disc`get_dev_number $1 disk`/disc
	fi
else
	echo $1 discs/disc`get_dev_number $1 disk`/part$3
fi


[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 189 bytes --]

             reply	other threads:[~2003-12-24 22:25 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-12-24 22:25 Martin Schlemmer [this message]
2003-12-25  0:19 ` Possible udev bug and some questions Greg KH
2003-12-25  0:30 ` Greg KH
2003-12-25 10:06 ` Kay Sievers
2003-12-25 18:59 ` Martin Schlemmer
2003-12-25 19:32 ` Kay Sievers
2003-12-25 20:00 ` Kay Sievers
2003-12-25 21:04 ` Kay Sievers
2003-12-25 21:26 ` Kay Sievers
2003-12-25 22:58 ` Kay Sievers

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=marc-linux-hotplug-107230596809166@msgid-missing \
    --to=azarah@nosferatu.za.org \
    --cc=linux-hotplug@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).