summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--linux/shrinker.c16
1 files changed, 5 insertions, 11 deletions
diff --git a/linux/shrinker.c b/linux/shrinker.c
index 7658fb7e..8a24565f 100644
--- a/linux/shrinker.c
+++ b/linux/shrinker.c
@@ -54,7 +54,6 @@ void run_shrinkers(gfp_t gfp_mask, bool allocation_failed)
{
struct shrinker *shrinker;
struct sysinfo info;
- struct mallinfo malloc_info = mallinfo();
s64 want_shrink;
if (!(gfp_mask & GFP_KERNEL))
@@ -71,16 +70,11 @@ void run_shrinkers(gfp_t gfp_mask, bool allocation_failed)
si_meminfo(&info);
- if (info.totalram && info.totalram >> 4 < info.freeram) {
- /* freeram goes up when system swaps, use malloced data instead */
- want_shrink = -malloc_info.arena + (info.totalram / 10 * 8);
-
- if (want_shrink <= 0)
- return;
- } else {
- /* We want to play nice with other apps keep 6% avaliable, free 3% */
- want_shrink = (info.totalram >> 5);
- }
+ /* Aim for 6% of physical RAM free without anything in swap */
+ want_shrink = (info.totalram << 4) - info.freeram
+ + info.totalswap - info.freeswap;
+ if (want_shrink <= 0)
+ return;
mutex_lock(&shrinker_lock);
list_for_each_entry(shrinker, &shrinker_list, list) {