- (dtucker) [openbsd-compat/port-linux.c] Bug #1838: Add support for the new
Linux OOM-killer magic values that changed in 2.6.36 kernels, with fallback to the old values. Feedback from vapier at gentoo org and djm, ok djm.
This commit is contained in:
parent
1ccbfa88b1
commit
0c93adc7c1
|
@ -6,6 +6,9 @@
|
||||||
its unique snowflake of a gdb error to the ones we look for.
|
its unique snowflake of a gdb error to the ones we look for.
|
||||||
- (djm) [regress/agent-getpeereid.sh] leave stdout attached when running
|
- (djm) [regress/agent-getpeereid.sh] leave stdout attached when running
|
||||||
ssh-add to avoid $SUDO failures on Linux
|
ssh-add to avoid $SUDO failures on Linux
|
||||||
|
- (dtucker) [openbsd-compat/port-linux.c] Bug #1838: Add support for the new
|
||||||
|
Linux OOM-killer magic values that changed in 2.6.36 kernels, with fallback
|
||||||
|
to the old values. Feedback from vapier at gentoo org and djm, ok djm.
|
||||||
|
|
||||||
20110116
|
20110116
|
||||||
- (dtucker) [Makefile.in configure.ac regress/kextype.sh] Skip sha256-based
|
- (dtucker) [Makefile.in configure.ac regress/kextype.sh] Skip sha256-based
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: port-linux.c,v 1.9 2010/09/10 00:30:25 dtucker Exp $ */
|
/* $Id: port-linux.c,v 1.10 2011/01/17 00:56:00 dtucker Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2005 Daniel Walsh <dwalsh@redhat.com>
|
* Copyright (c) 2005 Daniel Walsh <dwalsh@redhat.com>
|
||||||
|
@ -208,14 +208,22 @@ ssh_selinux_change_context(const char *newname)
|
||||||
#endif /* WITH_SELINUX */
|
#endif /* WITH_SELINUX */
|
||||||
|
|
||||||
#ifdef LINUX_OOM_ADJUST
|
#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.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 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.
|
* Tell the kernel's out-of-memory killer to avoid sshd.
|
||||||
|
@ -224,23 +232,31 @@ static int oom_adj_save = INT_MIN;
|
||||||
void
|
void
|
||||||
oom_adjust_setup(void)
|
oom_adjust_setup(void)
|
||||||
{
|
{
|
||||||
|
int i, value;
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
|
|
||||||
debug3("%s", __func__);
|
debug3("%s", __func__);
|
||||||
if ((fp = fopen(OOM_ADJ_PATH, "r+")) != NULL) {
|
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)
|
if (fscanf(fp, "%d", &oom_adj_save) != 1)
|
||||||
verbose("error reading %s: %s", OOM_ADJ_PATH, strerror(errno));
|
verbose("error reading %s: %s", oom_adj_path,
|
||||||
|
strerror(errno));
|
||||||
else {
|
else {
|
||||||
rewind(fp);
|
rewind(fp);
|
||||||
if (fprintf(fp, "%d\n", OOM_ADJ_NOKILL) <= 0)
|
if (fprintf(fp, "%d\n", value) <= 0)
|
||||||
verbose("error writing %s: %s",
|
verbose("error writing %s: %s",
|
||||||
OOM_ADJ_PATH, strerror(errno));
|
oom_adj_path, strerror(errno));
|
||||||
else
|
else
|
||||||
verbose("Set %s from %d to %d",
|
verbose("Set %s from %d to %d",
|
||||||
OOM_ADJ_PATH, oom_adj_save, OOM_ADJ_NOKILL);
|
oom_adj_path, oom_adj_save, value);
|
||||||
}
|
}
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
oom_adj_path = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Restore the saved OOM adjustment */
|
/* Restore the saved OOM adjustment */
|
||||||
|
@ -250,13 +266,14 @@ oom_adjust_restore(void)
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
|
|
||||||
debug3("%s", __func__);
|
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;
|
return;
|
||||||
|
|
||||||
if (fprintf(fp, "%d\n", oom_adj_save) <= 0)
|
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
|
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);
|
fclose(fp);
|
||||||
return;
|
return;
|
||||||
|
|
Loading…
Reference in New Issue