mirror of
https://github.com/hardkernel/linux.git
synced 2026-03-25 12:00:22 +09:00
BACKPORT: mm: don't pass "enum lru_list" to lru list addition functions
The "enum lru_list" parameter to add_page_to_lru_list() and
add_page_to_lru_list_tail() is redundant in the sense that it can
be extracted from the "struct page" parameter by page_lru().
A caveat is that we need to make sure PageActive() or
PageUnevictable() is correctly set or cleared before calling
these two functions. And they are indeed.
Link: https://lore.kernel.org/linux-mm/20201207220949.830352-4-yuzhao@google.com/
Link: https://lkml.kernel.org/r/20210122220600.906146-4-yuzhao@google.com
Signed-off-by: Yu Zhao <yuzhao@google.com>
Cc: Alex Shi <alex.shi@linux.alibaba.com>
Cc: Hugh Dickins <hughd@google.com>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Cc: Matthew Wilcox <willy@infradead.org>
Cc: Michal Hocko <mhocko@kernel.org>
Cc: Roman Gushchin <guro@fb.com>
Cc: Vladimir Davydov <vdavydov.dev@gmail.com>
Cc: Vlastimil Babka <vbabka@suse.cz>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
(cherry picked from commit 3a9c9788a3)
Bug: 227651406
Signed-off-by: Kalesh Singh <kaleshsingh@google.com>
Change-Id: I0d92b845d18e6ab3bcb5645f22e3cedb04257d98
This commit is contained in:
@@ -107,15 +107,19 @@ static __always_inline enum lru_list page_lru(struct page *page)
|
||||
}
|
||||
|
||||
static __always_inline void add_page_to_lru_list(struct page *page,
|
||||
struct lruvec *lruvec, enum lru_list lru)
|
||||
struct lruvec *lruvec)
|
||||
{
|
||||
enum lru_list lru = page_lru(page);
|
||||
|
||||
update_lru_size(lruvec, lru, page_zonenum(page), thp_nr_pages(page));
|
||||
list_add(&page->lru, &lruvec->lists[lru]);
|
||||
}
|
||||
|
||||
static __always_inline void add_page_to_lru_list_tail(struct page *page,
|
||||
struct lruvec *lruvec, enum lru_list lru)
|
||||
struct lruvec *lruvec)
|
||||
{
|
||||
enum lru_list lru = page_lru(page);
|
||||
|
||||
update_lru_size(lruvec, lru, page_zonenum(page), thp_nr_pages(page));
|
||||
list_add_tail(&page->lru, &lruvec->lists[lru]);
|
||||
}
|
||||
|
||||
22
mm/swap.c
22
mm/swap.c
@@ -242,7 +242,7 @@ static void pagevec_move_tail_fn(struct page *page, struct lruvec *lruvec,
|
||||
if (PageLRU(page) && !PageUnevictable(page)) {
|
||||
del_page_from_lru_list(page, lruvec, page_lru(page));
|
||||
ClearPageActive(page);
|
||||
add_page_to_lru_list_tail(page, lruvec, page_lru(page));
|
||||
add_page_to_lru_list_tail(page, lruvec);
|
||||
(*pgmoved) += thp_nr_pages(page);
|
||||
}
|
||||
}
|
||||
@@ -338,8 +338,7 @@ static void __activate_page(struct page *page, struct lruvec *lruvec,
|
||||
|
||||
del_page_from_lru_list(page, lruvec, lru);
|
||||
SetPageActive(page);
|
||||
lru += LRU_ACTIVE;
|
||||
add_page_to_lru_list(page, lruvec, lru);
|
||||
add_page_to_lru_list(page, lruvec);
|
||||
trace_mm_lru_activate(page);
|
||||
|
||||
__count_vm_events(PGACTIVATE, nr_pages);
|
||||
@@ -569,14 +568,14 @@ static void lru_deactivate_file_fn(struct page *page, struct lruvec *lruvec,
|
||||
* It can make readahead confusing. But race window
|
||||
* is _really_ small and it's non-critical problem.
|
||||
*/
|
||||
add_page_to_lru_list(page, lruvec, lru);
|
||||
add_page_to_lru_list(page, lruvec);
|
||||
SetPageReclaim(page);
|
||||
} else {
|
||||
/*
|
||||
* The page's writeback ends up during pagevec
|
||||
* We moves tha page into tail of inactive.
|
||||
*/
|
||||
add_page_to_lru_list_tail(page, lruvec, lru);
|
||||
add_page_to_lru_list_tail(page, lruvec);
|
||||
__count_vm_events(PGROTATED, nr_pages);
|
||||
}
|
||||
|
||||
@@ -597,7 +596,7 @@ static void lru_deactivate_fn(struct page *page, struct lruvec *lruvec,
|
||||
del_page_from_lru_list(page, lruvec, lru + LRU_ACTIVE);
|
||||
ClearPageActive(page);
|
||||
ClearPageReferenced(page);
|
||||
add_page_to_lru_list(page, lruvec, lru);
|
||||
add_page_to_lru_list(page, lruvec);
|
||||
|
||||
__count_vm_events(PGDEACTIVATE, nr_pages);
|
||||
__count_memcg_events(lruvec_memcg(lruvec), PGDEACTIVATE,
|
||||
@@ -623,7 +622,7 @@ static void lru_lazyfree_fn(struct page *page, struct lruvec *lruvec,
|
||||
* anonymous pages
|
||||
*/
|
||||
ClearPageSwapBacked(page);
|
||||
add_page_to_lru_list(page, lruvec, LRU_INACTIVE_FILE);
|
||||
add_page_to_lru_list(page, lruvec);
|
||||
|
||||
__count_vm_events(PGLAZYFREE, nr_pages);
|
||||
__count_memcg_events(lruvec_memcg(lruvec), PGLAZYFREE,
|
||||
@@ -645,9 +644,9 @@ static void lru_lazyfree_movetail_fn(struct page *page, struct lruvec *lruvec,
|
||||
ClearPageActive(page);
|
||||
ClearPageReferenced(page);
|
||||
if (add_to_tail && *add_to_tail)
|
||||
add_page_to_lru_list_tail(page, lruvec, LRU_INACTIVE_FILE);
|
||||
add_page_to_lru_list_tail(page, lruvec);
|
||||
else
|
||||
add_page_to_lru_list(page, lruvec, LRU_INACTIVE_FILE);
|
||||
add_page_to_lru_list(page, lruvec);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1117,8 +1116,7 @@ void lru_add_page_tail(struct page *page, struct page *page_tail,
|
||||
* Put page_tail on the list at the correct position
|
||||
* so they all end up in order.
|
||||
*/
|
||||
add_page_to_lru_list_tail(page_tail, lruvec,
|
||||
page_lru(page_tail));
|
||||
add_page_to_lru_list_tail(page_tail, lruvec);
|
||||
}
|
||||
}
|
||||
#endif /* CONFIG_TRANSPARENT_HUGEPAGE */
|
||||
@@ -1173,7 +1171,7 @@ static void __pagevec_lru_add_fn(struct page *page, struct lruvec *lruvec,
|
||||
__count_vm_events(UNEVICTABLE_PGCULLED, nr_pages);
|
||||
}
|
||||
|
||||
add_page_to_lru_list(page, lruvec, lru);
|
||||
add_page_to_lru_list(page, lruvec);
|
||||
trace_mm_lru_insertion(page, lru);
|
||||
}
|
||||
|
||||
|
||||
@@ -1928,7 +1928,7 @@ static unsigned noinline_for_stack move_pages_to_lru(struct lruvec *lruvec,
|
||||
|
||||
SetPageLRU(page);
|
||||
lru = page_lru(page);
|
||||
add_page_to_lru_list(page, lruvec, lru);
|
||||
add_page_to_lru_list(page, lruvec);
|
||||
|
||||
if (put_page_testzero(page)) {
|
||||
__ClearPageLRU(page);
|
||||
@@ -4421,12 +4421,10 @@ void check_move_unevictable_pages(struct pagevec *pvec)
|
||||
continue;
|
||||
|
||||
if (page_evictable(page)) {
|
||||
enum lru_list lru = page_lru_base_type(page);
|
||||
|
||||
VM_BUG_ON_PAGE(PageActive(page), page);
|
||||
ClearPageUnevictable(page);
|
||||
del_page_from_lru_list(page, lruvec, LRU_UNEVICTABLE);
|
||||
add_page_to_lru_list(page, lruvec, lru);
|
||||
add_page_to_lru_list(page, lruvec);
|
||||
pgrescued += nr_pages;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user