diff options
author | Wei Yang <richard.weiyang@gmail.com> | 2022-05-13 06:23:00 +0300 |
---|---|---|
committer | Andrew Morton <akpm@linux-foundation.org> | 2022-05-13 17:20:14 +0300 |
commit | 1ae65e2749b0a3d236fc17d0eca5ea5f6f2c0032 (patch) | |
tree | b00635abbf3c8d1f8e96461f8553ff4372f5bd42 | |
parent | f19a27e399c4354b91d608dd77f33877f613224a (diff) | |
download | linux-1ae65e2749b0a3d236fc17d0eca5ea5f6f2c0032.tar.xz |
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>
-rw-r--r-- | mm/vmscan.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/mm/vmscan.c b/mm/vmscan.c index 9ff3cc2a941a..43883ff89c1a 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -2568,9 +2568,12 @@ unsigned long reclaim_pages(struct list_head *page_list) struct page *page; unsigned int noreclaim_flag; + if (list_empty(page_list)) + return nr_reclaimed; + noreclaim_flag = memalloc_noreclaim_save(); - while (!list_empty(page_list)) { + do { page = lru_to_page(page_list); if (nid == NUMA_NO_NODE) 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)); 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); |