{
        unsigned long max_nodes;
        unsigned long nodes;
-       unsigned long pages;
+       unsigned long cache;
 
        /* list_lru lock nests inside IRQ-safe mapping->tree_lock */
        local_irq_disable();
        nodes = list_lru_shrink_count(&shadow_nodes, sc);
        local_irq_enable();
 
-       if (sc->memcg) {
-               pages = mem_cgroup_node_nr_lru_pages(sc->memcg, sc->nid,
-                                                    LRU_ALL_FILE);
-       } else {
-               pages = node_page_state(NODE_DATA(sc->nid), NR_ACTIVE_FILE) +
-                       node_page_state(NODE_DATA(sc->nid), NR_INACTIVE_FILE);
-       }
-
        /*
-        * Active cache pages are limited to 50% of memory, and shadow
-        * entries that represent a refault distance bigger than that
-        * do not have any effect.  Limit the number of shadow nodes
-        * such that shadow entries do not exceed the number of active
-        * cache pages, assuming a worst-case node population density
-        * of 1/8th on average.
+        * Approximate a reasonable limit for the radix tree nodes
+        * containing shadow entries. We don't need to keep more
+        * shadow entries than possible pages on the active list,
+        * since refault distances bigger than that are dismissed.
+        *
+        * The size of the active list converges toward 100% of
+        * overall page cache as memory grows, with only a tiny
+        * inactive list. Assume the total cache size for that.
+        *
+        * Nodes might be sparsely populated, with only one shadow
+        * entry in the extreme case. Obviously, we cannot keep one
+        * node for every eligible shadow entry, so compromise on a
+        * worst-case density of 1/8th. Below that, not all eligible
+        * refaults can be detected anymore.
         *
         * On 64-bit with 7 radix_tree_nodes per page and 64 slots
         * each, this will reclaim shadow entries when they consume
-        * ~2% of available memory:
+        * ~1.8% of available memory:
         *
-        * PAGE_SIZE / radix_tree_nodes / node_entries / PAGE_SIZE
+        * PAGE_SIZE / radix_tree_nodes / node_entries * 8 / PAGE_SIZE
         */
-       max_nodes = pages >> (1 + RADIX_TREE_MAP_SHIFT - 3);
+       if (sc->memcg) {
+               cache = mem_cgroup_node_nr_lru_pages(sc->memcg, sc->nid,
+                                                    LRU_ALL_FILE);
+       } else {
+               cache = node_page_state(NODE_DATA(sc->nid), NR_ACTIVE_FILE) +
+                       node_page_state(NODE_DATA(sc->nid), NR_INACTIVE_FILE);
+       }
+       max_nodes = cache >> (RADIX_TREE_MAP_SHIFT - 3);
 
        if (nodes <= max_nodes)
                return 0;
-
        return nodes - max_nodes;
 }