1
0
mirror of https://github.com/systemd/systemd.git synced 2024-11-05 23:51:28 +03:00
Commit Graph

480 Commits

Author SHA1 Message Date
Kay Sievers
e2b362d9f2 libudev: monitor - unify socket message handling 2009-04-08 07:46:54 -07:00
Kay Sievers
662c311080 path_encode: fix max length calculation
Sebastian Krahmer wrote:
> it should reserve 4 times not 3 times len :)
2009-04-08 06:06:01 -07:00
Alan Jenkins
4b09a2fc43 avoid leaking netlink socket fd to external programs
The netlink socket is now used by udev event processes. We should take
care not to pass it to the programs they execute. This is the same way
the inotify fd was handled.

Signed-off-by: Alan Jenkins <alan-jenkins@tuffmail.co.uk>
2009-04-06 07:23:35 -07:00
Kay Sievers
52761bb0a9 IMPORT: 2048 -> 4096 bytes buffer 2009-03-30 20:09:08 +02:00
Kay Sievers
f2b937440c "UDEV_MONITOR_KERNEL/UDEV" -> "kernel/udev" 2009-03-29 20:08:52 +02:00
Kay Sievers
116254097a send monitor events back to netlink socket
Instead of of our own private monitor socket, we send the
processed event back to our netlink socket, to the multicast
group 2 -- so any number of users can listen to udev events,
just like they can listen to kernel emitted events on group 1.
2009-03-29 04:24:39 +02:00
Kay Sievers
4061ab9f4b libudev: GPL -> LGPL 2009-03-26 19:29:36 +01:00
Kay Sievers
498c2750bf udevadm: monitor - clarify printed header 2009-03-18 18:47:23 +01:00
Kay Sievers
f454f6708a udevadm: test - handling trailing '/' in devpath
On Wed, Mar 18, 2009 at 16:00, Matthias Schwarzott <zzam@gentoo.org> wrote:
found out how the error occurs:
It is a difference between
A. udevadm test /sys/class/mem/null/
and
B. udevadm test /sys/class/mem/null

Case A was the case that showed the error behaviour. It seems udevadm is
confused by the trailing slash. This behaviour seems to be there since ages.
2009-03-18 18:42:16 +01:00
Robby Workman
1d59ba4077 udevadm: trigger - add "--action" to --help 2009-03-17 10:31:32 +01:00
Scott James Remnant
bb38678e3c udevadm: settle - synchronise with the udev daemon
There's still a slight race condition when using udevadm settle, if the
udev daemon has a pending inotify event but hasn't yet generated the
"change" uevent for it, the kernel and udev sequence numbers will match
and settle will exit.

Now udevadm settle will send a control message to udevd, which will
respond by sending SIGUSR1 back to the waiting udevadm settle once it
has completed the main loop iteration in which it received the control
message.

If there were no pending inotify events, this will simply wake up the
udev daemon and allow settle to continue.  If there are pending inotify
events, they are handled first in the main loop so when settle is
continued they will have been turned into uevents and the kernel
sequence number will have been incremented.

Since the inotify event is pending for udevd when the close() system
call returns (it's queued as part of the kernel handling for that system
call), and since the kernel sequence number is incremented by writing to
the uevent file (as udevd does), this solves the race.

When the settle continues, if there were pending inotify events that
udevd had not read, they are now pending uevents which settle can wait
for.

Signed-off-by: Scott James Remnant <scott@ubuntu.com>
2009-03-12 10:02:37 +00:00
Kay Sievers
c2c24d4d3c udevadm: settle - use timeout signal, instead of loop counter 2009-03-11 15:06:14 +01:00
Kay Sievers
89d080c3ae libudev: ctrl - return error after sending ctrl message 2009-03-11 13:32:39 +01:00
Kay Sievers
f1e7e36046 udevadm: add text for new options to command and man page 2009-03-07 02:32:40 +01:00
Kay Sievers
45bcd16ca5 udevd: switch watch symlinks to devpath
Some broken tools get confused following links to /sys, switch
to link targets carrying the devpath instead of the syspath, like
the queue links.
2009-03-05 00:35:58 +01:00
Kay Sievers
98d3d51715 udevadm: settle - add --seq-start= --seq-end=
It might be useful in some cases not to wait for "all" events.

  $ read START < /sys/kernel/uevent_seqnum
  $ (do something which may create uevents)
  $ udevadm settle --seq-start=$START
2009-03-04 23:48:53 +01:00
Kay Sievers
a5d8cffad9 libudev: queue - use lstat() to check existence of symlink 2009-03-04 23:32:16 +01:00
Michael Prokop
2236ddae2d fix compile error in debug mode
When building with './configure --enable-debug && make' it fails with:
  udev-rules.c: In function ‘dump_token’:
  udev-rules.c:366: error: ‘struct <anonymous>’ has no member named ‘i’

