diff --git a/NEWS b/NEWS index 56d05ac7ef..15a5ceb051 100644 --- a/NEWS +++ b/NEWS @@ -2,6 +2,17 @@ systemd System and Service Manager CHANGES WITH 244 in spe: + * systemd-udevd: removed the 30s timeout for killing stale workers on + exit. systemd-udevd now waits for workers to finish. The hard-coded + exit timeout of 30s was too short for some large installations, where + driver initialization could be prematurely interrupted during initrd + processing if the root file system had been mounted and init was + preparing to switch root. If udevd is run without systemd and workers + are hanging while udevd receives an exit signal, udevd will now exit + when udev.event_timeout is reached for the last hanging worker. With + systemd, the exit timeout can additionally be configured using + TimeoutStopSec= in systemd-udevd.service. + * Support for the cpuset cgroups v2 controller has been added. Processes may be restricted to specific CPUs using the new AllowedCPUs= setting, and to specific memory NUMA nodes using the new diff --git a/src/udev/udevd.c b/src/udev/udevd.c index 0ae61c1e8b..144a20ec63 100644 --- a/src/udev/udevd.c +++ b/src/udev/udevd.c @@ -774,21 +774,7 @@ set_delaying_seqnum: return true; } -static int on_exit_timeout(sd_event_source *s, uint64_t usec, void *userdata) { - Manager *manager = userdata; - - assert(manager); - - log_error("Giving up waiting for workers to finish."); - sd_event_exit(manager->event, -ETIMEDOUT); - - return 1; -} - static void manager_exit(Manager *manager) { - uint64_t usec; - int r; - assert(manager); manager->exit = true; @@ -808,13 +794,6 @@ static void manager_exit(Manager *manager) { /* discard queued events and kill workers */ event_queue_cleanup(manager, EVENT_QUEUED); manager_kill_workers(manager); - - assert_se(sd_event_now(manager->event, CLOCK_MONOTONIC, &usec) >= 0); - - r = sd_event_add_time(manager->event, NULL, CLOCK_MONOTONIC, - usec + 30 * USEC_PER_SEC, USEC_PER_SEC, on_exit_timeout, manager); - if (r < 0) - return; } /* reload requested, HUP signal received, rules changed, builtin changed */