diff --git a/mm/vmscan.c b/mm/vmscan.c index 23f8a5242de784a14c1a19d803e4f560a383aad5..718840df14e16b56a9ee292e82468d34708b8a58 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -895,6 +895,7 @@ static unsigned long shrink_slab(gfp_t gfp_mask, int nid, void drop_slab_node(int nid) { unsigned long freed; + int shift = 0; do { struct mem_cgroup *memcg = NULL; @@ -907,7 +908,7 @@ void drop_slab_node(int nid) do { freed += shrink_slab(GFP_KERNEL, nid, memcg, 0); } while ((memcg = mem_cgroup_iter(NULL, memcg, NULL)) != NULL); - } while (freed > 10); + } while ((freed >> shift++) > 1); } void drop_slab(void)