[openssh/f15] Improve oom_adj (#727335)

Jan F. Chadima jfch2222 at fedoraproject.org
Wed Aug 3 08:46:32 UTC 2011


commit 9e4020a20580f3fd31128cc42abc96025df9cb11
Author: Jan F. Chadima <jfch at fukusima15.jagda.eu>
Date:   Wed Aug 3 10:35:57 2011 +0200

    Improve oom_adj (#727335)

 openssh-5.6p1-linux-oomkiller.patch |   96 +++++++++++++++++++++++++++++++++++
 openssh.spec                        |    8 +++-
 2 files changed, 103 insertions(+), 1 deletions(-)
---
diff --git a/openssh-5.6p1-linux-oomkiller.patch b/openssh-5.6p1-linux-oomkiller.patch
new file mode 100644
index 0000000..df4b810
--- /dev/null
+++ b/openssh-5.6p1-linux-oomkiller.patch
@@ -0,0 +1,96 @@
+? build
+Index: openbsd-compat/port-linux.c
+===================================================================
+RCS file: /var/cvs/openssh/openbsd-compat/port-linux.c,v
+retrieving revision 1.9
+diff -u -p -r1.9 port-linux.c
+--- openbsd-compat/port-linux.c	10 Sep 2010 00:30:25 -0000	1.9
++++ openbsd-compat/port-linux.c	17 Jan 2011 00:02:45 -0000
+@@ -208,14 +208,22 @@ ssh_selinux_change_context(const char *n
+ #endif /* WITH_SELINUX */
+ 
+ #ifdef LINUX_OOM_ADJUST
+-#define OOM_ADJ_PATH	"/proc/self/oom_adj"
+ /*
+- * The magic "don't kill me", as documented in eg:
++ * The magic "don't kill me" values, old and new, as documented in eg:
+  * http://lxr.linux.no/#linux+v2.6.32/Documentation/filesystems/proc.txt
++ * http://lxr.linux.no/#linux+v2.6.36/Documentation/filesystems/proc.txt
+  */
+-#define OOM_ADJ_NOKILL	-17
+ 
+ static int oom_adj_save = INT_MIN;
++static char *oom_adj_path = NULL;
++struct {
++	char *path;
++	int value;
++} oom_adjust[] = {
++	{"/proc/self/oom_score_adj", -1000},	/* kernels >= 2.6.36 */
++	{"/proc/self/oom_adj", -17},		/* kernels <= 2.6.35 */
++	{NULL, 0},
++};
+ 
+ /*
+  * Tell the kernel's out-of-memory killer to avoid sshd.
+@@ -224,23 +232,31 @@ static int oom_adj_save = INT_MIN;
+ void
+ oom_adjust_setup(void)
+ {
++	int i, value;
+ 	FILE *fp;
+ 
+ 	debug3("%s", __func__);
+-	if ((fp = fopen(OOM_ADJ_PATH, "r+")) != NULL) {
+-		if (fscanf(fp, "%d", &oom_adj_save) != 1)
+-			verbose("error reading %s: %s", OOM_ADJ_PATH, strerror(errno));
+-		else {
+-			rewind(fp);
+-			if (fprintf(fp, "%d\n", OOM_ADJ_NOKILL) <= 0)
+-				verbose("error writing %s: %s",
+-				    OOM_ADJ_PATH, strerror(errno));
+-			else
+-				verbose("Set %s from %d to %d",
+-				    OOM_ADJ_PATH, oom_adj_save, OOM_ADJ_NOKILL);
++	 for (i = 0; oom_adjust[i].path != NULL; i++) {
++		oom_adj_path = oom_adjust[i].path;
++		value = oom_adjust[i].value;
++		if ((fp = fopen(oom_adj_path, "r+")) != NULL) {
++			if (fscanf(fp, "%d", &oom_adj_save) != 1)
++				verbose("error reading %s: %s", oom_adj_path,
++				    strerror(errno));
++			else {
++				rewind(fp);
++				if (fprintf(fp, "%d\n", value) <= 0)
++					verbose("error writing %s: %s",
++					   oom_adj_path, strerror(errno));
++				else
++					verbose("Set %s from %d to %d",
++					   oom_adj_path, oom_adj_save, value);
++			}
++			fclose(fp);
++			return;
+ 		}
+-		fclose(fp);
+ 	}
++	oom_adj_path = NULL;
+ }
+ 
+ /* Restore the saved OOM adjustment */
+@@ -250,13 +266,14 @@ oom_adjust_restore(void)
+ 	FILE *fp;
+ 
+ 	debug3("%s", __func__);
+-	if (oom_adj_save == INT_MIN || (fp = fopen(OOM_ADJ_PATH, "w")) == NULL)
++	if (oom_adj_save == INT_MIN || oom_adj_save == NULL ||
++	    (fp = fopen(oom_adj_path, "w")) == NULL)
+ 		return;
+ 
+ 	if (fprintf(fp, "%d\n", oom_adj_save) <= 0)
+-		verbose("error writing %s: %s", OOM_ADJ_PATH, strerror(errno));
++		verbose("error writing %s: %s", oom_adj_path, strerror(errno));
+ 	else
+-		verbose("Set %s to %d", OOM_ADJ_PATH, oom_adj_save);
++		verbose("Set %s to %d", oom_adj_path, oom_adj_save);
+ 
+ 	fclose(fp);
+ 	return;
diff --git a/openssh.spec b/openssh.spec
index eaa37e8..a5ca0dd 100644
--- a/openssh.spec
+++ b/openssh.spec
@@ -71,7 +71,7 @@
 
 # Do not forget to bump pam_ssh_agent_auth release if you rewind the main package release to 1
 %define openssh_ver 5.6p1
-%define openssh_rel 33
+%define openssh_rel 34
 %define pam_ssh_agent_ver 0.9.2
 %define pam_ssh_agent_rel 29
 
@@ -141,6 +141,8 @@ Patch80: openssh-5.6p1-biguid.patch
 Patch81: openssh-5.6p1-clientloop.patch
 #https://bugzilla.mindrot.org/show_bug.cgi?id=1894
 Patch82:openssh-5.6p1-getaddrinfo.patch
+#https://bugzilla.mindrot.org/show_bug.cgi?id=1838
+Patch83:openssh-5.6p1-linux-oomkiller.patch
 
 License: BSD
 Group: Applications/Internet
@@ -325,6 +327,7 @@ popd
 %patch80 -p1 -b .biguid
 %patch81 -p1 -b .clientloop
 %patch82 -p1 -b .getaddrinfo
+%patch83 -p0 -b .oomkiller
 
 autoreconf
 pushd pam_ssh_agent_auth-%{pam_ssh_agent_ver}
@@ -606,6 +609,9 @@ fi
 %endif
 
 %changelog
+* Wed Aug  3 2011 Jan F. Chadima <jchadima at redhat.com> - 5.6p2-34 + 0.9.2-29
+- Improve oom_adj (#727335)
+
 * Thu Jul 14 2011 Jan F. Chadima <jchadima at redhat.com> - 5.6p2-33 + 0.9.2-29
 - Add postlogin to pam. (#718807)
 


More information about the scm-commits mailing list