Subject: + mm-swapc-clear-pageactive-before-adding-pages-onto-unevictable-list.patch added to -mm tree To: n-horiguchi@xxxxxxxxxxxxx,kirill.shutemov@xxxxxxxxxxxxxxx,kosaki.motohiro@xxxxxxxxxxxxxx,mgorman@xxxxxxx From: akpm@xxxxxxxxxxxxxxxxxxxx Date: Wed, 17 Jul 2013 14:02:26 -0700 The patch titled Subject: mm/swap.c: clear PageActive before adding pages onto unevictable list has been added to the -mm tree. Its filename is mm-swapc-clear-pageactive-before-adding-pages-onto-unevictable-list.patch This patch should soon appear at http://ozlabs.org/~akpm/mmots/broken-out/mm-swapc-clear-pageactive-before-adding-pages-onto-unevictable-list.patch and later at http://ozlabs.org/~akpm/mmotm/broken-out/mm-swapc-clear-pageactive-before-adding-pages-onto-unevictable-list.patch Before you just go and hit "reply", please: a) Consider who else should be cc'ed b) Prefer to cc a suitable mailing list as well c) Ideally: find the original patch on the mailing list and do a reply-to-all to that, adding suitable additional cc's *** Remember to use Documentation/SubmitChecklist when testing your code *** The -mm tree is included into linux-next and is updated there every 3-4 working days ------------------------------------------------------ From: Naoya Horiguchi <n-horiguchi@xxxxxxxxxxxxx> Subject: mm/swap.c: clear PageActive before adding pages onto unevictable list As a result of v3.10-3600-g13f7f78 ("mm: pagevec: defer deciding which LRU to add a page to until pagevec drain time"), pages on unevictable lists can have both of PageActive and PageUnevictable set. This is not only confusing, but also corrupts page migration and shrink_[in]active_list. This patch fixes the problem by adding ClearPageActive before adding pages into unevictable list. It also cleans up VM_BUG_ONs. Signed-off-by: Naoya Horiguchi <n-horiguchi@xxxxxxxxxxxxx> Cc: Mel Gorman <mgorman@xxxxxxx> Cc: KOSAKI Motohiro <kosaki.motohiro@xxxxxxxxxxxxxx> Cc: "Kirill A. Shutemov" <kirill.shutemov@xxxxxxxxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- mm/swap.c | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff -puN mm/swap.c~mm-swapc-clear-pageactive-before-adding-pages-onto-unevictable-list mm/swap.c --- a/mm/swap.c~mm-swapc-clear-pageactive-before-adding-pages-onto-unevictable-list +++ a/mm/swap.c @@ -512,12 +512,7 @@ EXPORT_SYMBOL(__lru_cache_add); */ void lru_cache_add(struct page *page) { - if (PageActive(page)) { - VM_BUG_ON(PageUnevictable(page)); - } else if (PageUnevictable(page)) { - VM_BUG_ON(PageActive(page)); - } - + VM_BUG_ON(PageActive(page) && PageUnevictable(page)); VM_BUG_ON(PageLRU(page)); __lru_cache_add(page); } @@ -539,6 +534,7 @@ void add_page_to_unevictable_list(struct spin_lock_irq(&zone->lru_lock); lruvec = mem_cgroup_page_lruvec(page, zone); + ClearPageActive(page); SetPageUnevictable(page); SetPageLRU(page); add_page_to_lru_list(page, lruvec, LRU_UNEVICTABLE); @@ -833,7 +829,6 @@ static void __pagevec_lru_add_fn(struct int active = PageActive(page); enum lru_list lru = page_lru(page); - VM_BUG_ON(PageUnevictable(page)); VM_BUG_ON(PageLRU(page)); SetPageLRU(page); _ Patches currently in -mm which might be from n-horiguchi@xxxxxxxxxxxxx are mm-swapc-clear-pageactive-before-adding-pages-onto-unevictable-list.patch -- To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html