mm/vmscan: introduce helper function reclaim_page_list()

Introduce helper function reclaim_page_list() to eliminate the duplicated
code of doing shrink_page_list() and putback_lru_page.  Also we can
separate node reclaim from node page list operation this way.  No
functional change intended.

Link: https://lkml.kernel.org/r/20220425111232.23182-3-linmiaohe@huawei.com
Signed-off-by: Miaohe Lin <linmiaohe@huawei.com>
Cc: Christoph Hellwig <hch@lst.de>
Cc: Huang, Ying <ying.huang@intel.com>
Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
Cc: Oscar Salvador <osalvador@suse.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
Miaohe Lin 2022-05-12 20:22:59 -07:00 committed by Andrew Morton
parent 32a331a72f
commit 1fe47c0beb

View File

@ -2536,14 +2536,12 @@ static void shrink_active_list(unsigned long nr_to_scan,
nr_deactivate, nr_rotated, sc->priority, file);
}
unsigned long reclaim_pages(struct list_head *page_list)
static unsigned int reclaim_page_list(struct list_head *page_list,
struct pglist_data *pgdat)
{
int nid = NUMA_NO_NODE;
unsigned int nr_reclaimed = 0;
LIST_HEAD(node_page_list);
struct reclaim_stat dummy_stat;
struct page *page;
unsigned int noreclaim_flag;
unsigned int nr_reclaimed;
struct folio *folio;
struct scan_control sc = {
.gfp_mask = GFP_KERNEL,
.may_writepage = 1,
@ -2552,6 +2550,24 @@ unsigned long reclaim_pages(struct list_head *page_list)
.no_demotion = 1,
};
nr_reclaimed = shrink_page_list(page_list, pgdat, &sc, &dummy_stat, false);
while (!list_empty(page_list)) {
folio = lru_to_folio(page_list);
list_del(&folio->lru);
folio_putback_lru(folio);
}
return nr_reclaimed;
}
unsigned long reclaim_pages(struct list_head *page_list)
{
int nid = NUMA_NO_NODE;
unsigned int nr_reclaimed = 0;
LIST_HEAD(node_page_list);
struct page *page;
unsigned int noreclaim_flag;
noreclaim_flag = memalloc_noreclaim_save();
while (!list_empty(page_list)) {
@ -2565,28 +2581,12 @@ unsigned long reclaim_pages(struct list_head *page_list)
continue;
}
nr_reclaimed += shrink_page_list(&node_page_list,
NODE_DATA(nid),
&sc, &dummy_stat, false);
while (!list_empty(&node_page_list)) {
page = lru_to_page(&node_page_list);
list_del(&page->lru);
putback_lru_page(page);
}
nr_reclaimed += reclaim_page_list(&node_page_list, NODE_DATA(nid));
nid = NUMA_NO_NODE;
}
if (!list_empty(&node_page_list)) {
nr_reclaimed += shrink_page_list(&node_page_list,
NODE_DATA(nid),
&sc, &dummy_stat, false);
while (!list_empty(&node_page_list)) {
page = lru_to_page(&node_page_list);
list_del(&page->lru);
putback_lru_page(page);
}
}
if (!list_empty(&node_page_list))
nr_reclaimed += reclaim_page_list(&node_page_list, NODE_DATA(nid));
memalloc_noreclaim_restore(noreclaim_flag);