mm: zero-seek shrinkers
[linux-2.6-block.git] / mm / vmscan.c
index 8ea87586925e7c0672ca87352427c95d3bd5faf4..28c9ae5633b9899be8b4f2dd05bb9070238007e4 100644 (file)
@@ -474,9 +474,18 @@ static unsigned long do_shrink_slab(struct shrink_control *shrinkctl,
        nr = atomic_long_xchg(&shrinker->nr_deferred[nid], 0);
 
        total_scan = nr;
-       delta = freeable >> priority;
-       delta *= 4;
-       do_div(delta, shrinker->seeks);
+       if (shrinker->seeks) {
+               delta = freeable >> priority;
+               delta *= 4;
+               do_div(delta, shrinker->seeks);
+       } else {
+               /*
+                * These objects don't require any IO to create. Trim
+                * them aggressively under memory pressure to keep
+                * them from causing refetches in the IO caches.
+                */
+               delta = freeable / 2;
+       }
 
        /*
         * Make sure we apply some minimal pressure on default priority