Blame SOURCES/0277-pid1-don-t-reset-setting-from-proc-cmdline-upon-rest.patch

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