Signed-off-by: Michael Prokop <mika@grml.org>
2009-03-03 17:27:00 +01:00
Kay Sievers
b38a5801f9 udevadm: info - export all devices with --export-db 2009-02-26 22:59:40 +01:00
Kay Sievers
46f194cbde add "nowatch" to disable a default installed watch with a later rule 2009-02-25 11:18:15 +01:00
Kay Sievers
3d3a0a709a use the event udev_device to disable the watch on "remove" 2009-02-24 15:11:17 +01:00
Kay Sievers
d5d04d4f9f remove static local variable 2009-02-24 12:58:48 +01:00
Scott James Remnant
80be8c48c5 Look at more inotify events in the buffer than just the first. 2009-02-23 18:33:49 +00:00
Scott James Remnant
b8e96d67a2 lookup the old watch handle; reload only if has a path 2009-02-23 17:59:01 +00:00
Scott James Remnant
c08337da5c Output watch handle in udevadm info. 2009-02-23 17:48:18 +00:00
Scott James Remnant
9ce462721a Put a log message in a more sensible place. 2009-02-23 17:46:00 +00:00
Scott James Remnant
047f88bca3 Use the udevdb to speed up watch clearing.
Also return a udev_device when looking up by handle as well, so
everything works the same way.
2009-02-23 17:43:53 +00:00
Scott James Remnant
25bdd197ec Store watch handle in db. 2009-02-23 17:34:07 +00:00
Scott James Remnant
d7ce7539d3 Allow watch handle to be stored in the udevdb. 2009-02-23 17:31:26 +00:00
Scott James Remnant
03e0170db3 Cleanup a little.
Move some of the checks into udev_watch_begin() and udev_watch_clear()
so we don't have to repeat them all the time.
2009-02-23 17:21:24 +00:00
Scott James Remnant
521b3a9211 Clear existing inotify watch before processing.
Likewise when re-processing an event, we want to drop the existing
inotify watch first to avoid side-effects.
2009-02-23 17:19:05 +00:00
Scott James Remnant
5ae82640c5 Don't add inotify watch until RUN rules processed.
The programs we RUN can open device nodes, and thus we can end up
chasing our own tail.
2009-02-23 17:17:20 +00:00
Kay Sievers
64746532e8 rules: add "watch" option to dm and md rules 2009-02-13 16:02:36 +01:00
Kay Sievers
4aca304e48 use global "reload_config" flag 2009-02-11 21:56:35 +01:00
Scott James Remnant
bd284db142 udevd: optionally watch device nodes with inotify
This allows you to re-process the rules if the content of the device
has been changed, most useful for block subsystem to cause vol_id to
be run again.
2009-02-11 17:38:56 +00:00
Kay Sievers
10b2d011e7 fix NAME= and OPTION+="string_escape=..." logic
Scott discovered this silly bug.
2009-02-08 16:02:15 +01:00
Kay Sievers
a402404fb2 test: add test for empty and non-existent ATTR 2009-02-05 12:40:15 +01:00
Kay Sievers
647f7c49e8 fix NAME="" logic
Reported-By: Soh Kam Yung <sohkamyung@gmail.com>
2009-01-30 03:53:09 +01:00
Kay Sievers
722af2d0d3 man: fix grammar
Reported-by: Robert Peterson <rpeterso@redhat.com>
2009-01-25 21:21:43 +01:00
Kay Sievers
c2de781ef0 udevadm: settle - fix typo 2009-01-23 02:19:12 +01:00
Kay Sievers
5db88229d1 udevd: add back SA_RESTART
<Keybuk> poll, select, ppoll, pselect, epoll, etc. are *explicitly* NOT restarted in case of signal
<kay> ok
2009-01-21 18:55:59 +01:00
Kay Sievers
6469c77216 split up long line 2009-01-21 15:11:38 +01:00
Kay Sievers
4b0faa2aa0 Merge commit '9032f119f07ad3b5116b3d4858816d851d4127de' 2009-01-21 14:43:22 +01:00
Kay Sievers
2c7b88c4a5 Merge commit '5f03ed8a56d308af72db8a48ab66ed68667af2c6'
Conflicts:
	udev/udevd.c
2009-01-21 14:42:30 +01:00
Kay Sievers
c807ad918c increase netif renaming timeout from 30 to 90 seconds 2009-01-21 11:17:58 +01:00
Olaf Kirch
d1cc6562f3 reap children faster
udevd's event_queue_manager loop is pretty sensitive to the
delays of exiting child processes. I found that it helps boot
times if we try to reap children as quickly as possible.

This patch changes event_queue_manager to call sigchilds_waiting
if it finds a signal has been received.

Signed-off-by: Olaf Kirch <okir@suse.de>
2009-01-21 11:17:11 +01:00
Kay Sievers
e9a77fd828 open-code pollfd setup 2009-01-21 11:09:27 +01:00
Scott James Remnant
9032f119f0 Expose delayed name resolution
udevd had the ability to delay name resolution until the event, but this
was never exposed.  Add a --resolve-names=late option to do so.
2009-01-20 21:36:09 +00:00
Scott James Remnant
5f03ed8a56 Allow user and group lookup to be disabled.
In certain cut-down situations such as an installer or inside the
initramfs, we simply don't have any kind of name service.  While we
could use rules without OWNER or GROUP, it's better to have the same
rules as a full system and have udevd ignore those parts of the rules.

