]> git.ipfire.org Git - people/ms/ipfire-3.x.git/blob - systemd/patches/systemd-185-udev-accept-rd-parameters.patch
systemd: Update to 185.
[people/ms/ipfire-3.x.git] / systemd / patches / systemd-185-udev-accept-rd-parameters.patch
1 From e6f86cac1619d504ea51c08608fa60b8e4359c52 Mon Sep 17 00:00:00 2001
2 From: Kay Sievers <kay@vrfy.org>
3 Date: Mon, 04 Jun 2012 20:46:32 +0000
4 Subject: udev: kernel cmdline - accept rd.* parameters
5
6 ---
7 diff --git a/man/systemd-udevd.xml b/man/systemd-udevd.xml
8 index 1be356f..79f917e 100644
9 --- a/man/systemd-udevd.xml
10 +++ b/man/systemd-udevd.xml
11 @@ -116,20 +116,24 @@
12
13 <refsect1><title>Kernel command line</title>
14 <variablelist>
15 + <para>The parameters starting with "rd.", will be read when udev is used in an initrd.</para>
16 <varlistentry>
17 <term><varname>udev.log-priority=</varname></term>
18 + <term><varname>rd.udev.log-priority=</varname></term>
19 <listitem>
20 <para>Set the logging priority.</para>
21 </listitem>
22 </varlistentry>
23 <varlistentry>
24 <term><varname>udev.children-max=</varname></term>
25 + <term><varname>rd.udev.children-max=</varname></term>
26 <listitem>
27 <para>Limit the number of parallel executed events.</para>
28 </listitem>
29 </varlistentry>
30 <varlistentry>
31 <term><varname>udev.exec-delay=</varname></term>
32 + <term><varname>rd.udev.exec-delay=</varname></term>
33 <listitem>
34 <para>Number of seconds to delay the execution of RUN instructions.
35 This might be useful when debugging system crashes during coldplug
36 diff --git a/src/udev/udevd.c b/src/udev/udevd.c
37 index 2ac9fde..75e7766 100644
38 --- a/src/udev/udevd.c
39 +++ b/src/udev/udevd.c
40 @@ -1013,6 +1013,48 @@ static int systemd_fds(struct udev *udev, int *rctrl, int *rnetlink)
41 return 0;
42 }
43
44 +/*
45 + * read the kernel commandline, in case we need to get into debug mode
46 + * udev.log-priority=<level> syslog priority
47 + * udev.children-max=<number of workers> events are fully serialized if set to 1
48 + * udev.exec-delay=<number of seconds> delay execution of every executed program
49 + */
50 +static void kernel_cmdline_options(struct udev *udev)
51 +{
52 + char *line, *w, *state;
53 + size_t l;
54 +
55 + if (read_one_line_file("/proc/cmdline", &line) < 0)
56 + return;
57 +
58 + FOREACH_WORD_QUOTED(w, l, line, state) {
59 + char *s, *opt;
60 +
61 + s = strndup(w, l);
62 + if (!s)
63 + break;
64 +
65 + /* accept the same options for the initrd, prefixed with "rd." */
66 + if (in_initrd() && startswith(s, "rd."))
67 + opt = s + 3;
68 + else
69 + opt = s;
70 +
71 + if (startswith(opt, "udev.log-priority="))
72 + udev_set_log_priority(udev, util_log_priority(opt + 18));
73 +
74 + if (startswith(opt, "udev.children-max="))
75 + children_max = strtoul(opt + 18, NULL, 0);
76 +
77 + if (startswith(opt, "udev.exec-delay="))
78 + exec_delay = strtoul(opt + 16, NULL, 0);
79 +
80 + free(s);
81 + }
82 +
83 + free(line);
84 +}
85 +
86 int main(int argc, char *argv[])
87 {
88 struct udev *udev;
89 @@ -1101,39 +1143,7 @@ int main(int argc, char *argv[])
90 }
91 }
92
93 - /*
94 - * read the kernel commandline, in case we need to get into debug mode
95 - * udev.log-priority=<level> syslog priority
96 - * udev.children-max=<number of workers> events are fully serialized if set to 1
97 - *
98 - */
99 - f = fopen("/proc/cmdline", "r");
100 - if (f != NULL) {
101 - char cmdline[4096];
102 -
103 - if (fgets(cmdline, sizeof(cmdline), f) != NULL) {
104 - char *pos;
105 -
106 - pos = strstr(cmdline, "udev.log-priority=");
107 - if (pos != NULL) {
108 - pos += strlen("udev.log-priority=");
109 - udev_set_log_priority(udev, util_log_priority(pos));
110 - }
111 -
112 - pos = strstr(cmdline, "udev.children-max=");
113 - if (pos != NULL) {
114 - pos += strlen("udev.children-max=");
115 - children_max = strtoul(pos, NULL, 0);
116 - }
117 -
118 - pos = strstr(cmdline, "udev.exec-delay=");
119 - if (pos != NULL) {
120 - pos += strlen("udev.exec-delay=");
121 - exec_delay = strtoul(pos, NULL, 0);
122 - }
123 - }
124 - fclose(f);
125 - }
126 + kernel_cmdline_options(udev);
127
128 if (getuid() != 0) {
129 fprintf(stderr, "root privileges required\n");
130 --
131 cgit v0.9.0.2-2-gbebe