BACKPORT: mm: multi-gen LRU: groundwork
[platform/kernel/linux-rpi.git] / mm / swap.c
index 38c3fa4..5974b5f 100644 (file)
--- a/mm/swap.c
+++ b/mm/swap.c
@@ -440,6 +440,11 @@ void lru_cache_add(struct page *page)
        VM_BUG_ON_PAGE(PageActive(page) && PageUnevictable(page), page);
        VM_BUG_ON_PAGE(PageLRU(page), page);
        __lru_cache_add(page);
+       /* see the comment in lru_gen_add_page() */
+       if (lru_gen_enabled() && !PageUnevictable(page) &&
+           lru_gen_in_fault() && !(current->flags & PF_MEMALLOC))
+               SetPageActive(page);
+
 }
 
 /**
@@ -542,7 +547,7 @@ static void lru_deactivate_file_fn(struct page *page, struct lruvec *lruvec,
 static void lru_deactivate_fn(struct page *page, struct lruvec *lruvec,
                            void *arg)
 {
-       if (PageLRU(page) && PageActive(page) && !PageUnevictable(page)) {
+       if (!PageUnevictable(page) && (PageLRU(page) && (PageActive(page) || lru_gen_enabled()))) {
                int file = page_is_file_cache(page);
                int lru = page_lru_base_type(page);
 
@@ -654,7 +659,8 @@ void deactivate_file_page(struct page *page)
  */
 void deactivate_page(struct page *page)
 {
-       if (PageLRU(page) && PageActive(page) && !PageUnevictable(page)) {
+       if (PageLRU(page) && !PageUnevictable(page) &&
+           (PageActive(page) || lru_gen_enabled())) {
                struct pagevec *pvec = &get_cpu_var(lru_deactivate_pvecs);
 
                get_page(page);