Adds a --resolve-names=never switch to udevd that has this effect.
2009-01-20 21:33:02 +00:00
Olaf Kirch
3210a72ba3 udevd: use ppoll instead of signal pipes
udevd uses a rather old-fashioned way of handling signals
while waiting for input through select (ie by using an unnamed
pipe, to which the signal handler writes one byte for every signal
received). This is rather awkward and may potentially even block
if we receive more signals than the kernel's pipe buffer.

This patch replaces all of that with ppoll, which was designed
for this purpose.

It also removes the SA_RESTART flag from all installed signal
handlers, because otherwise the ppoll call would just be restarted
after handling eg a SIGCHLD.

Signed-off-by: Olaf Kirch <okir@suse.de>
2009-01-20 12:49:20 +01:00
Alan Jenkins
a3ab20722d remove stray initializer
Picked up by "gcc -Wextra".

udevadm.c:83: warning: initialized field overwritten
udevadm.c:83: warning: (near initialization for ‘cmds[2].help’)

This is just a cleanup.  It doesn't change the code generated by gcc.
2009-01-16 21:33:33 +01:00
Alan Jenkins
e5e641518b man: typo fixes 2009-01-16 21:32:25 +01:00
Kay Sievers
fc7d16f993 cleanup old names before creating the new names
Scott found that the node /dev/pktcdvd can not be replaced by
/dev/pktcdvd/control by changing the rules, and re-trigger the
event. We used to create the new names before we cleaned up the
old ones, which can not work if we need to create subdir with
the same name.
2009-01-16 21:15:53 +01:00
Kay Sievers
8257730d39 remove name from index if the node name has changed
Scott discovered that a changed rule, which renames a device node
leaves the old node name around as a symlink. So drop the reference
to the old name.
2009-01-16 21:14:13 +01:00
Kay Sievers
ec2dd02e2a udevadm: test - remove --force option
Since a while we change the database with a "test" run, but do not update
the node and symlinks. We need to "force" all the time, to keep things
in sync.
2009-01-15 20:20:16 +01:00
Kay Sievers
92e52e2fd1 do not complain about a missing /etc/udev/rules.d/
Scott mentioned that initramfs does not neccessarily have that
directory, so do not log an error.
2009-01-15 17:52:17 +01:00
Kay Sievers
affed87af1 libudev: use 4096 bytes buffer for attribute reading 2009-01-14 21:54:31 +01:00
Kay Sievers
56c141eceb libudev: test - add udev_device_get_property_value() 2009-01-06 16:52:40 +01:00
Kay Sievers
3d7b2831cd libudev: device - add udev_device_get_property_value() 2009-01-06 00:26:28 +01:00
Kay Sievers
b620292bd2 udevadm: s/udevinfo/udevadm info/ 2009-01-05 12:28:09 +01:00
Kay Sievers
0c057e9c75 enable skipping of "naming-only" rules 2009-01-05 02:55:37 +01:00
Kay Sievers
58d882a6d7 libudev: subsytem -> subsystem 2009-01-03 15:24:59 +01:00
Marcel Holtmann
61ee8cc92d libudev: device - remove udev_device_get_parent_with_subsystem 2009-01-03 15:12:28 +01:00
Marcel Holtmann
883012d49b libudev: device - lookup subsystem and devtype together 2009-01-03 15:12:17 +01:00
Kay Sievers
b92511747a libudev: device - read "uevent" only if info is not already loaded 2009-01-03 04:55:15 +01:00
Michal Soltys
db71b500b2 man: udev - update NAME assignment 2009-01-02 14:07:54 +01:00
Marcel Holtmann
bf8b2ae177 libudev: device - add devtype support 2009-01-02 04:37:04 +01:00
Kay Sievers
f089350234 libudev: enumerate - add lookup by property 2008-12-29 07:42:19 +01:00
Kay Sievers
64be143742 require non-SYSFS_DEPRECATED 2.6.20+ kernel 2008-12-29 06:04:09 +01:00
Kay Sievers
1028fe14b6 if needed, store database entries also for devices which do not have a device node 2008-12-28 01:49:01 +01:00
Kay Sievers
c4e63d5412 "'/sbin/modprobe abnormal' exit" - also print program options 2008-12-20 00:03:53 +01:00
Kay Sievers
4f06aaa9d8 libudev: include <sys/types.h> 2008-12-16 14:48:33 +01:00
Kay Sievers
b76ad2e537 udevadm: settle - allow --timeout=0 and --quiet 2008-12-08 16:48:54 +01:00
Kay Sievers
5d89ef7bf9 make: do not delete autotools generated file with distclean
[...] running the command
`make maintainer-clean' should not delete `configure' even if
`configure' can be remade using a rule in the Makefile.  More
generally, `make maintainer-clean' should not delete anything that
needs to exist in order to run `configure' and then begin to build
the program.  This is the only exception; `maintainer-clean' should
delete everything else that can be rebuilt.
2008-12-06 04:03:08 +01:00
Kay Sievers
e2c9d3c36f fix network interface name swapping 2008-12-02 01:04:23 +01:00
Kay Sievers
ae2d346642 silence PHYSDEV* warning for WAIT_FOR* rules 2008-11-24 21:24:04 +01:00
Kay Sievers
f408fd919a fix handling of swapping node name with symlink name 2008-11-24 02:21:12 +01:00
Gabor Z. Papp
28673dd75c include errno.h in sysdeps.h 2008-11-21 04:19:11 +01:00
Kay Sievers
bbfaec2b2f libudev: accept NULL whitelist in util_replace_chars() 2008-11-20 02:43:34 +01:00
Kay Sievers
5375c80eba fix $links substitution for devices without any link
Reported-by: Michel Hermier <michel.hermier@gmail.com>
2008-11-17 15:24:47 +01:00
Kay Sievers
c969f88062 udevd: fix cleanup of /dev/.udev/uevent_seqnum 2008-11-17 14:43:58 +01:00
Kay Sievers
096e59edc9 limit $attr(<symlink>) magic to well-known links only 2008-11-17 02:01:37 +01:00
Sergey Vlasov
56116314d1 udevadm: fix option parsing breakage with klibc
The klibc implementation of getopt_long() behaves slightly different
from the glibc one - in particular, it treats the change of the option
string argument between invocations as start of parsing a different
command line, and resets its state.  However, the udevadm code
expected getopt_long() invocations in subcommands to continue parsing
the rest of command line after initial options has been parsed at the
top level; with klibc this broke, causing all udevadm subcommands to
stop recognizing their options.

