X-Git-Url: http://git.monstr.eu/?a=blobdiff_plain;f=mm%2Fvmscan.c;h=74296c2d1fed28e06088eb89b8e912bc73bd5f71;hb=2c3ef25c4a60cc18cf3f05a74c78220748f25684;hp=1b14a1b2539c856a74b182d5c218e5b6aea29e4b;hpb=2e786d9e5a2014c327d9b2eec83fa60b16af26f9;p=linux-2.6-microblaze.git diff --git a/mm/vmscan.c b/mm/vmscan.c index 1b14a1b2539c..74296c2d1fed 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -939,6 +939,7 @@ out: void drop_slab_node(int nid) { unsigned long freed; + int shift = 0; do { struct mem_cgroup *memcg = NULL; @@ -951,7 +952,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) @@ -2714,7 +2715,7 @@ out: cgroup_size = max(cgroup_size, protection); scan = lruvec_size - lruvec_size * protection / - cgroup_size; + (cgroup_size + 1); /* * Minimally target SWAP_CLUSTER_MAX pages to keep