X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fudev%2Fudevd.c;h=aaa806aa274dc9f8c0486c11c51d664f77e33fed;hb=6872b0ddc4b748ba2dbe7e74e3bbde46d17a2656;hp=305ce86cdf5a021b2ab506ba6762c98a323c6d48;hpb=3f85ef0f05ffc51e19f86fb83a1c51e8e3cd6817;p=elogind.git diff --git a/src/udev/udevd.c b/src/udev/udevd.c index 305ce86cd..aaa806aa2 100644 --- a/src/udev/udevd.c +++ b/src/udev/udevd.c @@ -54,12 +54,6 @@ #include "dev-setup.h" #include "fileio.h" -void udev_main_log(struct udev *udev, int priority, - const char *file, int line, const char *fn, - const char *format, va_list args) { - log_metav(priority, file, line, fn, format, args); -} - static struct udev_rules *rules; static struct udev_ctrl *udev_ctrl; static struct udev_monitor *monitor; @@ -81,6 +75,7 @@ static sigset_t sigmask_orig; static UDEV_LIST(event_list); static UDEV_LIST(worker_list); static char *udev_cgroup; +static struct udev_list properties_list; static bool udev_exit; enum event_state { @@ -310,9 +305,15 @@ static void worker_new(struct event *event) { udev_event->rtnl = rtnl; /* apply rules, create node, symlinks */ - udev_event_execute_rules(udev_event, arg_event_timeout_usec, arg_event_timeout_warn_usec, rules, &sigmask_orig); + udev_event_execute_rules(udev_event, + arg_event_timeout_usec, arg_event_timeout_warn_usec, + &properties_list, + rules, + &sigmask_orig); - udev_event_execute_run(udev_event, arg_event_timeout_usec, arg_event_timeout_warn_usec, &sigmask_orig); + udev_event_execute_run(udev_event, + arg_event_timeout_usec, arg_event_timeout_warn_usec, + &sigmask_orig); /* in case rtnl was initialized */ rtnl = sd_rtnl_ref(udev_event->rtnl); @@ -644,7 +645,6 @@ static struct udev_ctrl_connection *handle_ctrl_msg(struct udev_ctrl *uctrl) { if (i >= 0) { log_debug("udevd message (SET_LOG_LEVEL) received, log_priority=%i", i); log_set_max_level(i); - udev_set_log_priority(udev, i); worker_kill(udev); } @@ -677,10 +677,10 @@ static struct udev_ctrl_connection *handle_ctrl_msg(struct udev_ctrl *uctrl) { val = &val[1]; if (val[0] == '\0') { log_debug("udevd message (ENV) received, unset '%s'", key); - udev_add_property(udev, key, NULL); + udev_list_entry_add(&properties_list, key, NULL); } else { log_debug("udevd message (ENV) received, set '%s=%s'", key, val); - udev_add_property(udev, key, val); + udev_list_entry_add(&properties_list, key, val); } } else { log_error("wrong key format '%s'", key); @@ -961,10 +961,10 @@ static void kernel_cmdline_options(struct udev *udev) { int r; r = proc_cmdline(&line); - if (r < 0) - log_warning("Failed to read /proc/cmdline, ignoring: %s", strerror(-r)); - if (r <= 0) + if (r < 0) { + log_warning_errno(r, "Failed to read /proc/cmdline, ignoring: %m"); return; + } FOREACH_WORD_QUOTED(word, l, line, state) { char *s, *opt, *value; @@ -984,7 +984,6 @@ static void kernel_cmdline_options(struct udev *udev) { prio = util_log_priority(value); log_set_max_level(prio); - udev_set_log_priority(udev, prio); } else if ((value = startswith(opt, "udev.children-max="))) { r = safe_atoi(value, &arg_children_max); if (r < 0) @@ -1120,19 +1119,14 @@ int main(int argc, char *argv[]) { log_parse_environment(); log_open(); - udev_set_log_fn(udev, udev_main_log); - log_set_max_level(udev_get_log_priority(udev)); - r = parse_argv(argc, argv); if (r <= 0) goto exit; kernel_cmdline_options(udev); - if (arg_debug) { + if (arg_debug) log_set_max_level(LOG_DEBUG); - udev_set_log_priority(udev, LOG_DEBUG); - } if (getuid() != 0) { log_error("root privileges required"); @@ -1141,7 +1135,7 @@ int main(int argc, char *argv[]) { r = mac_selinux_init("/dev"); if (r < 0) { - log_error("could not initialize labelling: %s", strerror(-r)); + log_error_errno(r, "could not initialize labelling: %m"); goto exit; } @@ -1154,6 +1148,8 @@ int main(int argc, char *argv[]) { umask(022); + udev_list_init(udev, &properties_list, true); + r = mkdir("/run/udev", 0755); if (r < 0 && errno != EEXIST) { log_error("could not create /run/udev: %m"); @@ -1215,6 +1211,8 @@ int main(int argc, char *argv[]) { goto exit; } fd_netlink = udev_monitor_get_fd(monitor); + + udev_monitor_set_receive_buffer_size(monitor, 128 * 1024 * 1024); } if (udev_monitor_enable_receiving(monitor) < 0) { @@ -1229,9 +1227,7 @@ int main(int argc, char *argv[]) { goto exit; } - udev_monitor_set_receive_buffer_size(monitor, 128 * 1024 * 1024); - - log_info("starting version " VERSION "\n"); + log_info("starting version " VERSION); udev_builtin_init(udev); @@ -1243,7 +1239,7 @@ int main(int argc, char *argv[]) { rc = udev_rules_apply_static_dev_perms(rules); if (rc < 0) - log_error("failed to apply permissions on static device nodes - %s", strerror(-rc)); + log_error_errno(rc, "failed to apply permissions on static device nodes - %m"); if (arg_daemonize) { pid_t pid; @@ -1542,6 +1538,7 @@ exit_daemonize: udev_monitor_unref(monitor); udev_ctrl_connection_unref(ctrl_conn); udev_ctrl_unref(udev_ctrl); + udev_list_cleanup(&properties_list); mac_selinux_finish(); udev_unref(udev); log_close();