Instead of relying on the glibc behavior, reset the getopt_long()
state properly before invoking the subcommand handler: move argv to
point to the subcommand name, decrease argc appropriately, and set
optind = 0.  This also fixes a minor bug visible with glibc - without
setting optind = 0 all getopt_long() calls in subcommand handlers were
behaving as if "+" was specified as the first character of the option
string (which disables option reordering), because that state was set
by the first getopt_long() call at the top level, and was not reset
when parsing subcommand options.

Signed-off-by: Sergey Vlasov <vsu@altlinux.ru>
2008-11-15 02:01:15 +01:00
Kay Sievers
f454ecf754 libudev: device - handle disk "device" link for partitions in deprecated sysfs layout
Thanks to Mikhail Kolesnik <mike@openbunker.org> for finding this.
2008-11-14 18:26:49 +01:00
Kay Sievers
949075dbbd remove len == 0 check, the index root is always '\0' 2008-11-13 18:21:28 +01:00
Kay Sievers
50025605e0 udevadm: info - unify -V and --version 2008-11-13 07:31:04 +01:00
Kay Sievers
95d61c2745 set errno = ENOSYS in inotify stub 2008-11-13 01:52:33 +01:00
Kay Sievers
023ed7b0a3 merge trie nodes, childs and root into a single array 2008-11-13 00:52:12 +01:00
Kay Sievers
0dd9f015d3 reserve child slot 0 2008-11-12 15:01:20 +01:00
Kay Sievers
bcf44d5576 string index - split nodes and childs to allow and unlimited number of childs 2008-11-12 05:50:05 +01:00
Kay Sievers
1c8af93aca silence "comparison between signed and unsigned" 2008-11-11 23:47:01 +01:00
Alan Jenkins
1449a55ded udevd: de-duplicate strings in rules
On my Ubuntu installation this removes 15k of duplicate strings,
using a temporary index of about 25k.

Signed-off-by: Alan Jenkins <alan-jenkins@tuffmail.co.uk>
2008-11-11 22:19:11 +01:00
Kay Sievers
5d6a1fa6e9 convert debug string arrays to functions
On Fri, Nov 7, 2008 at 13:07, Matthias Schwarzott <zzam@gentoo.org> wrote:
> I managed to let udev-131 segfault at startup.
>
> I configured it like this:
> CFLAGS="-Wall -ggdb" ./configure --prefix=/usr --sysconfdir=/etc --exec-prefix=
>
> Running it in gdb shows it segfaults at udev-rules.c:831
>
> (gdb) run
> Starting program: /tmp/udev-131/udev/udevd
>
> Program received signal SIGSEGV, Segmentation fault.
> 0x0804ea06 in get_key (udev=0x9175008, line=0xafcdc8f0, key=0xafcdc5d8,
> op=0xafcdc5d0, value=0xafcdc5d4)
>    at udev-rules.c:831
> 831             dbg(udev, "%s '%s'-'%s'\n", operation_str[*op], *key, *value);

