1
0
mirror of https://github.com/systemd/systemd.git synced 2025-03-11 20:58:27 +03:00

udev: also reload udev.conf when explicitly requested

When reloading is explicitly requested, e.g. by 'udevadm control --reload',
then also reload udev.conf.
This commit is contained in:
Yu Watanabe 2024-12-04 04:29:13 +09:00
parent 0f72af536f
commit e95861d909
3 changed files with 33 additions and 8 deletions

View File

@ -339,3 +339,27 @@ int manager_load(Manager *manager, int argc, char *argv[]) {
manager_adjust_config(&manager->config); manager_adjust_config(&manager->config);
return 1; return 1;
} }
UdevReloadFlags manager_reload_config(Manager *manager) {
assert(manager);
UdevConfig old = manager->config;
manager->config_by_udev_conf = UDEV_CONFIG_INIT;
manager_parse_udev_config(&manager->config_by_udev_conf);
manager_merge_config(manager);
log_set_max_level(manager->config.log_level);
manager_adjust_config(&manager->config);
if (manager->config.resolve_name_timing != old.resolve_name_timing)
return UDEV_RELOAD_RULES | UDEV_RELOAD_KILL_WORKERS;
if (manager->config.log_level != old.log_level ||
manager->config.exec_delay_usec != old.exec_delay_usec ||
manager->config.timeout_usec != old.timeout_usec ||
manager->config.timeout_signal != old.timeout_signal ||
manager->config.blockdev_read_only != old.blockdev_read_only)
return UDEV_RELOAD_KILL_WORKERS;
return 0;
}

View File

@ -27,4 +27,5 @@ typedef struct UdevConfig {
} }
int manager_load(Manager *manager, int argc, char *argv[]); int manager_load(Manager *manager, int argc, char *argv[]);
UdevReloadFlags manager_reload_config(Manager *manager);
void udev_config_set_default_children_max(UdevConfig *c); void udev_config_set_default_children_max(UdevConfig *c);

View File

@ -265,15 +265,15 @@ static void manager_reload(Manager *manager, bool force) {
UdevReloadFlags flags = udev_builtin_should_reload(); UdevReloadFlags flags = udev_builtin_should_reload();
if (udev_rules_should_reload(manager->rules)) if (udev_rules_should_reload(manager->rules))
flags |= UDEV_RELOAD_RULES | UDEV_RELOAD_KILL_WORKERS; flags |= UDEV_RELOAD_RULES | UDEV_RELOAD_KILL_WORKERS;
if (flags == 0) { if (flags == 0 && !force)
/* Nothing changed. It is not necessary to reload. */ /* Neither .rules files nor config files for builtins e.g. .link files changed. It is not
if (!force) * necessary to reload configs. Note, udev.conf is not checked in the above, hence reloaded
return; * when explicitly requested or at least one .rules file or friend is updated. */
return;
/* If we eat this up, then tell our service manager to just continue */ (void) notify_reloading();
(void) notify_reloading_full("Skipping configuration reloading, nothing changed.");
} else flags |= manager_reload_config(manager);
(void) notify_reloading();
if (FLAGS_SET(flags, UDEV_RELOAD_KILL_WORKERS)) if (FLAGS_SET(flags, UDEV_RELOAD_KILL_WORKERS))
manager_kill_workers(manager, false); manager_kill_workers(manager, false);