Add default OOM Score option from conf file
authorSangjung Woo <sangjung.woo@samsung.com>
Fri, 12 Apr 2013 07:56:03 +0000 (16:56 +0900)
committerSangjung Woo <sangjung.woo@samsung.com>
Fri, 12 Apr 2013 07:56:03 +0000 (16:56 +0900)
This patch is to support default OOM score option from both system.conf
and user.conf. Basically all daemons launched by systemd have the same
OOM score that is pre-defined in conf file except for explicitly be
specified in its service file using 'OOMScoreAdjust' option.

Change-Id: Ia6bd5d483e8bf30c6505ac127337f6a59a94e7f9
Signed-off-by: Sangjung Woo <sangjung.woo@samsung.com>
packaging/default_oom_score.patch [new file with mode: 0644]
packaging/systemd.spec

diff --git a/packaging/default_oom_score.patch b/packaging/default_oom_score.patch
new file mode 100644 (file)
index 0000000..3e877c9
--- /dev/null
@@ -0,0 +1,58 @@
+diff --git a/src/main.c b/src/main.c
+index ed317b4..6b56a86 100644
+--- a/src/main.c
++++ b/src/main.c
+@@ -76,6 +76,7 @@ static bool arg_sysv_console = true;
+ static bool arg_mount_auto = true;
+ static bool arg_swap_auto = true;
+ static char **arg_default_controllers = NULL;
++static char *arg_default_oom_score_adj = NULL;
+ static char ***arg_join_controllers = NULL;
+ static ExecOutput arg_default_std_output = EXEC_OUTPUT_JOURNAL;
+ static ExecOutput arg_default_std_error = EXEC_OUTPUT_INHERIT;
+@@ -656,6 +657,7 @@ static int parse_config_file(void) {
+                 { "Manager", "MountAuto",             config_parse_bool,         0, &arg_mount_auto          },
+                 { "Manager", "SwapAuto",              config_parse_bool,         0, &arg_swap_auto           },
+                 { "Manager", "DefaultControllers",    config_parse_strv,         0, &arg_default_controllers },
++                { "Manager", "DefaultOOMScoreAdj",    config_parse_string,       0, &arg_default_oom_score_adj },
+                 { "Manager", "DefaultStandardOutput", config_parse_output,       0, &arg_default_std_output  },
+                 { "Manager", "DefaultStandardError",  config_parse_output,       0, &arg_default_std_error   },
+                 { "Manager", "JoinControllers",       config_parse_join_controllers, 0, &arg_join_controllers },
+@@ -1260,6 +1262,13 @@ int main(int argc, char *argv[]) {
+         if (parse_config_file() < 0)
+                 goto finish;
++        
++              if (arg_default_oom_score_adj) {
++                      if (write_one_line_file("/proc/self/oom_score_adj", arg_default_oom_score_adj) < 0) {
++                              log_error("Failed to set default oom_score_adj: %s", arg_default_oom_score_adj);
++                              goto finish;
++                      }
++              }
+         if (arg_running_as == MANAGER_SYSTEM)
+                 if (parse_proc_cmdline() < 0)
+diff --git a/src/system.conf b/src/system.conf
+index 33d09bc..c24a606 100644
+--- a/src/system.conf
++++ b/src/system.conf
+@@ -18,6 +18,7 @@
+ #SysVConsole=yes
+ #CrashChVT=1
+ #CPUAffinity=1 2
++DefaultOOMScoreAdj=-1000
+ #MountAuto=yes
+ #SwapAuto=yes
+ #DefaultControllers=cpu
+diff --git a/src/user.conf b/src/user.conf
+index 9508a02..70c5540 100644
+--- a/src/user.conf
++++ b/src/user.conf
+@@ -8,6 +8,7 @@
+ # See systemd.conf(5) for details
+ [Manager]
++DefaultOOMScoreAdj=-1000
+ #LogLevel=info
+ #LogTarget=console
+ #LogColor=yes
index 5666f23..b8df3f3 100644 (file)
@@ -21,6 +21,7 @@ Patch9:     main-allow-system-wide-limits-for-services.patch
 Patch10:    enable-core-dumps-globally.patch
 Patch11:    SMACK-Add-configuration-options.-v3.patch
 Patch12:    reboot_syscall_param.patch
+Patch13:       default_oom_score.patch
 
 BuildRequires:  pkgconfig(dbus-1) >= 1.4.0
 BuildRequires:  pkgconfig(dbus-glib-1)
@@ -175,6 +176,7 @@ This package includes the man pages for systemd.
 %patch10 -p1
 %patch11 -p1
 %patch12 -p1
+%patch13 -p1
 
 %build
 cp %{SOURCE1001} .