If compiled without optimization, the dbg() macro dereferences variables
which are not available. Convert the string array to a function, which just
returns NULL if compiled without DEBUG.
2008-11-07 15:59:58 +01:00
Kay Sievers
e230e966f4 fix size_t compiler warning on 32 bit platforms 2008-11-07 02:58:54 +01:00
Kay Sievers
11d5eec2cb udevadm: settle - exit if udevd exits 2008-11-06 19:41:58 +01:00
Kay Sievers
78230c0dbe cleanup /dev/.udev/queue on startup and exit 2008-11-06 17:43:12 +01:00
Kay Sievers
90024521e7 fix indentation 2008-11-06 02:56:45 +01:00
Alan Jenkins
3f3aa9f57c udevd: shrink struct token to 12 bytes 2008-11-05 22:28:52 +01:00
Kay Sievers
adea2cc22b $links should be relative 2008-11-05 22:13:49 +01:00
Kay Sievers
92f4313665 unify string replacement 2008-11-05 21:49:52 +01:00
Kay Sievers
77b852f333 do not import the "uevent" file when we only read the db to get old symlinks 2008-11-05 12:23:06 +01:00
Kay Sievers
6e0cb78c9d fix cleanup of possible left-over symlinks 2008-11-05 04:45:23 +01:00
Kay Sievers
7c4573e46d fix $links substitution 2008-11-05 04:08:44 +01:00
Kay Sievers
08e7f22913 info() PROGRAM and IMPORT execution 2008-11-05 04:05:17 +01:00
Kay Sievers
1e78dcbe51 fix list handling in enumerate and rules file sorting 2008-11-04 20:19:01 +01:00
Kay Sievers
4052400fa0 move debugging strings inside #ifdef DEBUG 2008-11-01 21:05:25 +01:00
Kay Sievers
86b5778857 move some info() to dbg() 2008-11-01 20:16:24 +01:00
Kay Sievers
5755d586e1 fix udev_node_update_old_links() logic
No need to check if links that still belong to us, need to be updated.
2008-11-01 20:05:41 +01:00
Kay Sievers
00f98bd2b3 skip entire rule containing device naming keys, if no device can be named
If rules set NAME, SYMLINK, OWNER, GROUP, MODE, events without a device node
and remove events will skip the entire rule. The old parser did the same.
2008-11-01 19:12:20 +01:00
Kay Sievers
0ef254d580 log rules file and line number when NAME, SYMLINK, OWNER, GROUP, MODE, RUN is applied 2008-11-01 18:34:54 +01:00
Alan Jenkins
d15fcce4b3 udevd: be more careful when matching against parents
I'm worried about what will happen with things like

KERNELS=="*" # pointless rule
KERNELS=="doesnt-match" # another pointless rule

Since TK_RULE < TK_M_PARENTS_MAX, we will try to match all three tokens
against parents of the current device.  I can't think of a bad case,
but it's not exactly good either.

Signed-off-by: Alan Jenkins <alan-jenkins@tuffmail.co.uk>
2008-11-01 17:32:16 +01:00
Alan Jenkins
11ae757850 udevd: fix termination of rule execution
LAST_RULE was broken, and I broke TK_END by making it do the same.
It used a "break" which exited the switch statement, but not the loop!

==2953== Invalid read of size 4
==2953==    at 0x4081EE: dump_token (udev-rules.c:859)
==2953==    by 0x40BADB: udev_rules_apply_to_event (udev-rules.c:1849)
==2953==    by 0x403F17: udev_event_execute_rules (udev-event.c:554)
==2953==    by 0x418626: main (test-udev.c:100)
==2953==  Address 0x55ab1f8 is 0 bytes after a block of size 80 alloc'd
==2953==    at 0x4C23082: realloc (vg_replace_malloc.c:429)
==2953==    by 0x40B13B: udev_rules_new (udev-rules.c:1670)
==2953==    by 0x418536: main (test-udev.c:84)
...

Signed-off-by: Alan Jenkins <alan-jenkins@tuffmail.co.uk>
2008-11-01 17:29:26 +01:00
Kay Sievers
27691aa3ae write trace log to stderr 2008-10-31 16:22:55 +01:00
Kay Sievers
aeb53ca3d6 ATTR{}== always fails if the attribute does not exist 2008-10-29 22:22:12 +01:00
Kay Sievers
0bc74ea79f udevd: merge exec and run queue to minimize devpath string compares 2008-10-29 17:32:13 +01:00
Alan Jenkins
6270756cdc udevd: simplify rules execution loop
cur can't become NULL, and the check for TK_END
can be folded into the switch statement.

Signed-off-by: Alan Jenkins <alan-jenkins@tuffmail.co.uk>
2008-10-28 10:02:43 +01:00
Alan Jenkins
be7de4097a kerneldoc comment fixes
s/ressources/resources/

