lkml.org 
[lkml]   [2006]   [Apr]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
Subjectudev, PROGRAM and races...
Hi...

I (well, the distro I use) has a little problem with creation of links
for CD-ROM devices.

For example, in my box, hda is a DVDRW and hdd is a DVD reader.
I think I should have something like
cdrom0 -> hda
cdrom1 -> hdd
dvd0 -> hda
dvd1 -> hdd
cdrw0 -> hda
dvdrw0 -> hda

(with optional cdrom and dvd links to the default one, say just the
first).

This is done with rule like:

SUBSYSTEM=="block", ACTION=="add", ENV{ID_CDROM}=="?*", PROGRAM="/lib/udev/udev_cdrom_helper", SYMLINK+="%c"

This helper tries to get the next free %d index to create cdrom%d, for
example.
The problem is that the launch of both helpers for hda and add seems to be done
in parallel and the helper gets racy, so both cdroms get id 0, and the last
that comes owns it:

helper instance for hda helper instance for hdd
Does cdrom0 exist ? No
Does cdrom0 exist ? No
ln -sf hda cdrom0
ln -sf hdd cdrom0

????

Is there any way to serialize the calls to 'PROGRAM'. I tried something like:

SUBSYSTEM=="block", ACTION=="add", ENV{ID_CDROM}=="?*",
PROGRAM="/usr/bin/flock /sys/block /lib/udev/udev_cdrom_helper", SYMLINK+="%c"

But looks a lot ugly.

Any standard way to do this ?
Can I still use %e, or is it really really deprecated ? this was easy:

ENV{ID_CDROM_CD_RW}=="?*", SYMLINK+="burner%e", MODE="0666", GROUP="cdwriter"
ENV{ID_CDROM_DVD_R}=="?*", SYMLINK+="burner%e", MODE="0666", GROUP="cdwriter"

TIA

--
J.A. Magallon <jamagallon()able!es> \ Software is like sex:
werewolf!able!es \ It's better when it's free
Mandriva Linux release 2006.1 (Cooker) for i586
Linux 2.6.16-jam5 (gcc 4.1.1 20060330 (prerelease)) #1 SMP PREEMPT Tue
[unhandled content-type:application/pgp-signature]
\
 
 \ /
  Last update: 2006-04-05 00:25    [W:0.042 / U:0.532 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site