X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=linux%2Fshrinker.c;h=f6c979aa6ae1bf751139ad604c3e56ead7cc777f;hb=ff247cc54875d28a82245371f174e15eb304c367;hp=7926be06e29f85983e331725877e351a56915680;hpb=04159ffa875ec3088d00408253db95669470b64c;p=bcachefs-tools-debian diff --git a/linux/shrinker.c b/linux/shrinker.c index 7926be0..f6c979a 100644 --- a/linux/shrinker.c +++ b/linux/shrinker.c @@ -28,7 +28,6 @@ void unregister_shrinker(struct shrinker *shrinker) struct meminfo { u64 total; u64 available; - }; static u64 parse_meminfo_line(const char *line) @@ -50,7 +49,7 @@ static struct meminfo read_meminfo(void) f = fopen("/proc/meminfo", "r"); if (!f) - die("error opening /proc/meminfo: %m"); + return ret; while ((len = getline(&line, &n, f)) != -1) { if ((v = strcmp_prefix(line, "MemTotal:"))) @@ -77,10 +76,18 @@ void run_shrinkers(void) return; info = read_meminfo(); - want_shrink = (info.total >> 2) - info.available; - if (want_shrink <= 0) - return; + if (info.total && info.available) { + want_shrink = (info.total >> 2) - info.available; + + if (want_shrink <= 0) + return; + } else { + /* If we weren't able to read /proc/meminfo, we must be pretty + * low: */ + + want_shrink = 8 << 20; + } mutex_lock(&shrinker_lock); list_for_each_entry(shrinker, &shrinker_list, list) {