Also reduce commas per sentence and add a possessive apostrophe.
2008-10-26 15:55:47 +01:00
Kay Sievers
427e20b261 libudev: device - allocate envp array only once 2008-10-26 14:31:46 +01:00
Kay Sievers
c6243a414e test: add RUN+="socket: ..." to a test to run monitor code 2008-10-26 04:35:32 +01:00
Kay Sievers
6493e655f7 libudev: device - fill envp array while composing monitor buffer
Thanks to Alan Jenkins, for the idea.
2008-10-26 03:39:41 +01:00
Kay Sievers
dc4c7e463d fix $attr{[<subsystem>/<sysname>]<attribute>} substitution 2008-10-26 02:48:14 +01:00
Kay Sievers
1822e9b033 do not init string arrays, just clear first byte 2008-10-26 02:31:54 +01:00
Kay Sievers
21cfb0436c match_attr() - copy attr value only when needed 2008-10-26 02:16:54 +01:00
Alan Jenkins
cd94c04c51 udevd: avoid implicit memset in match_attr()
Initializing a char array to "" is equivalent to a memset()
call - which is exactly what it gets compiled to.

Fixing this one callsite reduced memset() _user_ cpu cycles
from 2-4% to 0.05% on the EeePC.

Signed-off-by: Alan Jenkins <alan-jenkins@tuffmail.co.uk>
2008-10-26 02:11:56 +01:00
Alan Jenkins
e25fa4faf5 udevd: use a tighter loop for compare_devpath()
This crops up in my threaded udevd profiles from time to time.
It's not consistent - probably due to variations in the number
of concurrent events - but it can hit 4% user time and higher.

The change halves the user time spent in compare_devpath().

Signed-off-by: Alan Jenkins <alan-jenkins@tuffmail.co.uk>
2008-10-25 19:41:52 +02:00
Alan Jenkins
3e5c759543 fix handling of string_escape option 2008-10-25 15:19:48 +02:00
Kay Sievers
91a75e4ad4 match KEY="A|B" without temporary string copy 2008-10-25 03:00:03 +02:00
Kay Sievers
b62557daff remove debug printf 2008-10-24 18:09:13 +02:00
Kay Sievers
39a08013a2 fix "unused" warnings 2008-10-24 17:42:31 +02:00
Kay Sievers
c265440279 libudev: monitor - cache result of monitor send buffer 2008-10-24 16:36:27 +02:00
Kay Sievers
3c67f7d2df libudev: monitor - replace far too expensive snprintf() with strlcpy() 2008-10-24 15:09:43 +02:00
Kay Sievers
db463fd309 special-case "?*" match to skip fnmatch() 2008-10-24 14:19:42 +02:00
Kay Sievers
ac218d9cc8 determine at rule parse time if we need to call fnmatch()
This cuts down the large rule set's 120.000 calls to fnmatch() to
51.000, and we can just call strcmp for the simple matches.
2008-10-24 13:32:32 +02:00
Kay Sievers
b0f7409f24 distinguish "match" from "assign" by (op < OP_MATCH_MAX) 2008-10-24 11:38:05 +02:00
Kay Sievers
154a7b8428 cache uid/gid during rule parsing
This cuts down the number of parsing /etc/group from ~700 to 11,
with some large rule files installed.
2008-10-24 10:51:04 +02:00
Kay Sievers
f6bb9e981a fix uninitialized variable warnings 2008-10-24 09:37:37 +02:00
Kay Sievers
34d6a259dc rules: let empty strings added to buffer always return offset 0 2008-10-24 08:07:37 +02:00
Kay Sievers
548459e939 skip SYMLINK rules for devices without a device node 2008-10-23 21:42:23 +02:00
Alan Jenkins
7aeeaedc5f udevd: fix WAIT_FOR_SYSFS execution order
The wait should be ordered after matching KERNEL, ENV, etc.
but before ATTR.

Without this, WAIT_FOR_SYSFS rules will be applied unconditionally
to all events.

Signed-off-by: Alan Jenkins <alan-jenkins@tuffmail.co.uk>
2008-10-23 20:59:17 +02:00
Alan Jenkins
84629ccd85 udevd: fix memory leak
Re: b99028c963 shrink struct udev_event

TEST 136: test multi matches 2
device '/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0' expecting node 'right'
==15011==
==15011== 7 bytes in 1 blocks are definitely lost in loss record 1 of 1
==15011==    at 0x47F9AB8: malloc (vg_replace_malloc.c:207)
==15011==    by 0x489CB5F: strdup (in /lib32/libc-2.7.so)
==15011==    by 0x8050F40: udev_rules_apply_to_event (udev-rules.c:1973)
==15011==    by 0x804A658: udev_event_execute_rules (udev-event.c:549)
==15011==    by 0x805A636: main (test-udev.c:100)
add:         ok
==15012==
==15012== 7 bytes in 1 blocks are definitely lost in loss record 1 of 1
==15012==    at 0x47F1AB8: malloc (vg_replace_malloc.c:207)
==15012==    by 0x4898B5F: strdup (in /lib32/libc-2.7.so)
==15012==    by 0x8050F40: udev_rules_apply_to_event (udev-rules.c:1973)
==15012==    by 0x804A9DF: udev_event_execute_rules (udev-event.c:658)
==15012==    by 0x805A636: main (test-udev.c:100)
remove:      ok

