Commit 1fe47c0b authored by Miaohe Lin's avatar Miaohe Lin Committed by Andrew Morton

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.comSigned-off-by: default avatarMiaohe 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: default avatarAndrew Morton <akpm@linux-foundation.org>
parent 32a331a7
...@@ -2536,14 +2536,12 @@ static void shrink_active_list(unsigned long nr_to_scan, ...@@ -2536,14 +2536,12 @@ static void shrink_active_list(unsigned long nr_to_scan,
nr_deactivate, nr_rotated, sc->priority, file); 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 reclaim_stat dummy_stat;
struct page *page; unsigned int nr_reclaimed;
unsigned int noreclaim_flag; struct folio *folio;
struct scan_control sc = { struct scan_control sc = {
.gfp_mask = GFP_KERNEL, .gfp_mask = GFP_KERNEL,
.may_writepage = 1, .may_writepage = 1,
...@@ -2552,6 +2550,24 @@ unsigned long reclaim_pages(struct list_head *page_list) ...@@ -2552,6 +2550,24 @@ unsigned long reclaim_pages(struct list_head *page_list)
.no_demotion = 1, .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(); noreclaim_flag = memalloc_noreclaim_save();
while (!list_empty(page_list)) { while (!list_empty(page_list)) {
...@@ -2565,28 +2581,12 @@ unsigned long reclaim_pages(struct list_head *page_list) ...@@ -2565,28 +2581,12 @@ unsigned long reclaim_pages(struct list_head *page_list)
continue; continue;
} }
nr_reclaimed += shrink_page_list(&node_page_list, nr_reclaimed += reclaim_page_list(&node_page_list, NODE_DATA(nid));
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);
}
nid = NUMA_NO_NODE; nid = NUMA_NO_NODE;
} }
if (!list_empty(&node_page_list)) { if (!list_empty(&node_page_list))
nr_reclaimed += shrink_page_list(&node_page_list, nr_reclaimed += reclaim_page_list(&node_page_list, NODE_DATA(nid));
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);
}
}
memalloc_noreclaim_restore(noreclaim_flag); memalloc_noreclaim_restore(noreclaim_flag);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment