From 4f39e1c07abb738e626d48eeb64be013ea47befa Mon Sep 17 00:00:00 2001 From: Jim Carroll Date: Thu, 22 Mar 2018 17:30:14 -0500 Subject: [PATCH] Allow for larger preset property values, do not override Signed-off-by: Jim Carroll --- drivers/overlay/ostweaks_linux.go | 38 +++++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/drivers/overlay/ostweaks_linux.go b/drivers/overlay/ostweaks_linux.go index c00243ad2c..c5ceb7be45 100644 --- a/drivers/overlay/ostweaks_linux.go +++ b/drivers/overlay/ostweaks_linux.go @@ -3,6 +3,7 @@ package overlay import ( "io/ioutil" "path" + "strconv" "strings" "github.com/sirupsen/logrus" @@ -21,10 +22,43 @@ func writeSystemProperty(key, value string) error { return ioutil.WriteFile(path.Join("/proc/sys", keyPath), []byte(value), 0644) } +func readSystemProperty(key string) ([]byte, error) { + keyPath := strings.Replace(key, ".", "/", -1) + return ioutil.ReadFile(path.Join("/proc/sys", keyPath)) +} + +func byte2int(b []byte) int { + s := string(b) + s2 := s[:len(s)-1] // remove trailing newline + i := str2int(s2) + return i +} + +func str2int(s string) int { + i, err := strconv.Atoi(s) + if err != nil { + logrus.Errorf("error converting string %v to int, err: %s", s, err) + } + return i +} + func applyOStweaks() { for k, v := range sysctlConf { - if err := writeSystemProperty(k, v); err != nil { - logrus.Errorf("error setting the kernel parameter %s = %s, err: %s", k, v, err) + oldv_b, err := readSystemProperty(k) + + if err != nil { + logrus.Errorf("error reading the kernel parameter %s = %s, err: %s", k, v, err) + } + + oldv_i := byte2int(oldv_b) + newv_i := str2int(v) + + // Apply new property value, only if new value is larger than existing value + if newv_i > oldv_i { + new_v := strconv.Itoa(newv_i) + if err := writeSystemProperty(k, new_v); err != nil { + logrus.Errorf("error setting the kernel parameter %s = %s, err: %s", k, v, err) + } } } }