forked from Minki/linux
mm/vmscan: filter empty page_list at the beginning
node_page_list would always be !empty on finishing the loop, except page_list is empty. Let's handle empty page_list before doing any real work including touching PF_MEMALLOC flag. Link: https://lkml.kernel.org/r/20220429014426.29223-1-richard.weiyang@gmail.com Signed-off-by: Wei Yang <richard.weiyang@gmail.com> Reviewed-by: Andrew Morton <akpm@linux-foundation.org> Cc: Minchan Kim <minchan@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
f19a27e399
commit
1ae65e2749
10
mm/vmscan.c
10
mm/vmscan.c
@ -2568,9 +2568,12 @@ unsigned long reclaim_pages(struct list_head *page_list)
|
|||||||
struct page *page;
|
struct page *page;
|
||||||
unsigned int noreclaim_flag;
|
unsigned int noreclaim_flag;
|
||||||
|
|
||||||
|
if (list_empty(page_list))
|
||||||
|
return nr_reclaimed;
|
||||||
|
|
||||||
noreclaim_flag = memalloc_noreclaim_save();
|
noreclaim_flag = memalloc_noreclaim_save();
|
||||||
|
|
||||||
while (!list_empty(page_list)) {
|
do {
|
||||||
page = lru_to_page(page_list);
|
page = lru_to_page(page_list);
|
||||||
if (nid == NUMA_NO_NODE)
|
if (nid == NUMA_NO_NODE)
|
||||||
nid = page_to_nid(page);
|
nid = page_to_nid(page);
|
||||||
@ -2583,10 +2586,9 @@ unsigned long reclaim_pages(struct list_head *page_list)
|
|||||||
|
|
||||||
nr_reclaimed += reclaim_page_list(&node_page_list, NODE_DATA(nid));
|
nr_reclaimed += reclaim_page_list(&node_page_list, NODE_DATA(nid));
|
||||||
nid = NUMA_NO_NODE;
|
nid = NUMA_NO_NODE;
|
||||||
}
|
} while (!list_empty(page_list));
|
||||||
|
|
||||||
if (!list_empty(&node_page_list))
|
nr_reclaimed += reclaim_page_list(&node_page_list, NODE_DATA(nid));
|
||||||
nr_reclaimed += reclaim_page_list(&node_page_list, NODE_DATA(nid));
|
|
||||||
|
|
||||||
memalloc_noreclaim_restore(noreclaim_flag);
|
memalloc_noreclaim_restore(noreclaim_flag);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user