1
1
mirror of https://github.com/systemd/systemd-stable.git synced 2024-10-30 23:21:08 +03:00
Commit Graph

98 Commits

Author SHA1 Message Date
Amir Shalem
b4f192f054 udevd: fix udevd read() calls to leave room for null byte 2005-09-14 14:28:13 +02:00
Kay Sievers
69348b66ff remove special TIMEOUT handling from incoming queue
Moving events directly to the exec queue instead of the reordering
incoming queue, leaves holes in the sequence, that lead to timeouts for
all other events. Remove that part of the special handling.

(With netlink, events can't get out-of-order and the maximum timeout is 5
seconds and should not cause any trouble with the 10 sec timout for the
firmware class anyway. Events with timeouts are still prioritized for
execution, but don't bypass the incoming queue anymore.)

Many thanks to:
  Uberto Barbini <uberto@ubiland.net>

for his endless debugging and sending all the traces, that showed this
failure with his DVB device:
  UEVENT[1124474094] add@/module/stv0299
  UEVENT[1124474094] add@/module/ves1x93
  UEVENT[1124474094] add@/module/ttpci_eeprom
  UEVENT[1124474094] add@/module/saa7146
  UEVENT[1124474094] add@/module/video_buf
  UEVENT[1124474094] add@/module/saa7146_vv
  UEVENT[1124474094] add@/module/dvb_core
  UEVENT[1124474094] add@/module/dvb_ttpci
  UEVENT[1124474094] add@/bus/pci/drivers/dvb
  UEVENT[1124474094] add@/class/firmware/0000:00:14.0
  UDEV  [1124474094] add@/module/dvb_core
  UDEV  [1124474094] add@/module/saa7146_vv
  UDEV  [1124474094] add@/module/dvb_ttpci
  UDEV  [1124474094] add@/module/ves1x93
  UDEV  [1124474094] add@/module/ttpci_eeprom
  UDEV  [1124474094] add@/module/saa7146
  UDEV  [1124474094] add@/module/stv0299
  UDEV  [1124474094] add@/module/video_buf
  UDEV  [1124474094] add@/bus/pci/drivers/dvb
  UEVENT[1124474094] remove@/class/firmware/0000:00:14.0  <- event with TIMEOUT will leave a hole in the incoming
  UDEV  [1124474094] add@/class/firmware/0000:00:14.0        sequence, which will cause a wait for the alarm()
  UEVENT[1124474094] add@/class/i2c-adapter/i2c-1            that flushes the queue
  UEVENT[1124474094] add@/class/i2c-dev/i2c-1
  UDEV  [1124474094] remove@/class/firmware/0000:00:14.0  <- event also has TIMEOUT and is executed immediately
  UEVENT[1124474095] add@/class/dvb/dvb0.demux0
  UEVENT[1124474095] add@/class/dvb/dvb0.dvr0
  UEVENT[1124474095] add@/class/dvb/dvb0.video0
  UEVENT[1124474095] add@/class/dvb/dvb0.audio0
  UEVENT[1124474095] add@/class/dvb/dvb0.ca0
  UEVENT[1124474095] add@/class/dvb/dvb0.osd0
  UEVENT[1124474095] add@/class/dvb/dvb0.net0
  UEVENT[1124474095] add@/class/video4linux/video1
  UEVENT[1124474095] add@/class/dvb/dvb0.frontend0
  UDEV  [1124474099] add@/class/i2c-adapter/i2c-1         <- all others have 5 seconds delay cause of the missing event
  UDEV  [1124474099] add@/class/dvb/dvb0.ca0                 missing events
  UDEV  [1124474099] add@/class/dvb/dvb0.osd0
  UDEV  [1124474099] add@/class/video4linux/video1
  UDEV  [1124474099] add@/class/dvb/dvb0.frontend0
  UDEV  [1124474099] add@/class/dvb/dvb0.video0
  UDEV  [1124474099] add@/class/dvb/dvb0.audio0
  UDEV  [1124474099] add@/class/i2c-dev/i2c-1
  UDEV  [1124474099] add@/class/dvb/dv

My test program that simulates a similar sequence, runs without any delay
now. (With one of the next versions we will make netlink mandatory, then
we can remove the whole input queue crap with the reordering anyway.)

Signed-off-by: Kay Sievers <kay.sievers@suse.de>
2005-08-29 01:19:02 +02:00
Kay Sievers
199cdd8675 udevd: move some logging to "info" and "err"
Signed-off-by: Kay Sievers <kay.sievers@suse.de>
2005-08-28 23:19:45 +02:00
Kay Sievers
d2ecd6a19d don't reenter get_udevd_msg() if message is ignored
Check all event sources with every iteration.

Signed-off-by: Kay Sievers <kay.sievers@suse.de>
2005-08-28 23:14:59 +02:00
Kay Sievers
c6303c1316 remove not needed sig_flag for state of signal_pipe
Less internal state is better. And, we don't need to call
read() twice with every signal handling.

Signed-off-by: Kay Sievers <kay.sievers@suse.de>
2005-08-28 23:13:14 +02:00
Kay Sievers
f1ff8d7b4a use WRITE_END/READ_END for the pipe index
Signed-off-by: Kay Sievers <kay.sievers@suse.de>
2005-08-28 20:25:37 +02:00
Kay Sievers
e7f247503c udevd: keep the right order for messages without SEQNUM
Signed-off-by: Kay Sievers <kay.sievers@suse.de>
2005-08-23 00:57:46 +02:00
Kay Sievers
3f9f8de4de bring std(in|out|err) fd's in a sane state
If the kernel forks us as an usermodhelper, we don't have any of
the standard fd's and the first open() will start with fd=0.
This is inherited to all forked childs and confuses later forked
helpers where we want to read from a pipe connected to the helpers
stdout/stderr.

  # ls -l /proc/$(pidof udevd)/fd
  total 6
  dr-x------  2 root root  0 2005-08-18 12:44 .
  dr-xr-xr-x  4 root root  0 2005-08-18 12:44 ..
  lrwx------  1 root root 64 2005-08-18 12:44 0 -> /dev/null
  lrwx------  1 root root 64 2005-08-18 12:44 1 -> socket:[1274617]
  lr-x------  1 root root 64 2005-08-18 12:44 2 -> pipe:[1274618]
  l-wx------  1 root root 64 2005-08-18 12:44 3 -> pipe:[1274618]
  lrwx------  1 root root 64 2005-08-18 12:44 4 -> socket:[1274619]
  lrwx------  1 root root 64 2005-08-18 12:44 5 -> socket:[1274620]

Ouch! This will obviously not redirect sterr, it will kill the pipe
we established between the parent and the child:

  devnull = open("/dev/null", O_RDWR);
  dup2(devnull, STDERR_FILENO);

Signed-off-by: Kay Sievers <kay.sievers@suse.de>
2005-08-18 13:07:15 +02:00
Kay Sievers
40caaeec51 cleanup some debug output and move to info level + unify select() loops
Signed-off-by: Kay Sievers <kay.sievers@suse.de>
2005-08-15 11:57:04 +02:00
Kay Sievers
af5461f72f don't fail too bad, if /dev/null does not exist
Signed-off-by: Kay Sievers <kay.sievers@suse.de>
2005-08-13 02:36:12 +02:00
Kay Sievers
2b996ad193 add Usage: to udevmonitor and udevcontrol
Signed-off-by: Kay Sievers <kay.sievers@suse.de>
2005-08-11 20:34:24 +02:00
Kay Sievers
34c00c915c update README
Signed-off-by: Kay Sievers <kay.sievers@suse.de>
2005-08-09 19:45:08 +02:00
Kay Sievers
63cc8f0491 allow clean shutdown of udevd
Signed-off-by: Kay Sievers <kay.sievers@suse.de>
2005-08-08 05:07:36 +02:00
Kay Sievers
47e353f9b9 add NETLINK define for the lazy distros
Signed-off-by: Kay Sievers <kay.sievers@suse.de>
2005-08-04 12:24:41 +02:00
Kay Sievers
761e5b476f make SYSFS{} usable for all devices
Patch from:
  Hannes Reinecke <hare@suse.de>
2005-07-20 12:12:56 -04:00
Kay Sievers
cbbde2ba6c udevd: set incoming socket buffer SO_RCVBUF to maximum
Signed-off-by: Kay Sievers <kay.sievers@suse.de>
2005-07-12 11:44:51 +02:00
Kay Sievers
ebfc1acd48 udevd: optimize env-key parsing
Signed-off-by: Kay Sievers <kay.sievers@suse.de>
2005-07-06 02:02:05 +02:00
Marco d'Itri
a105fe495b [PATCH] #define NETLINK_KOBJECT_UEVENT
On many systems the system kernel headers are not recent enough to
compile udev.
2005-07-01 12:42:07 -07:00
Kay Sievers
aaff09a30a add ID_TYPE to the id probers
Export the type of device from ata_id and scsi_id, also strip
leading and trailing whitespace and substitute consecutive
whitespace with a single underline char.

From: Hannes Reinecke <hare@suse.de>
Signed-off-by: Kay Sievers <kay.sievers@suse.de>
2005-06-27 17:04:56 +02:00
Kay Sievers
8ab44e3fd0 udevd: control log-priority of the running daemon with udevcontrol
Signed-off-by: Kay Sievers <kay.sievers@suse.de>
2005-06-16 01:58:47 +02:00
Kay Sievers
3632a36858 udeveventrecorder: add small program that writes an event to disk
Used for debugging and event replay from initramfs.

Signed-off-by: Kay Sievers <kay.sievers@suse.de>
2005-06-15 03:07:14 +02:00
Kay Sievers
510de9c9e4 udevinitsend: handle replay messages correctly
Signed-off-by: Kay Sievers <kay.sievers@suse.de>
2005-06-14 17:02:55 +02:00
Kay Sievers
561d4c5a3a udevd: allow starting of udevd with stopped exec-queue
Signed-off-by: Kay Sievers <kay.sievers@suse.de>
2005-06-08 11:57:53 +02:00
Kay Sievers
a15f42c46a udevd: improve timeout handling
Allow to override some parameters by environment keys.

Signed-off-by: Kay Sievers <kay.sievers@suse.de>
2005-06-05 04:53:17 +02:00
Kay Sievers
3b47c7394d udevd: add udevcontrol
Controls the behavior of the running daemon. Currently only stopping and starting
of the execution queue is supported.

Signed-off-by: Kay Sievers <kay.sievers@suse.de>
2005-06-05 04:41:09 +02:00
Kay Sievers
88f4b6485e udevd: listen for netlink events
After the first valid netlink-event all event with a serial number
received on the udevsend socket will be ignored.

Signed-off-by: Kay Sievers <kay.sievers@suse.de>
2005-06-05 04:38:10 +02:00
kay.sievers@vrfy.org
821d0ec803 [PATCH] add RUN key to be able to run rule based notification
SUBSYSTEM=="block", RUN="/sbin/program"
  will execute the program only for block device events.

ACTION="remove", SUBSYSTEM=="block", RUN"/sbin/program"
  will execute the program, if a block device is removed.
2005-04-26 23:55:00 -07:00
kay.sievers@vrfy.org
6b493a20e1 [PATCH] support log-priority levels in udev.conf 2005-04-26 23:54:59 -07:00
kay.sievers@vrfy.org
7f7ae03a62 [PATCH] udevd: don't delay events with TIMEOUT in the environment
On Tue, 2005-03-15 at 09:25 +0100, Hannes Reinecke wrote:
> The current implementation of the firmware class breaks a fundamental
> assumption in udevd: that the physical device can be initialised fully
> prior to executing the next event for that device.

Thanks to Hannes for the patch.
2005-04-26 23:53:53 -07:00
kay.sievers@vrfy.org
138068d690 [PATCH] fix ia64 compile 2005-04-26 23:51:00 -07:00
kay.sievers@vrfy.org
63f61c5cf6 [PATCH] replace strncpy()/strncat() by strlcpy()/strlcat() 2005-04-26 23:51:00 -07:00
kay.sievers@vrfy.org
6c18b1fb87 [PATCH] rename LOG to USE_LOG in all places 2005-04-26 23:48:48 -07:00
kay.sievers@vrfy.org
f8a178a35b [PATCH] trivial rename of some variables 2005-04-26 23:36:14 -07:00
mbuesch@freenet.de
0786e8e541 [PATCH] udevd: fix valgrind warning
==4304== Syscall param sigaction(act) contains uninitialised or unaddressable byte(s)
==4304==    at 0x804A37B: (within /sbin/udevd)
==4304==  Address 0x52BFE7FC is on thread 1's stack
2005-04-26 23:24:19 -07:00
kay.sievers@vrfy.org
085cce379a [PATCH] udevd: throttle the forking of processes
If the system reaches a defined limit of processes in running state, udevd
starts to count its own processes in running state from its session (all
forked hotplug child processes, subprocesses and callouts) and throttles
further process forking if the limit is reached.
  
This should help setups with hundreds of events emitted hotplug events
in parallel with hundreds of processes in "R" state. which makes the machine
unresponsible.
  
I placed a 100% cpu time consuming program in /etc/hotplug.d/ which runs for 5
seconds. With this patch I can load "scsi_debug add_host=100" without any major
problem. Without the patch the box is completly unresponsible for many minutes.
2005-04-26 23:21:58 -07:00
kay.sievers@vrfy.org
1e26698933 [PATCH] udevd: add possible initialization of expected_seqnum
UDEVD_EXPECTED_SEQNUM=$[`cat /sys/kernel/hotplug_seqnum` + 1] ./udevd -d
will init udevd, so the next event will not wait for any timeout.
2005-04-26 23:21:58 -07:00
kay.sievers@vrfy.org
ce043f851d [PATCH] udevd: it's obviously not the brightest idea to exit a device node manager if it doesn't find /dev/null 2005-04-26 23:21:58 -07:00
kay.sievers@vrfy.org
c2cf40123f [PATCH] udevd: separate socket handling to prepare for other event sources 2005-04-26 23:21:58 -07:00
kay.sievers@vrfy.org
f15515b59f [PATCH] udevd: support -d switch to become a daemon 2005-04-26 23:21:58 -07:00
kay.sievers@vrfy.org
021a294c04 [PATCH] udevd: split up message receiving an queueing 2005-04-26 23:19:09 -07:00
kay.sievers@vrfy.org
7b6571a9fc [PATCH] improve event sequence serialization
We delay the execution of events if there is already an event running for
the same device, a parent or a child device. "add" events with a reference
to a physical device will also wait for the physical device to finish.
  
Here we fix the devpath comparison logic to return "busy" only if a complete
device names is matching. /block/sdaa will not longer block a /block/sda event.
2005-04-26 23:19:09 -07:00
kay.sievers@vrfy.org
8b72687876 [PATCH] limit the initial timeout of the udevd event handling
Define an inititialization phase, where we delay the events only
for a short time to eventually recollect the event sequence instead
of delaying the very first events for 10 seconds, which breaks the
firmware loader.
2005-04-26 23:19:09 -07:00
kay.sievers@vrfy.org
eabfc97367 [PATCH] handle renamed network interfaces properly if we manage hotplug.d/
If we take over the hotplug call and manage the events we don't need
to call the event fake script in dev.d/. Just set all expected values
to the new network interface name and call hotplug.d/. This way the
device renaming is completely handled inside of udev and userspace
can't get confused.
2005-04-26 23:19:09 -07:00
kay.sievers@vrfy.org
82ca88904d [PATCH] klibc supports LOG_PID now, so remove our own implementation 2005-04-26 23:17:47 -07:00
kay.sievers@vrfy.org
79721e0a77 [PATCH] udevd: serialization of the event sequence of a chain of devices
Currently udevd delays only events for the same DEVPATH.

Example of an "add" event sequence:
  /block/sda
  /block/sda/sda1

With this change, we make sure, that the udev process handling
/block/sda has finished its work (waited for all attributes,
created the node) before we fork the udev event for /block/sda/sda1.
This way the event for sda1 can be sure, that the node for the
main device is already created (may be useful for disk labels).

It will not affect any parallel device handling, only the sequence
of the devices directory chain is serialized. The 10.000 disks
plugged in will still run as parallel events. :)

