87 lines
3.2 KiB
Diff
87 lines
3.2 KiB
Diff
|
From f71f3271fa149d2b5f022830d43071d97b022b38 Mon Sep 17 00:00:00 2001
|
||
|
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
|
||
|
Date: Fri, 24 May 2019 08:59:23 +0200
|
||
|
Subject: [PATCH] pid1: don't reset setting from /proc/cmdline upon restart
|
||
|
|
||
|
We have settings which may be set on the kernel command line, and also
|
||
|
in /proc/cmdline (for pid1). The settings in /proc/cmdline have higher priority
|
||
|
of course. When a reload was done, we'd reload just the configuration file,
|
||
|
losing the overrides.
|
||
|
|
||
|
So read /proc/cmdline again during reload.
|
||
|
|
||
|
Also, when initially reading the configuration file when program starts,
|
||
|
don't treat any errors as fatal. The configuration done in there doesn't
|
||
|
seem important enough to refuse boot.
|
||
|
|
||
|
(cherry picked from commit 470a5e6dcec4637439ae953002127af214d396ac)
|
||
|
|
||
|
Related: #1734787
|
||
|
---
|
||
|
src/core/main.c | 26 ++++++++++++++++----------
|
||
|
1 file changed, 16 insertions(+), 10 deletions(-)
|
||
|
|
||
|
diff --git a/src/core/main.c b/src/core/main.c
|
||
|
index bc1db2af7b..9a9f145080 100644
|
||
|
--- a/src/core/main.c
|
||
|
+++ b/src/core/main.c
|
||
|
@@ -129,6 +129,8 @@ static sd_id128_t arg_machine_id = {};
|
||
|
static EmergencyAction arg_cad_burst_action = EMERGENCY_ACTION_REBOOT_FORCE;
|
||
|
static CPUSet arg_cpu_affinity = {};
|
||
|
|
||
|
+static int parse_configuration(void);
|
||
|
+
|
||
|
_noreturn_ static void freeze_or_reboot(void) {
|
||
|
|
||
|
if (arg_crash_reboot) {
|
||
|
@@ -1659,9 +1661,7 @@ static int invoke_main_loop(
|
||
|
saved_log_level = m->log_level_overridden ? log_get_max_level() : -1;
|
||
|
saved_log_target = m->log_target_overridden ? log_get_target() : _LOG_TARGET_INVALID;
|
||
|
|
||
|
- r = parse_config_file();
|
||
|
- if (r < 0)
|
||
|
- log_warning_errno(r, "Failed to parse config file, ignoring: %m");
|
||
|
+ (void) parse_configuration();
|
||
|
|
||
|
set_manager_defaults(m);
|
||
|
|
||
|
@@ -1965,18 +1965,14 @@ static void free_arguments(void) {
|
||
|
cpu_set_reset(&arg_cpu_affinity);
|
||
|
}
|
||
|
|
||
|
-static int load_configuration(int argc, char **argv, const char **ret_error_message) {
|
||
|
+static int parse_configuration(void) {
|
||
|
int r;
|
||
|
|
||
|
- assert(ret_error_message);
|
||
|
-
|
||
|
arg_default_tasks_max = system_tasks_max_scale(DEFAULT_TASKS_MAX_PERCENTAGE, 100U);
|
||
|
|
||
|
r = parse_config_file();
|
||
|
- if (r < 0) {
|
||
|
- *ret_error_message = "Failed to parse config file";
|
||
|
- return r;
|
||
|
- }
|
||
|
+ if (r < 0)
|
||
|
+ log_warning_errno(r, "Failed to parse config file, ignoring: %m");
|
||
|
|
||
|
if (arg_system) {
|
||
|
r = proc_cmdline_parse(parse_proc_cmdline_item, NULL, 0);
|
||
|
@@ -1987,6 +1983,16 @@ static int load_configuration(int argc, char **argv, const char **ret_error_mess
|
||
|
/* Note that this also parses bits from the kernel command line, including "debug". */
|
||
|
log_parse_environment();
|
||
|
|
||
|
+ return 0;
|
||
|
+}
|
||
|
+
|
||
|
+static int load_configuration(int argc, char **argv, const char **ret_error_message) {
|
||
|
+ int r;
|
||
|
+
|
||
|
+ assert(ret_error_message);
|
||
|
+
|
||
|
+ (void) parse_configuration();
|
||
|
+
|
||
|
r = parse_argv(argc, argv);
|
||
|
if (r < 0) {
|
||
|
*ret_error_message = "Failed to parse commandline arguments";
|