dryang / rpms / systemd

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