The access ratio based scan rate determination in get_scan_ratio
works ok in most situations, but needs to be corrected in some
corner cases:
- if we run out of swap space, do not bother scanning the anon LRUs
- if we have already freed all of the page cache, we need to scan
  the anon LRUs

Signed-off-by: Rik van Riel <[EMAIL PROTECTED]>

Index: linux-2.6.24-rc6-mm1/mm/vmscan.c
===================================================================
--- linux-2.6.24-rc6-mm1.orig/mm/vmscan.c       2008-01-07 17:33:50.000000000 
-0500
+++ linux-2.6.24-rc6-mm1/mm/vmscan.c    2008-01-07 17:57:49.000000000 -0500
@@ -1182,7 +1182,7 @@ static unsigned long shrink_list(enum lr
 static void get_scan_ratio(struct zone *zone, struct scan_control * sc,
                                        unsigned long *percent)
 {
-       unsigned long anon, file;
+       unsigned long anon, file, free;
        unsigned long anon_prio, file_prio;
        unsigned long rotate_sum;
        unsigned long ap, fp;
@@ -1230,6 +1230,20 @@ static void get_scan_ratio(struct zone *
        else if (fp > 100)
                fp = 100;
        percent[1] = fp;
+
+       free = zone_page_state(zone, NR_FREE_PAGES);
+
+       /*
+        * If we have no swap space, do not bother scanning anon pages
+        */
+       if (nr_swap_pages <= 0)
+               percent[0] = 0;
+       /*
+        * If we already freed most file pages, scan the anon pages
+        * regardless of the page access ratios or swappiness setting.
+        */
+       else if (file + free <= zone->pages_high)
+               percent[0] = 100;
 }
 
 

-- 
All Rights Reversed

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to