I noticed a comment in namedev.c which stated
"Figure out where the device symlink is at. For char devices this will
always be in the class_dev->path. But for block devices, it's
different. The main block device will have the device symlink in it's
path, but all partitions have the symlink in its parent directory. But
we need to watch out for block devices that do not have parents, yet
look like a partition (fd0, loop0, etc.). They all do not have a device
symlink yet. We do a sit and spin on waiting for them right now, we
should possibly have a whitelist for these devices here..."
I went ahead and created a whitelist for the block devices that look
like partitions (mainly by using devices.txt) and tested for any
performance increase that we would see. The whitelist only impacts
udevstart time depending on the state of UDEV_NO_SLEEP. Since the list
was short, I just did a sequential search and ordered the list in such a
way that those block devices which have more /dev entires (ex. loop0,
loop1, loop2, etc) appear sooner in the list and will thus be found
quicker. I've enclosed the patch and some of the performance results I
saw below. Basically, as the number of block devices without device
symlinks increased, the use of the whitelist improved udevstart
performance compared to just sitting and spinning. I just thought it
was interesting and thought I'd share. If you feel the patch is
beneficial please consider for merging. Also, if you'd be interested in
expanding the whitelist for other devices which are missing device
symlinks and seeing if there are added performance increases let me know
and I'll do what I can. Thanks,
Leann
Note: ex. loop represents all the loop devices (i.e. loop0, loop1,
loop2, etc)
block devices present with whitelist time
volume_id is now able to read NTFS labels. Not very exciting, but we
keep up to date with the version in HAL. Also __packed__ was needed for
the structs, cause the gcc 3.4 compiled version was no longer working
properly.
Here's an update to the documentation. It makes a few minor corrections and
adds info about multiple-symlinks.
It also seems that the patch I sent on April 27th (patching v0.53 to 0.54) was
not applied, so this patch includes that update too, which was also just some
small corrections plus added info on renaming network devices.
The recent version of klibc switched to -mregparm=3. This broke the
signal handlers parameter, cause it is called directly from the kernel
with the parameter on the stack not in a register.
Some file locations have changed since the spec file was last updated.
Also a failed build might leave behind a stale buildroot directory.
This patch should fix both problems.
Small patch to fix the evaluation logic for the return value of getenv()
in udev_config.c file. Basically, the actual values for the environment
variables "UDEV_NO_SLEEP" and "UDEV_NO_DEVD" were not being checked.
For example UDEV_NO_SLEEP could have been set to false but the line:
if (getenv("UDEV_NO_SLEEP") != NULL)
in this case would always evaluate to true, since getenv() returns
char*, thus the "udev_sleep" variable would be set incorrectly. The
patch makes sure to check the value returned by getenv() not just if
getenv() returned a value. Hope this made sense. Thanks,
On Tue, May 11, 2004 at 04:54:44PM -0700, Greg KH wrote:
> On Tue, May 11, 2004 at 01:16:41PM +0200, Kay Sievers wrote:
> > Hi,
> > the execution of udev depends on the proper fuction of udevd, the
> > serializing daemon. If we can't connect to udevd within a 20 second we
> > give up and the request to create a node is lost. Hope this never happens,
> > but a broken udevd may prevent udev from working.
> >
> > What do you think? Should we call the udev binary directly from udevsend
> > instead of discarding the event? This way we would create the node, regardless
> > of the state of udevd. It would be 20 seconds later and maybe not in the right
> > sequence order - but the node will propably be there.
> >
> > Does it sound sane? What do you think?
>
> That sounds like a good "failsafe" thing to do.
Here we go:
Add a fallback udev call to udevsend. If udevsend is unable to send the
event to udevd, we call the udev binary instead of doing nothing and exiting.
Here is a update to extras/volume_id/*
o The device is now specified by the DEVPATH in the environment,
it's no longer needed to pass the major/minor to the callout.
o leading spaces and slashes are now removed from the returned string
and spaces are replaced by underscore, to not to confuse udev.
o Arnd Bergmann <arnd@arndb.de> provided the code to recognize s390
dasd disk labels. The -d switch tries to read the main block device
instead of the partition.
On Fri, Apr 30, 2004 at 03:29:54PM -0700, Greg KH wrote:
> On Thu, Apr 29, 2004 at 11:04:46PM +0200, Kay Sievers wrote:
> > Hi,
> > here is a small udev toy, which enables udev to name partitions by
> > its filesystem label or uuid's.
> >
> > The following udev rule:
> >
> > KERNEL="sd*", PROGRAM="/sbin/udev_volume_id -M%M -m%m -u", SYMLINK="%c"
> >
> > creates a symlink with the uuid read from the filesystem. If no label or
> > uuid is found the program exits with nonzero and the rule will fail.
> >
> > ext2, ext3, reiserfs, xfs, jfs, vfat, msdos volume labels are supported,
> > ntfs and swap partitions can be recognized.
> >
> > It's possible to compile with klibc and the static binary takes 13kb.
>
> Very nice, I was wondering who was going to use that library to make
> such a tool. This is even better as we can use klibc for it.
Here is a update, which supports iso9660 and udf labels.
Not very useful in the udev case, but I've added it for hal,
so we just catch up with the latest version.
here is a small udev toy, which enables udev to name partitions by
its filesystem label or uuid's.
The following udev rule:
KERNEL="sd*", PROGRAM="/sbin/udev_volume_id -M%M -m%m -u", SYMLINK="%c"
creates a symlink with the uuid read from the filesystem. If no label or
uuid is found the program exits with nonzero and the rule will fail.
ext2, ext3, reiserfs, xfs, jfs, vfat, msdos volume labels are supported,
ntfs and swap partitions can be recognized.
It's possible to compile with klibc and the static binary takes 13kb.
Here we catch up, after the default config changes.
o the man page is updated to reflect the new default config
o /etc/udev/rules.d/ + permissions.d/ dirs are created now
o udev.rules is installed in /etc/udev/rules.d/50-udev.rules
so the user can easily order the files by prepending a number.
(RedHat has the same name in the last rpm.)
o defined directory names in the Makefile are all without slashes now,
not the first half with and the remaining without.
o all binaries are uninstalled now
o leading slashes in config values are now removed or prepended while the
config is parsed, so we are more robust if the usere changes something.
o replaced the macros from udev_config.c with real code, cause we can
skip if the value matches and not useless iterate over the remaining
fields.
o config parsing errors are logged with info() now, fixes the bug where
we report a error with debug_parse(), even when there isn't one
Sorry for the late email regarding the gcov code coverage information
for udev. For those of you who have not yet noticed, udev can now be
compiled with gcov support and provide code coverage analysis. All
pertinent scripts and information can be found in the udev tree. Please
refer to "README-gcov_for_udev" for detailed information on compiling
gcov into udev and obtaining code coverage analysis. I've enclosed a
patch that updates the README-gcov_for_udev. Also, "udev-test.pl" in
udev/test/ was expanded to test symlinks, permissions, and some lack of
node creation a little more thoroughly. All comments and feedback would
be greatly welcomed. Also, any extra testing would be appreciated.
Thanks,
On Sat, Apr 17, 2004 at 03:30:29AM +0200, Kay Sievers wrote:
> On Sat, Apr 17, 2004 at 02:04:55AM +0200, Kay Sievers wrote:
> > On Fri, Apr 16, 2004 at 04:04:42PM -0700, Greg KH wrote:
> > > Oh, and if you run the latest udev_test.pl, we have a bunch more tests,
> > > including a few that fail, if you were looking for something to do :)
> >
> > Will do it. We need to change apply_format(). I tries to expand the '%%'
> > with the next iteration over the string and removes the '%'.
The tests are all successful now.
If this patch breaks something else, we simply have too few tests :)
Here is the fix for extras/seliux/*
o install the binary in /sbin/
o add symlink to /etc/dev.d/ with suffix .dev
o removed the undefined udev_log variable
o fixed compiler warnings
Here's an update for the writing udev rules document.
- Minor corrections/clarifications
- Added info about using NAME{all_partitions}
- Added more info about udevinfo, simplifying the rule-writing process
You can ignore the diff I sent you yesterday - according to the 20040415 bk
snapshot on codemonkey.org, you haven't applied it yet. This patch
incorporates that update, and some other changes I just made.
Thanks to Yin, Hu <hu.yin@intel.com>, who made a nice perl script to test the
expected behavior of the udevd sequence number handling. The test sends
different SEQNUM sequences to udevd, while analyzing the reordering and timeout
handling of udevd.