The main motivation to do this is the program execution of the
dev.d/ and hotplug.d/ directory. If we don't wait for the parent
event to exit, we can't be sure that the executed scripts are
run in the right order.

On Thu, Dec 09, 2004 at 09:18:28AM +0100, Kay Sievers wrote:
> On Wed, 2004-12-08 at 19:07 -0800, David Brownell wrote:
> > Could that argument apply to the underlying hardware, too?

> We now make sure that the sequence of events for a device
> is serialized for every device chain and the class/block
> devices which have a "device" link to a physical device are
> handled after the physical device is fully populated and
> notified to userspace. It will only work this way on kernels
> later than 2.6.10-rc1 cause it depends on the PHYSDEVPATH
> value in the hotplug environment.
2005-04-26 23:13:47 -07:00
kay.sievers@vrfy.org
4497fcbf71 [PATCH] udevsend/udevd handle events without a subsystem
Accept event without a subsystem and pass it through udevd.
Pass empty environment while starting udevd.
2005-04-26 23:00:29 -07:00
kay.sievers@vrfy.org
9af5bb2f8f [PATCH] rename udev_lib to udev_utils and dev_d to udev_multiplex 2005-04-26 22:44:02 -07:00
kay.sievers@vrfy.org
6f59ed5547 [PATCH] add MANAGED_EVENT to the forked udev environment
This will prevent a loop, if udev sends events back into the
daemon.
2005-04-26 22:35:00 -07:00
kay.sievers@vrfy.org
f602ccf072 [PATCH] close connection to syslog in forked udevd child 2005-04-26 22:30:28 -07:00
kay.sievers@vrfy.org
ec9cc0127d [PATCH] udevd exit path cleanup 2005-04-26 22:30:28 -07:00