ec58dfa358
Add 0104-RHBZ-737989-systemd-unit-fix.patch * systemd will only start multipathd if /etc/multipath.conf exists Add 0105-fix-oom-adj.patch * first try setting oom_score_adj
70 lines
1.4 KiB
Diff
70 lines
1.4 KiB
Diff
---
|
|
multipathd/main.c | 37 ++++++++++++++++++++++++++++---------
|
|
1 file changed, 28 insertions(+), 9 deletions(-)
|
|
|
|
Index: multipath-tools/multipathd/main.c
|
|
===================================================================
|
|
--- multipath-tools.orig/multipathd/main.c
|
|
+++ multipath-tools/multipathd/main.c
|
|
@@ -15,6 +15,7 @@
|
|
#include <sys/time.h>
|
|
#include <sys/resource.h>
|
|
#include <limits.h>
|
|
+#include <linux/oom.h>
|
|
|
|
/*
|
|
* libcheckers
|
|
@@ -1389,17 +1390,35 @@ setscheduler (void)
|
|
}
|
|
|
|
static void
|
|
-set_oom_adj (int val)
|
|
+set_oom_adj (void)
|
|
{
|
|
+ int retry = 1;
|
|
+ char *file = "/proc/self/oom_score_adj";
|
|
+ int score = OOM_SCORE_ADJ_MIN;
|
|
FILE *fp;
|
|
+ struct stat st;
|
|
|
|
- fp = fopen("/proc/self/oom_adj", "w");
|
|
-
|
|
- if (!fp)
|
|
- return;
|
|
-
|
|
- fprintf(fp, "%i", val);
|
|
- fclose(fp);
|
|
+ do {
|
|
+ if (stat(file, &st) == 0){
|
|
+ fp = fopen(file, "w");
|
|
+ if (!fp) {
|
|
+ condlog(0, "couldn't fopen %s : %s", file,
|
|
+ strerror(errno));
|
|
+ return;
|
|
+ }
|
|
+ fprintf(fp, "%i", score);
|
|
+ fclose(fp);
|
|
+ return;
|
|
+ }
|
|
+ if (errno != ENOENT) {
|
|
+ condlog(0, "couldn't stat %s : %s", file,
|
|
+ strerror(errno));
|
|
+ return;
|
|
+ }
|
|
+ file = "/proc/self/oom_adj";
|
|
+ score = OOM_ADJUST_MIN;
|
|
+ } while (retry--);
|
|
+ condlog(0, "couldn't adjust oom score");
|
|
}
|
|
|
|
void
|
|
@@ -1489,7 +1508,7 @@ child (void * param)
|
|
}
|
|
signal_init();
|
|
setscheduler();
|
|
- set_oom_adj(-16);
|
|
+ set_oom_adj();
|
|
vecs = gvecs = init_vecs();
|
|
|
|
if (!vecs)
|