Signed-off-by: Alan Jenkins <alan-jenkins@tuffmail.co.uk>
2008-10-23 11:33:22 +02:00
Kay Sievers
b99028c963 shrink struct udev_event 2008-10-23 02:57:08 +02:00
Kay Sievers
40fd3bc837 shrink struct udev_event 2008-10-23 02:34:22 +02:00
Kay Sievers
5a05e120af do not create temporary node ($tempnode) if node already exists 2008-10-23 01:13:52 +02:00
Kay Sievers
6880b25d40 replace in-memory rules array with match/action token list
The in-memory rule array of a common desktop distro install took:
  1151088 bytes
with the token list:
  109232 bytes tokens (6827 * 16 bytes), 71302 bytes buffer
2008-10-23 00:13:59 +02:00
Kay Sievers
a391f49d7f handle numerical owner/group string in lookup_user/group() 2008-10-22 23:59:53 +02:00
Alan Jenkins
aaff3d023f use re-entrant variants of getpwnam and getgrnam
Signed-off-by: Alan Jenkins <alan-jenkins@tuffmail.co.uk>
2008-10-22 18:05:46 +02:00
Kay Sievers
14f4025607 add util_resolve_subsys_kernel() 2008-10-22 18:03:38 +02:00
Alan Jenkins
111e4f81ff replace strncpy() with strlcpy()
The problem was strncpy() doesn't stop after writing the terminating
NUL; by definition it goes on to zero the entire buffer.

I spy another use of strncpy in udev_device_add_property_from_string(),
which is responsible for another ~1% user cpu time...

Signed-off-by: Alan Jenkins <alan-jenkins@tuffmail.co.uk>
2008-10-21 23:55:13 +02:00
Kay Sievers
9a23e9e775 libudev: device - 128 -> ENVP_SIZE 2008-10-21 13:58:19 +02:00
Alan Jenkins
be18918f65 libudev: allocate udev_device->envp[] dynamically
Measured 2% _user_ cpu time reduction on EeePC coldplug.

Signed-off-by: Alan Jenkins <alan-jenkins@tuffmail.co.uk>
2008-10-21 13:56:23 +02:00
Alan Jenkins
fa0e955a93 libudev: util - optimize path_encode()
Since we already know the length, use memcpy() instead.
Measured 2% _user_ cpu time reduction on EeePC coldplug.

Signed-off-by: Alan Jenkins <alan-jenkins@tuffmail.co.uk>
2008-10-21 13:09:31 +02:00
Alan Jenkins
b29a5e4ab9 use more appropriate alternatives to malloc()
Use calloc to request cleared memory instead.
Kernel and libc conspire to make this more efficient.

Also, replace one malloc() + strcpy() with strdup().

