LinuxQuestions.org

LinuxQuestions.org (/questions/)
-   Linux - Hardware (http://www.linuxquestions.org/questions/linux-hardware-18/)
-   -   Why UDEV ignores multiple rules for the same device? (http://www.linuxquestions.org/questions/linux-hardware-18/why-udev-ignores-multiple-rules-for-the-same-device-672179/)

arctgx 09-24-2008 09:30 PM

Why UDEV ignores multiple rules for the same device?
 
I have created two experimental rules for one device sda1.
Code:

KERNEL=="sda1", \
        NAME="%k", \
        ATTRS{serial}=="0000000272",\
        SYMLINK+="pendr-eqe"

KERNEL=="sda1", \
        NAME="%k", \
        ATTRS{serial}=="0000000272",\
        SYMLINK+="pendr-eqs"

In my opinion, udev should create two symlink pointing to sda1 after sending uevent to it or executing udevadm test --force /block/sda/sda1.

Only one, first symlink is created. Why the second is ignored?

OK, I know that it is possible to put two link names in one SYMLINK key (SYMLINK+="pendr-eqe pendr-eqs"), but I would like to know why the first method doesn't work.

My udev version is 0.125-6 from Debian.

Hangdog42 09-25-2008 08:25 AM

A complete guess on my part, but I suspect that udev simply executes the first rule it find that matches the device and doesn't look for other rules that may match.

arctgx 09-25-2008 12:04 PM

Quote:

Originally Posted by Hangdog42 (Post 3291279)
A complete guess on my part, but I suspect that udev simply executes the first rule it find that matches the device and doesn't look for other rules that may match.

Then what is the sense of existing the "last_rule" option?

Hangdog42 09-25-2008 04:50 PM

Hey, I said it was a guess. It turns out it was a wrong one however:


Quote:

One device can be matched by more than one rule. This has it's practical advantages, for example, we can write two rules which match the same device, where each one provides its own alternate name for the device. Both alternate names will be created, even if the rules are in separate files. It is important to understand that udev will not stop processing when it finds a matching rule, it will continue searching and attempt to apply every rule that it knows about.
The above quote is from this site, so apparently you are allowed to do what you're trying to do. As to why yours doesn't work, try reversing the order and see if the first one is still the only one executed. According to the site I linked to, the += operator should be appending to a list of names pointing to the original device, however I suppose it is possible that by having two rules, the second time the list gets "appended" it gets wiped out and recreated instead.

arctgx 09-25-2008 07:58 PM

Independently of the order of rules, after reloading database and running udevadm test, only the first rule is executed.

Maybe this behaviour of udevd is a small bug. I should test a present or the recent version on another distro.

Sorry if my post sounded like I think that your comment would be statement, not supposition. I am still a beginner in writing English ;) This may be cause of many misunderstandings in the future.

slack32 01-16-2013 06:47 AM

i have similar problem. use udev 182.
But my problem is, i have multiple GROUP= directive on separate .rules files for the same device. one on /etc/udev/rules.d/, the other on /lib/udev/rules.d. i want the rules on /etc/udev/rules.d/ takes higher priority and then no other rules follow. This could be achieved with OPTIONS="last_rule". But newer udev seems dropped the "last_rule" directive.

Is there any other way ?


All times are GMT -5. The time now is 05:11 AM.