Now shrink_page_list expect all pages come from a same zone
but it's too limited to use it.

This patch removes the dependency and add may_discard in scan_control
so next patch can use shrink_page_list with pages from multiple zonnes.

Signed-off-by: Minchan Kim <[email protected]>
---
 mm/vmscan.c | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/mm/vmscan.c b/mm/vmscan.c
index 6ba4e8ea..e36ee51 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -77,6 +77,9 @@ struct scan_control {
        /* Can pages be swapped as part of reclaim? */
        int may_swap;
 
+       /* Discard pages in vrange */
+       int may_discard;
+
        int order;
 
        /* Scan (total_size >> priority) pages at once */
@@ -714,7 +717,8 @@ static unsigned long shrink_page_list(struct list_head 
*page_list,
                        goto keep;
 
                VM_BUG_ON(PageActive(page));
-               VM_BUG_ON(page_zone(page) != zone);
+               if (zone)
+                       VM_BUG_ON(page_zone(page) != zone);
 
                sc->nr_scanned++;
 
@@ -785,6 +789,10 @@ static unsigned long shrink_page_list(struct list_head 
*page_list,
                        ; /* try to reclaim the page below */
                }
 
+               /* Fail to discard a page and returns a page to caller */
+               if (sc->may_discard)
+                       goto keep_locked;
+                               
                /*
                 * Anonymous process memory has backing store?
                 * Try to allocate it some swap space here.
@@ -963,7 +971,8 @@ keep:
         * back off and wait for congestion to clear because further reclaim
         * will encounter the same problem
         */
-       if (nr_dirty && nr_dirty == nr_congested && global_reclaim(sc))
+       if (nr_dirty && nr_dirty == nr_congested && global_reclaim(sc) &&
+               zone)
                zone_set_flag(zone, ZONE_CONGESTED);
 
        free_hot_cold_page_list(&free_pages, 1);
-- 
1.8.1.1

--
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