Signed-off-by: Alan Jenkins <alan-jenkins@tuffmail.co.uk>
2008-10-21 12:54:57 +02:00
Kay Sievers
a8a8930072 do not use the new work-in-progress parser rule matcher 2008-10-21 12:45:54 +02:00
Kay Sievers
20254eb021 add "root" == 0 shortcuts to lookup_user/group() 2008-10-21 12:43:07 +02:00
Kay Sievers
94db05d288 replace missing get_attr_value() -> get_sysattr_value() 2008-10-21 12:42:13 +02:00
Kay Sievers
69239210be libudev: device - get_attr_value() -> get_sysattr_value() 2008-10-20 18:12:36 +02:00
Kay Sievers
54808d77a3 prefix udev-util.c functions with util_* 2008-10-18 20:12:55 +02:00
Kay Sievers
c3b1fa66d2 selinux_init(udev) -> udev_selinux_init(udev) 2008-10-18 19:30:42 +02:00
Kay Sievers
eb8837e15c udev_list_cleanup() -> udev_list_cleanup_entries() 2008-10-18 19:27:38 +02:00
Kay Sievers
f1128767cb move udev_rules_apply_format() to udev-event.c 2008-10-18 19:19:56 +02:00
Kay Sievers
2d73813ebc udev_rules_run() -> udev_event_execute_run(); 2008-10-18 15:50:16 +02:00
Kay Sievers
dcdcb8cc06 udev_event_run() -> udev_event_execute_rules() 2008-10-18 15:46:55 +02:00
Alan Jenkins
836dcf951c udevd: avoid overhead of calling rmdir on non-empty directories
Unfortunately the linux rmdir implementation unhashes the dentry
even when the directory is not removed.  This is apparently by
design (for filesystems that don't allow deleting open files).

Results from time(1) and oprofile follow.

Before:

0.35user 0.90system
samples  %        image name               symbol name
608       9.6738  vmlinux                  shrink_dcache_parent
293       4.6619  vmlinux                  copy_page_c
271       4.3119  vmlinux                  copy_page_range
257       4.0891  udevd                    udev_rules_iter_next

After:

0.31user 0.67system
samples  %        image name               symbol name
361       5.0419  vmlinux                  copy_page_range
322       4.4972  udevd                    udev_rules_iter_next
300       4.1899  vmlinux                  copy_page_c

Signed-off-by: Alan Jenkins <alan-jenkins@tuffmail.co.uk>
2008-10-18 15:28:49 +02:00
Kay Sievers
d0db192fa5 move run_program to util 2008-10-18 15:25:05 +02:00
Kay Sievers
d7ddce186c make struct udev_rules opaque 2008-10-18 15:02:01 +02:00
Kay Sievers
c7521974a3 merge udev-rules.c and udev-rules-parse.c 2008-10-18 14:33:37 +02:00
Kay Sievers
bec02e3304 delete list.h 2008-10-17 19:29:57 +02:00
Kay Sievers
7e02792760 udevd: use udev_list_node 2008-10-17 18:59:27 +02:00
Kay Sievers
9dcf7ec8a0 libudev: make list_node functions available 2008-10-17 18:59:08 +02:00
Kay Sievers
b692a75089 libudev: ctrl - change magic to integer 2008-10-17 17:32:17 +02:00
Kay Sievers
cb25a9585d libudev: monitor - add set_receive_buffer_size() 2008-10-17 16:49:27 +02:00
Kay Sievers
bdeab5c7fd libudev: add sysnum to test program 2008-10-17 13:54:14 +02:00
Alan Jenkins
babcf3cb22 libudev: fix sysnum logic for digit-only device names 2008-10-17 13:19:54 +02:00
Kay Sievers
3feeb77c97 libudev: list - prepend udev_* to all functions 2008-10-17 01:39:10 +02:00
Kay Sievers
d130881d34 delete udev-util-file.c 2008-10-17 00:42:48 +02:00
Kay Sievers
fc42bd5d6b update rules file parsing 2008-10-17 00:40:03 +02:00
Kay Sievers
bb144ed14d update IMPORT= file/stdout property parsing 2008-10-16 22:41:52 +02:00
Kay Sievers
c28c4486af run_program: prevent empty last argv entry 2008-10-16 21:35:11 +02:00
Kay Sievers
be7f7f5701 fix sorting of rules files 2008-10-16 21:12:08 +02:00
Kay Sievers
a390e6f764 delete name_list, move common file functions 2008-10-16 20:23:56 +02:00
Kay Sievers
daa849db6f udev-rules-parse: name_list -> udev_list 2008-10-16 20:12:16 +02:00
Kay Sievers
7db6580f42 udev-node: name_list -> udev_list 2008-10-16 19:23:07 +02:00
Kay Sievers
3361a0f110 libudev: monitor - export MAJOR/MINOR only if available 2008-10-16 18:56:19 +02:00
Kay Sievers
3fb629fd5e libudev: always add UDEV_LOG 2008-10-16 18:51:05 +02:00
Kay Sievers
8460299b57 rename udev source files 2008-10-16 18:13:48 +02:00
Kay Sievers
fc233a874b move udev_device_db to libudev 2008-10-16 17:30:06 +02:00
Kay Sievers
aa8734ffcb udevd: use libudev 2008-10-16 17:16:58 +02:00
Kay Sievers
ebacd6ecc3 libudev: device - copy global properties, unset empty properties 2008-10-16 13:53:16 +02:00
Kay Sievers
f183b6ed76 libudev: add global property list 2008-10-16 13:51:29 +02:00
Kay Sievers
6a95b1e7d6 libudev: ctrl - fix typo in set_env() 2008-10-16 13:34:11 +02:00
Kay Sievers
2c09b3b41d libudev: list - handle update of key with NULL value 2008-10-16 13:33:13 +02:00
Kay Sievers
31f4b036ea libudev: device - export properties when values are set 2008-10-16 11:37:22 +02:00
Kay Sievers
5c5cad7966 libudev: device - lookup "subsystem" and "driver" only once 2008-10-15 18:34:14 +02:00
Kay Sievers
bd85566c16 libudev: update DEVLINKS property when properties are read 2008-10-15 16:56:06 +02:00
Kay Sievers
1e61ff54f5 libudev: monitor - do not mangle DEVLINKS property 2008-10-15 16:55:04 +02:00
Kay Sievers
6ebc7a4f93 libudev: do not include ctrl in libudev.so 2008-10-15 16:54:06 +02:00
Kay Sievers
979ff016ef libudev: device - add get_envp() to construct envp from property list 2008-10-15 14:21:33 +02:00
Kay Sievers
81d9e22120 libudev: monitor - fix send_device() property copying 2008-10-15 14:20:27 +02:00
Kay Sievers
517814e7d0 libudev: handle ! in sysname, add sysnum, return allocated list_entry on add 2008-10-14 19:53:47 +02:00
Kay Sievers
9a997ecf4e libudev: device - generate DEVNAME and DEVLINKS properties 2008-10-11 18:40:33 +02:00