mirror of
https://github.com/systemd/systemd.git
synced 2024-11-27 20:23:36 +08:00
udev: kernel cmdline - accept rd.* parameters
This commit is contained in:
parent
f96096dbbf
commit
e6f86cac16
@ -116,20 +116,24 @@
|
||||
|
||||
<refsect1><title>Kernel command line</title>
|
||||
<variablelist>
|
||||
<para>The parameters starting with "rd.", will be read when udev is used in an initrd.</para>
|
||||
<varlistentry>
|
||||
<term><varname>udev.log-priority=</varname></term>
|
||||
<term><varname>rd.udev.log-priority=</varname></term>
|
||||
<listitem>
|
||||
<para>Set the logging priority.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><varname>udev.children-max=</varname></term>
|
||||
<term><varname>rd.udev.children-max=</varname></term>
|
||||
<listitem>
|
||||
<para>Limit the number of parallel executed events.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><varname>udev.exec-delay=</varname></term>
|
||||
<term><varname>rd.udev.exec-delay=</varname></term>
|
||||
<listitem>
|
||||
<para>Number of seconds to delay the execution of RUN instructions.
|
||||
This might be useful when debugging system crashes during coldplug
|
||||
|
@ -1013,6 +1013,48 @@ static int systemd_fds(struct udev *udev, int *rctrl, int *rnetlink)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* read the kernel commandline, in case we need to get into debug mode
|
||||
* udev.log-priority=<level> syslog priority
|
||||
* udev.children-max=<number of workers> events are fully serialized if set to 1
|
||||
* udev.exec-delay=<number of seconds> delay execution of every executed program
|
||||
*/
|
||||
static void kernel_cmdline_options(struct udev *udev)
|
||||
{
|
||||
char *line, *w, *state;
|
||||
size_t l;
|
||||
|
||||
if (read_one_line_file("/proc/cmdline", &line) < 0)
|
||||
return;
|
||||
|
||||
FOREACH_WORD_QUOTED(w, l, line, state) {
|
||||
char *s, *opt;
|
||||
|
||||
s = strndup(w, l);
|
||||
if (!s)
|
||||
break;
|
||||
|
||||
/* accept the same options for the initrd, prefixed with "rd." */
|
||||
if (in_initrd() && startswith(s, "rd."))
|
||||
opt = s + 3;
|
||||
else
|
||||
opt = s;
|
||||
|
||||
if (startswith(opt, "udev.log-priority="))
|
||||
udev_set_log_priority(udev, util_log_priority(opt + 18));
|
||||
|
||||
if (startswith(opt, "udev.children-max="))
|
||||
children_max = strtoul(opt + 18, NULL, 0);
|
||||
|
||||
if (startswith(opt, "udev.exec-delay="))
|
||||
exec_delay = strtoul(opt + 16, NULL, 0);
|
||||
|
||||
free(s);
|
||||
}
|
||||
|
||||
free(line);
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
struct udev *udev;
|
||||
@ -1101,39 +1143,7 @@ int main(int argc, char *argv[])
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* read the kernel commandline, in case we need to get into debug mode
|
||||
* udev.log-priority=<level> syslog priority
|
||||
* udev.children-max=<number of workers> events are fully serialized if set to 1
|
||||
*
|
||||
*/
|
||||
f = fopen("/proc/cmdline", "r");
|
||||
if (f != NULL) {
|
||||
char cmdline[4096];
|
||||
|
||||
if (fgets(cmdline, sizeof(cmdline), f) != NULL) {
|
||||
char *pos;
|
||||
|
||||
pos = strstr(cmdline, "udev.log-priority=");
|
||||
if (pos != NULL) {
|
||||
pos += strlen("udev.log-priority=");
|
||||
udev_set_log_priority(udev, util_log_priority(pos));
|
||||
}
|
||||
|
||||
pos = strstr(cmdline, "udev.children-max=");
|
||||
if (pos != NULL) {
|
||||
pos += strlen("udev.children-max=");
|
||||
children_max = strtoul(pos, NULL, 0);
|
||||
}
|
||||
|
||||
pos = strstr(cmdline, "udev.exec-delay=");
|
||||
if (pos != NULL) {
|
||||
pos += strlen("udev.exec-delay=");
|
||||
exec_delay = strtoul(pos, NULL, 0);
|
||||
}
|
||||
}
|
||||
fclose(f);
|
||||
}
|
||||
kernel_cmdline_options(udev);
|
||||
|
||||
if (getuid() != 0) {
|
||||
fprintf(stderr, "root privileges required\n");
|
||||
|
Loading…
Reference in New Issue
Block a user