From eabd925e615086b8ac98ec2dfa9127e28f38ef5a Mon Sep 17 00:00:00 2001 From: Charan Teja Reddy Date: Thu, 7 Apr 2022 15:17:24 +0530 Subject: [PATCH] ANDROID: mm: shmem: use reclaim_pages() to recalim pages from a list Static code analysis tool reported NULL pointer access in shrink_page_list() as the commit 26aa2d199d6f2 ("mm/migrate: demote pages during reclaim") expects valid pgdat. There is already an existing api, reclaim_pages, that tries to reclaim pages from the list. use it instead of creating custom function. Bug: 201263305 Fixes: 96f80f628451 ("ANDROID: mm: add reclaim_shmem_address_space() for faster reclaims") Change-Id: Iaa11feac94c9e8338324ace0276c49d6a0adeb0c Signed-off-by: Charan Teja Reddy --- include/linux/mm.h | 1 - mm/shmem.c | 6 +----- mm/vmscan.c | 30 ------------------------------ 3 files changed, 1 insertion(+), 36 deletions(-) diff --git a/include/linux/mm.h b/include/linux/mm.h index 2238cec029b4..bf7cc2676b23 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -3296,7 +3296,6 @@ unsigned long wp_shared_mapping_range(struct address_space *mapping, extern int sysctl_nr_trim_pages; extern int reclaim_shmem_address_space(struct address_space *mapping); -extern int reclaim_pages_from_list(struct list_head *page_list); #ifdef CONFIG_PRINTK void mem_dump_obj(void *object); diff --git a/mm/shmem.c b/mm/shmem.c index b58806cb95a1..3820d11238f2 100644 --- a/mm/shmem.c +++ b/mm/shmem.c @@ -4215,7 +4215,6 @@ int reclaim_shmem_address_space(struct address_space *mapping) pgoff_t start = 0; struct page *page; LIST_HEAD(page_list); - int reclaimed; XA_STATE(xas, &mapping->i_pages, start); if (!shmem_mapping(mapping)) @@ -4233,8 +4232,6 @@ int reclaim_shmem_address_space(struct address_space *mapping) continue; list_add(&page->lru, &page_list); - inc_node_page_state(page, NR_ISOLATED_ANON + - page_is_file_lru(page)); if (need_resched()) { xas_pause(&xas); @@ -4242,9 +4239,8 @@ int reclaim_shmem_address_space(struct address_space *mapping) } } rcu_read_unlock(); - reclaimed = reclaim_pages_from_list(&page_list); - return reclaimed; + return reclaim_pages(&page_list); #else return 0; #endif diff --git a/mm/vmscan.c b/mm/vmscan.c index 5cbc0bdaa341..46699775291d 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -1868,36 +1868,6 @@ unsigned int reclaim_clean_pages_from_list(struct zone *zone, return nr_reclaimed; } -int reclaim_pages_from_list(struct list_head *page_list) -{ - struct scan_control sc = { - .gfp_mask = GFP_KERNEL, - .priority = DEF_PRIORITY, - .may_writepage = 1, - .may_unmap = 1, - .may_swap = 1, - }; - unsigned long nr_reclaimed; - struct reclaim_stat dummy_stat; - struct page *page; - - list_for_each_entry(page, page_list, lru) - ClearPageActive(page); - - nr_reclaimed = shrink_page_list(page_list, NULL, &sc, - &dummy_stat, false); - while (!list_empty(page_list)) { - - page = lru_to_page(page_list); - list_del(&page->lru); - dec_node_page_state(page, NR_ISOLATED_ANON + - page_is_file_lru(page)); - putback_lru_page(page); - } - - return nr_reclaimed; -} - /* * Attempt to remove the specified page from its LRU. Only take this page * if it is of the appropriate PageActive status. Pages which are being