On Sat 05-03-22 02:17:37, Yu Zhao wrote: [...] > diff --git a/mm/swap.c b/mm/swap.c > index bcf3ac288b56..7fd99f037ca7 100644 > --- a/mm/swap.c > +++ b/mm/swap.c > @@ -563,7 +559,7 @@ static void lru_deactivate_file_fn(struct page > *page, struct lruvec *lruvec) > > static void lru_deactivate_fn(struct page *page, struct lruvec *lruvec) > { > - if (PageActive(page) && !PageUnevictable(page)) { > + if (!PageUnevictable(page)) { > int nr_pages = thp_nr_pages(page); > > del_page_from_lru_list(page, lruvec); > @@ -677,7 +673,7 @@ 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)) { > struct pagevec *pvec; > > local_lock(&lru_pvecs.lock); > > I'll leave it to Minchan to decide whether this is worth fixing, > together with this one: There doesn't seem to be any dependency on the PageActive anymore. I do remember we have relied on the PageActive to move from the active list to the inactive. This is not the case anymore but I am wondering whether above is really sufficient. If you are deactivating an inactive page then I would expect you want to move that page in the LRU as well. In other words don't you want if (page_active) add_page_to_lru_list else add_page_to_lru_list_tail -- Michal Hocko SUSE Labs