summaryrefslogtreecommitdiff
path: root/udev/udevd.c
AgeCommit message (Collapse)Author
2009-05-29udevd: remove check for dev_t, DEVPATH_OLD takes care of thatKay Sievers
2009-05-21udevd: implement a more efficient queue file formatAlan Jenkins
Directory lookups show up in profiling. The queue files are responsible for a large proportion of file-related system calls in udev coldplug. Instead of creating a file for each event, append their details to a log file. The file is periodically rebuilt (garbage-collected) to prevent it from growing indefinitely. This single queue file replaces both the queue directory and the uevent_seqnum file. On desktop systems the file tends not to grow beyond one page. So it should also save a small amount of memory in tmpfs. Tests on a running EeePC indicate average savings of 5% *udevd* cpu time as measured by oprofile. __link_path_walk is reduced from 1.5% to 1.3%. It is not completely clear where the rest of the gains come from. In tests running ~400 events, the queue file is rebuilt about 5 times. Signed-off-by: Alan Jenkins <alan-jenkins@tuffmail.co.uk>
2009-05-21udevd: remove tiny bit of dead codeAlan Jenkins
2009-05-21keep the ifdef'd udevd testing/profiling hackKay Sievers
2009-05-20use openat(), unlinkat(), fstatat()Kay Sievers
2009-05-20use more efficient string copyingKay Sievers
2009-05-05remove asmlinkageKay Sievers
2009-05-04remove all PHYSDEVPATH handling and warning aboutKay Sievers
2009-05-02udevd: revert initial device node creationKay Sievers
2009-04-19udevd: at startup create /dev/null, /dev/console, /dev/kmsgKay Sievers
2009-04-16udevd: log error for too old kernels or CONFIG_SYSFS_DEPRECATEDKay Sievers
2009-03-29"UDEV_MONITOR_KERNEL/UDEV" -> "kernel/udev"Kay Sievers
2009-03-29send monitor events back to netlink socketKay Sievers
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-12udevadm: settle - synchronise with the udev daemonScott James Remnant
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-02-24use the event udev_device to disable the watch on "remove"Kay Sievers
2009-02-23Look at more inotify events in the buffer than just the first.Scott James Remnant
2009-02-23lookup the old watch handle; reload only if has a pathScott James Remnant
2009-02-23Put a log message in a more sensible place.Scott James Remnant
2009-02-23Use the udevdb to speed up watch clearing.Scott James Remnant
Also return a udev_device when looking up by handle as well, so everything works the same way.
2009-02-23Cleanup a little.Scott James Remnant
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-23Clear existing inotify watch before processing.Scott James Remnant
Likewise when re-processing an event, we want to drop the existing inotify watch first to avoid side-effects.
2009-02-23Don't add inotify watch until RUN rules processed.Scott James Remnant
The programs we RUN can open device nodes, and thus we can end up chasing our own tail.
2009-02-11use global "reload_config" flagKay Sievers
2009-02-11udevd: optionally watch device nodes with inotifyScott James Remnant
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-01-21udevd: add back SA_RESTARTKay Sievers
<Keybuk> poll, select, ppoll, pselect, epoll, etc. are *explicitly* NOT restarted in case of signal <kay> ok
2009-01-21split up long lineKay Sievers
2009-01-21Merge commit '9032f119f07ad3b5116b3d4858816d851d4127de'Kay Sievers
2009-01-21Merge commit '5f03ed8a56d308af72db8a48ab66ed68667af2c6'Kay Sievers
Conflicts: udev/udevd.c
2009-01-21reap children fasterOlaf Kirch
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-21open-code pollfd setupKay Sievers
2009-01-20Expose delayed name resolutionScott James Remnant
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-20Allow user and group lookup to be disabled.Scott James Remnant
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-20udevd: use ppoll instead of signal pipesOlaf Kirch
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>
2008-12-29require non-SYSFS_DEPRECATED 2.6.20+ kernelKay Sievers
2008-11-17udevd: fix cleanup of /dev/.udev/uevent_seqnumKay Sievers
2008-11-13set errno = ENOSYS in inotify stubKay Sievers
2008-11-06cleanup /dev/.udev/queue on startup and exitKay Sievers
2008-11-01skip entire rule containing device naming keys, if no device can be namedKay Sievers
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-10-31write trace log to stderrKay Sievers
2008-10-29udevd: merge exec and run queue to minimize devpath string comparesKay Sievers
2008-10-25udevd: use a tighter loop for compare_devpath()Alan Jenkins
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-18prefix udev-util.c functions with util_*Kay Sievers
2008-10-18selinux_init(udev) -> udev_selinux_init(udev)Kay Sievers
2008-10-18udev_rules_run() -> udev_event_execute_run();Kay Sievers
2008-10-18udev_event_run() -> udev_event_execute_rules()Kay Sievers
2008-10-18udevd: avoid overhead of calling rmdir on non-empty directoriesAlan Jenkins
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-18make struct udev_rules opaqueKay Sievers
2008-10-18merge udev-rules.c and udev-rules-parse.cKay Sievers
2008-10-17udevd: use udev_list_nodeKay Sievers
2008-10-17libudev: monitor - add set_receive_buffer_size()Kay Sievers