linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/5] remove add/del page to lru functions
@ 2022-01-20 13:10 alexs
  2022-01-20 13:10 ` [PATCH 1/5] mm: remove page_is_file_lru function alexs
                   ` (4 more replies)
  0 siblings, 5 replies; 9+ messages in thread
From: alexs @ 2022-01-20 13:10 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Alex Shi, Steven Rostedt, Ingo Molnar, Naoya Horiguchi, Yu Zhao,
	Arnd Bergmann, Vlastimil Babka, Mel Gorman, Johannes Weiner,
	linux-kernel, linux-mm

From: Alex Shi <alexs@kernel.org>

Couple of old page/lru operation funcs are just inline replaced. Remove
them to reduce function name remember and make code simple.

Thanks
Alex

Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Naoya Horiguchi <naoya.horiguchi@nec.com>
Cc: Yu Zhao <yuzhao@google.com>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Vlastimil Babka <vbabka@suse.cz>
Cc: Mel Gorman <mgorman@techsingularity.net>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Cc: linux-kernel@vger.kernel.org
Cc: linux-mm@kvack.org

Alex Shi (5):
  mm: remove page_is_file_lru function
  mm: remove __clear_page_lru_flags()
  mm: remove add_page_to_lru_list() function
  mm: remove add_page_to_lru_list_tail()
  mm: remove del_page_from_lru_list()

 include/linux/mm_inline.h     | 28 ----------------------------
 include/trace/events/vmscan.h |  2 +-
 mm/compaction.c               |  4 ++--
 mm/gup.c                      |  2 +-
 mm/khugepaged.c               |  4 ++--
 mm/memory-failure.c           |  2 +-
 mm/memory_hotplug.c           |  2 +-
 mm/mempolicy.c                |  2 +-
 mm/migrate.c                  | 14 +++++++-------
 mm/mlock.c                    |  2 +-
 mm/mprotect.c                 |  2 +-
 mm/swap.c                     | 22 +++++++++++-----------
 mm/vmscan.c                   | 23 ++++++++++++-----------
 13 files changed, 41 insertions(+), 68 deletions(-)

-- 
2.25.1


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH 1/5] mm: remove page_is_file_lru function
  2022-01-20 13:10 [PATCH 0/5] remove add/del page to lru functions alexs
@ 2022-01-20 13:10 ` alexs
  2022-01-20 13:27   ` Matthew Wilcox
  2022-01-20 13:10 ` [PATCH 2/5] mm: remove __clear_page_lru_flags() alexs
                   ` (3 subsequent siblings)
  4 siblings, 1 reply; 9+ messages in thread
From: alexs @ 2022-01-20 13:10 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Alex Shi, Steven Rostedt, Ingo Molnar, Naoya Horiguchi, Yu Zhao,
	Arnd Bergmann, Vlastimil Babka, Mel Gorman, Johannes Weiner,
	linux-kernel, linux-mm

From: Alex Shi <alexs@kernel.org>

This function could be full replaced by folio_is_file_lru, so no reason
to keep a duplicate function.

Signed-off-by: Alex Shi <alexs@kernel.org>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Naoya Horiguchi <naoya.horiguchi@nec.com>
Cc: Yu Zhao <yuzhao@google.com>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Vlastimil Babka <vbabka@suse.cz>
Cc: Mel Gorman <mgorman@techsingularity.net>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Cc: linux-kernel@vger.kernel.org
Cc: linux-mm@kvack.org
---
 include/linux/mm_inline.h     |  5 -----
 include/trace/events/vmscan.h |  2 +-
 mm/compaction.c               |  2 +-
 mm/gup.c                      |  2 +-
 mm/khugepaged.c               |  4 ++--
 mm/memory-failure.c           |  2 +-
 mm/memory_hotplug.c           |  2 +-
 mm/mempolicy.c                |  2 +-
 mm/migrate.c                  | 14 +++++++-------
 mm/mprotect.c                 |  2 +-
 mm/vmscan.c                   | 13 +++++++------
 11 files changed, 23 insertions(+), 27 deletions(-)

diff --git a/include/linux/mm_inline.h b/include/linux/mm_inline.h
index b725839dfe71..f0aa34b0f2c4 100644
--- a/include/linux/mm_inline.h
+++ b/include/linux/mm_inline.h
@@ -27,11 +27,6 @@ static inline int folio_is_file_lru(struct folio *folio)
 	return !folio_test_swapbacked(folio);
 }
 
-static inline int page_is_file_lru(struct page *page)
-{
-	return folio_is_file_lru(page_folio(page));
-}
-
 static __always_inline void update_lru_size(struct lruvec *lruvec,
 				enum lru_list lru, enum zone_type zid,
 				long nr_pages)
diff --git a/include/trace/events/vmscan.h b/include/trace/events/vmscan.h
index ca2e9009a651..51a2b1766b05 100644
--- a/include/trace/events/vmscan.h
+++ b/include/trace/events/vmscan.h
@@ -341,7 +341,7 @@ TRACE_EVENT(mm_vmscan_writepage,
 	TP_fast_assign(
 		__entry->pfn = page_to_pfn(page);
 		__entry->reclaim_flags = trace_reclaim_flags(
-						page_is_file_lru(page));
+						folio_is_file_lru(page_folio(page)));
 	),
 
 	TP_printk("page=%p pfn=0x%lx flags=%s",
diff --git a/mm/compaction.c b/mm/compaction.c
index b4e94cda3019..12f2af6ac484 100644
--- a/mm/compaction.c
+++ b/mm/compaction.c
@@ -1066,7 +1066,7 @@ isolate_migratepages_block(struct compact_control *cc, unsigned long low_pfn,
 		/* Successfully isolated */
 		del_page_from_lru_list(page, lruvec);
 		mod_node_page_state(page_pgdat(page),
-				NR_ISOLATED_ANON + page_is_file_lru(page),
+				NR_ISOLATED_ANON + folio_is_file_lru(page_folio(page)),
 				thp_nr_pages(page));
 
 isolate_success:
diff --git a/mm/gup.c b/mm/gup.c
index f4c7645ccf8f..f3fea1efc2e2 100644
--- a/mm/gup.c
+++ b/mm/gup.c
@@ -1900,7 +1900,7 @@ static long check_and_migrate_movable_pages(unsigned long nr_pages,
 				list_add_tail(&head->lru, &movable_page_list);
 				mod_node_page_state(page_pgdat(head),
 						    NR_ISOLATED_ANON +
-						    page_is_file_lru(head),
+						    folio_is_file_lru(page_folio(head)),
 						    thp_nr_pages(head));
 			}
 		}
diff --git a/mm/khugepaged.c b/mm/khugepaged.c
index 35f14d0a00a6..8caed4089242 100644
--- a/mm/khugepaged.c
+++ b/mm/khugepaged.c
@@ -561,7 +561,7 @@ void __khugepaged_exit(struct mm_struct *mm)
 static void release_pte_page(struct page *page)
 {
 	mod_node_page_state(page_pgdat(page),
-			NR_ISOLATED_ANON + page_is_file_lru(page),
+			NR_ISOLATED_ANON + folio_is_file_lru(page_folio(page)),
 			-compound_nr(page));
 	unlock_page(page);
 	putback_lru_page(page);
@@ -703,7 +703,7 @@ static int __collapse_huge_page_isolate(struct vm_area_struct *vma,
 			goto out;
 		}
 		mod_node_page_state(page_pgdat(page),
-				NR_ISOLATED_ANON + page_is_file_lru(page),
+				NR_ISOLATED_ANON + folio_is_file_lru(page_folio(page)),
 				compound_nr(page));
 		VM_BUG_ON_PAGE(!PageLocked(page), page);
 		VM_BUG_ON_PAGE(PageLRU(page), page);
diff --git a/mm/memory-failure.c b/mm/memory-failure.c
index 14ae5c18e776..9405388ab852 100644
--- a/mm/memory-failure.c
+++ b/mm/memory-failure.c
@@ -2113,7 +2113,7 @@ static bool isolate_page(struct page *page, struct list_head *pagelist)
 
 	if (isolated && lru)
 		inc_node_page_state(page, NR_ISOLATED_ANON +
-				    page_is_file_lru(page));
+				    folio_is_file_lru(page_folio(page)));
 
 	/*
 	 * If we succeed to isolate the page, we grabbed another refcount on
diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c
index 0139b77c51d5..94b0d14da0af 100644
--- a/mm/memory_hotplug.c
+++ b/mm/memory_hotplug.c
@@ -1731,7 +1731,7 @@ do_migrate_range(unsigned long start_pfn, unsigned long end_pfn)
 			list_add_tail(&page->lru, &source);
 			if (!__PageMovable(page))
 				inc_node_page_state(page, NR_ISOLATED_ANON +
-						    page_is_file_lru(page));
+						    folio_is_file_lru(page_folio(page)));
 
 		} else {
 			if (__ratelimit(&migrate_rs)) {
diff --git a/mm/mempolicy.c b/mm/mempolicy.c
index a86590b2507d..f5c3c86d7c31 100644
--- a/mm/mempolicy.c
+++ b/mm/mempolicy.c
@@ -1032,7 +1032,7 @@ static int migrate_page_add(struct page *page, struct list_head *pagelist,
 		if (!isolate_lru_page(head)) {
 			list_add_tail(&head->lru, pagelist);
 			mod_node_page_state(page_pgdat(head),
-				NR_ISOLATED_ANON + page_is_file_lru(head),
+				NR_ISOLATED_ANON + folio_is_file_lru(page_folio(head)),
 				thp_nr_pages(head));
 		} else if (flags & MPOL_MF_STRICT) {
 			/*
diff --git a/mm/migrate.c b/mm/migrate.c
index c7da064b4781..bdd7425556db 100644
--- a/mm/migrate.c
+++ b/mm/migrate.c
@@ -164,7 +164,7 @@ void putback_movable_pages(struct list_head *l)
 			put_page(page);
 		} else {
 			mod_node_page_state(page_pgdat(page), NR_ISOLATED_ANON +
-					page_is_file_lru(page), -thp_nr_pages(page));
+					folio_is_file_lru(page_folio(page)), -thp_nr_pages(page));
 			putback_lru_page(page);
 		}
 	}
@@ -1129,7 +1129,7 @@ static int unmap_and_move(new_page_t get_new_page,
 		 */
 		if (likely(!__PageMovable(page)))
 			mod_node_page_state(page_pgdat(page), NR_ISOLATED_ANON +
-					page_is_file_lru(page), -thp_nr_pages(page));
+					folio_is_file_lru(page_folio(page)), -thp_nr_pages(page));
 
 		if (reason != MR_MEMORY_FAILURE)
 			/*
@@ -1657,7 +1657,7 @@ static int add_page_for_migration(struct mm_struct *mm, unsigned long addr,
 		err = 1;
 		list_add_tail(&head->lru, pagelist);
 		mod_node_page_state(page_pgdat(head),
-			NR_ISOLATED_ANON + page_is_file_lru(head),
+			NR_ISOLATED_ANON + folio_is_file_lru(page_folio(head)),
 			thp_nr_pages(head));
 	}
 out_putpage:
@@ -2048,7 +2048,7 @@ static int numamigrate_isolate_page(pg_data_t *pgdat, struct page *page)
 	if (isolate_lru_page(page))
 		return 0;
 
-	page_lru = page_is_file_lru(page);
+	page_lru = folio_is_file_lru(page_folio(page));
 	mod_node_page_state(page_pgdat(page), NR_ISOLATED_ANON + page_lru,
 			    nr_pages);
 
@@ -2093,7 +2093,7 @@ int migrate_misplaced_page(struct page *page, struct vm_area_struct *vma,
 	 * Don't migrate file pages that are mapped in multiple processes
 	 * with execute permissions as they are probably shared libraries.
 	 */
-	if (page_mapcount(page) != 1 && page_is_file_lru(page) &&
+	if (page_mapcount(page) != 1 && folio_is_file_lru(page_folio(page)) &&
 	    (vma->vm_flags & VM_EXEC))
 		goto out;
 
@@ -2101,7 +2101,7 @@ int migrate_misplaced_page(struct page *page, struct vm_area_struct *vma,
 	 * Also do not migrate dirty pages as not all filesystems can move
 	 * dirty pages in MIGRATE_ASYNC mode which is a waste of cycles.
 	 */
-	if (page_is_file_lru(page) && PageDirty(page))
+	if (folio_is_file_lru(page_folio(page)) && PageDirty(page))
 		goto out;
 
 	isolated = numamigrate_isolate_page(pgdat, page);
@@ -2115,7 +2115,7 @@ int migrate_misplaced_page(struct page *page, struct vm_area_struct *vma,
 		if (!list_empty(&migratepages)) {
 			list_del(&page->lru);
 			mod_node_page_state(page_pgdat(page), NR_ISOLATED_ANON +
-					page_is_file_lru(page), -nr_pages);
+					folio_is_file_lru(page_folio(page)), -nr_pages);
 			putback_lru_page(page);
 		}
 		isolated = 0;
diff --git a/mm/mprotect.c b/mm/mprotect.c
index 0138dfcdb1d8..31d1270deb4f 100644
--- a/mm/mprotect.c
+++ b/mm/mprotect.c
@@ -102,7 +102,7 @@ static unsigned long change_pte_range(struct vm_area_struct *vma, pmd_t *pmd,
 				 * it cannot move them all from MIGRATE_ASYNC
 				 * context.
 				 */
-				if (page_is_file_lru(page) && PageDirty(page))
+				if (folio_is_file_lru(page_folio(page)) && PageDirty(page))
 					continue;
 
 				/*
diff --git a/mm/vmscan.c b/mm/vmscan.c
index 0dbfa3a69567..c361973774b4 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -1311,7 +1311,7 @@ static int __remove_mapping(struct address_space *mapping, struct page *page,
 		 * exceptional entries and shadow exceptional entries in the
 		 * same address_space.
 		 */
-		if (reclaimed && page_is_file_lru(page) &&
+		if (reclaimed && folio_is_file_lru(page_folio(page)) &&
 		    !mapping_exiting(mapping) && !dax_mapping(mapping))
 			shadow = workingset_eviction(page, target_memcg);
 		__delete_from_page_cache(page, shadow);
@@ -1438,7 +1438,7 @@ static void page_check_dirty_writeback(struct page *page,
 	 * Anonymous pages are not handled by flushers and must be written
 	 * from reclaim context. Do not stall reclaim based on them
 	 */
-	if (!page_is_file_lru(page) ||
+	if (!folio_is_file_lru(page_folio(page)) ||
 	    (PageAnon(page) && !PageSwapBacked(page))) {
 		*dirty = false;
 		*writeback = false;
@@ -1777,7 +1777,7 @@ static unsigned int shrink_page_list(struct list_head *page_list,
 			 * the rest of the LRU for clean pages and see
 			 * the same dirty pages again (PageReclaim).
 			 */
-			if (page_is_file_lru(page) &&
+			if (folio_is_file_lru(page_folio(page)) &&
 			    (!current_is_kswapd() || !PageReclaim(page) ||
 			     !test_bit(PGDAT_DIRTY, &pgdat->flags))) {
 				/*
@@ -1927,7 +1927,7 @@ static unsigned int shrink_page_list(struct list_head *page_list,
 			try_to_free_swap(page);
 		VM_BUG_ON_PAGE(PageActive(page), page);
 		if (!PageMlocked(page)) {
-			int type = page_is_file_lru(page);
+			int type = folio_is_file_lru(page_folio(page));
 			SetPageActive(page);
 			stat->nr_activate[type] += nr_pages;
 			count_memcg_page_event(page, PGACTIVATE);
@@ -1976,7 +1976,7 @@ unsigned int reclaim_clean_pages_from_list(struct zone *zone,
 	unsigned int noreclaim_flag;
 
 	list_for_each_entry_safe(page, next, page_list, lru) {
-		if (!PageHuge(page) && page_is_file_lru(page) &&
+		if (!PageHuge(page) && folio_is_file_lru(page_folio(page)) &&
 		    !PageDirty(page) && !__PageMovable(page) &&
 		    !PageUnevictable(page)) {
 			ClearPageActive(page);
@@ -2555,7 +2555,8 @@ static void shrink_active_list(unsigned long nr_to_scan,
 			 * IO, plus JVM can create lots of anon VM_EXEC pages,
 			 * so we ignore them here.
 			 */
-			if ((vm_flags & VM_EXEC) && page_is_file_lru(page)) {
+			if ((vm_flags & VM_EXEC) &&
+					folio_is_file_lru(page_folio(page))) {
 				nr_rotated += thp_nr_pages(page);
 				list_add(&page->lru, &l_active);
 				continue;
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 2/5] mm: remove __clear_page_lru_flags()
  2022-01-20 13:10 [PATCH 0/5] remove add/del page to lru functions alexs
  2022-01-20 13:10 ` [PATCH 1/5] mm: remove page_is_file_lru function alexs
@ 2022-01-20 13:10 ` alexs
  2022-01-20 13:10 ` [PATCH 3/5] mm: remove add_page_to_lru_list() function alexs
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 9+ messages in thread
From: alexs @ 2022-01-20 13:10 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Alex Shi, Steven Rostedt, Ingo Molnar, Naoya Horiguchi, Yu Zhao,
	Arnd Bergmann, Vlastimil Babka, Mel Gorman, Johannes Weiner,
	linux-kernel, linux-mm

From: Alex Shi <alexs@kernel.org>

The function could be fully replaced by __folio_clear_lru_flags(), no
reason to keep a duplicate one.

Signed-off-by: Alex Shi <alexs@kernel.org>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Yu Zhao <yuzhao@google.com>
Cc: Alex Shi <alexs@kernel.org>
Cc: Vlastimil Babka <vbabka@suse.cz>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: linux-kernel@vger.kernel.org
Cc: linux-mm@kvack.org
---
 include/linux/mm_inline.h | 5 -----
 mm/swap.c                 | 4 ++--
 mm/vmscan.c               | 2 +-
 3 files changed, 3 insertions(+), 8 deletions(-)

diff --git a/include/linux/mm_inline.h b/include/linux/mm_inline.h
index f0aa34b0f2c4..c2384da888b4 100644
--- a/include/linux/mm_inline.h
+++ b/include/linux/mm_inline.h
@@ -59,11 +59,6 @@ static __always_inline void __folio_clear_lru_flags(struct folio *folio)
 	__folio_clear_unevictable(folio);
 }
 
-static __always_inline void __clear_page_lru_flags(struct page *page)
-{
-	__folio_clear_lru_flags(page_folio(page));
-}
-
 /**
  * folio_lru_list - Which LRU list should a folio be on?
  * @folio: The folio to test.
diff --git a/mm/swap.c b/mm/swap.c
index bcf3ac288b56..953cf8860542 100644
--- a/mm/swap.c
+++ b/mm/swap.c
@@ -86,7 +86,7 @@ static void __page_cache_release(struct page *page)
 
 		lruvec = folio_lruvec_lock_irqsave(folio, &flags);
 		del_page_from_lru_list(page, lruvec);
-		__clear_page_lru_flags(page);
+		__folio_clear_lru_flags(page_folio(page));
 		unlock_page_lruvec_irqrestore(lruvec, flags);
 	}
 	__ClearPageWaiters(page);
@@ -966,7 +966,7 @@ void release_pages(struct page **pages, int nr)
 				lock_batch = 0;
 
 			del_page_from_lru_list(page, lruvec);
-			__clear_page_lru_flags(page);
+			__folio_clear_lru_flags(page_folio(page));
 		}
 
 		__ClearPageWaiters(page);
diff --git a/mm/vmscan.c b/mm/vmscan.c
index c361973774b4..59a52ba8b52a 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -2337,7 +2337,7 @@ static unsigned int move_pages_to_lru(struct lruvec *lruvec,
 		SetPageLRU(page);
 
 		if (unlikely(put_page_testzero(page))) {
-			__clear_page_lru_flags(page);
+			__folio_clear_lru_flags(page_folio(page));
 
 			if (unlikely(PageCompound(page))) {
 				spin_unlock_irq(&lruvec->lru_lock);
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 3/5] mm: remove add_page_to_lru_list() function
  2022-01-20 13:10 [PATCH 0/5] remove add/del page to lru functions alexs
  2022-01-20 13:10 ` [PATCH 1/5] mm: remove page_is_file_lru function alexs
  2022-01-20 13:10 ` [PATCH 2/5] mm: remove __clear_page_lru_flags() alexs
@ 2022-01-20 13:10 ` alexs
  2022-01-20 13:10 ` [PATCH 4/5] mm: remove add_page_to_lru_list_tail() alexs
  2022-01-20 13:10 ` [PATCH 5/5] mm: remove del_page_from_lru_list() alexs
  4 siblings, 0 replies; 9+ messages in thread
From: alexs @ 2022-01-20 13:10 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Alex Shi, Steven Rostedt, Ingo Molnar, Naoya Horiguchi, Yu Zhao,
	Arnd Bergmann, Vlastimil Babka, Mel Gorman, Johannes Weiner,
	linux-kernel, linux-mm

From: Alex Shi <alexs@kernel.org>

The function could be fully replaced by ruvec_add_folio(), no reason to
keep a duplicate one.

Signed-off-by: Alex Shi <alexs@kernel.org>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Yu Zhao <yuzhao@google.com>
Cc: Alex Shi <alexs@kernel.org>
Cc: Vlastimil Babka <vbabka@suse.cz>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: linux-kernel@vger.kernel.org
Cc: linux-mm@kvack.org
---
 include/linux/mm_inline.h | 6 ------
 mm/swap.c                 | 6 +++---
 mm/vmscan.c               | 4 ++--
 3 files changed, 5 insertions(+), 11 deletions(-)

diff --git a/include/linux/mm_inline.h b/include/linux/mm_inline.h
index c2384da888b4..7d7abd5ff73f 100644
--- a/include/linux/mm_inline.h
+++ b/include/linux/mm_inline.h
@@ -92,12 +92,6 @@ void lruvec_add_folio(struct lruvec *lruvec, struct folio *folio)
 	list_add(&folio->lru, &lruvec->lists[lru]);
 }
 
-static __always_inline void add_page_to_lru_list(struct page *page,
-				struct lruvec *lruvec)
-{
-	lruvec_add_folio(lruvec, page_folio(page));
-}
-
 static __always_inline
 void lruvec_add_folio_tail(struct lruvec *lruvec, struct folio *folio)
 {
diff --git a/mm/swap.c b/mm/swap.c
index 953cf8860542..fb101a06dce4 100644
--- a/mm/swap.c
+++ b/mm/swap.c
@@ -543,7 +543,7 @@ static void lru_deactivate_file_fn(struct page *page, struct lruvec *lruvec)
 		 * It can make readahead confusing.  But race window
 		 * is _really_ small and  it's non-critical problem.
 		 */
-		add_page_to_lru_list(page, lruvec);
+		lruvec_add_folio(lruvec, page_folio(page));
 		SetPageReclaim(page);
 	} else {
 		/*
@@ -569,7 +569,7 @@ static void lru_deactivate_fn(struct page *page, struct lruvec *lruvec)
 		del_page_from_lru_list(page, lruvec);
 		ClearPageActive(page);
 		ClearPageReferenced(page);
-		add_page_to_lru_list(page, lruvec);
+		lruvec_add_folio(lruvec, page_folio(page));
 
 		__count_vm_events(PGDEACTIVATE, nr_pages);
 		__count_memcg_events(lruvec_memcg(lruvec), PGDEACTIVATE,
@@ -592,7 +592,7 @@ static void lru_lazyfree_fn(struct page *page, struct lruvec *lruvec)
 		 * anonymous pages
 		 */
 		ClearPageSwapBacked(page);
-		add_page_to_lru_list(page, lruvec);
+		lruvec_add_folio(lruvec, page_folio(page));
 
 		__count_vm_events(PGLAZYFREE, nr_pages);
 		__count_memcg_events(lruvec_memcg(lruvec), PGLAZYFREE,
diff --git a/mm/vmscan.c b/mm/vmscan.c
index 59a52ba8b52a..f09473c9ff35 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -2354,7 +2354,7 @@ static unsigned int move_pages_to_lru(struct lruvec *lruvec,
 		 * inhibits memcg migration).
 		 */
 		VM_BUG_ON_PAGE(!folio_matches_lruvec(page_folio(page), lruvec), page);
-		add_page_to_lru_list(page, lruvec);
+		lruvec_add_folio(lruvec, page_folio(page));
 		nr_pages = thp_nr_pages(page);
 		nr_moved += nr_pages;
 		if (PageActive(page))
@@ -4875,7 +4875,7 @@ void check_move_unevictable_pages(struct pagevec *pvec)
 		if (page_evictable(page) && PageUnevictable(page)) {
 			del_page_from_lru_list(page, lruvec);
 			ClearPageUnevictable(page);
-			add_page_to_lru_list(page, lruvec);
+			lruvec_add_folio(lruvec, page_folio(page));
 			pgrescued += nr_pages;
 		}
 		SetPageLRU(page);
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 4/5] mm: remove add_page_to_lru_list_tail()
  2022-01-20 13:10 [PATCH 0/5] remove add/del page to lru functions alexs
                   ` (2 preceding siblings ...)
  2022-01-20 13:10 ` [PATCH 3/5] mm: remove add_page_to_lru_list() function alexs
@ 2022-01-20 13:10 ` alexs
  2022-01-20 13:10 ` [PATCH 5/5] mm: remove del_page_from_lru_list() alexs
  4 siblings, 0 replies; 9+ messages in thread
From: alexs @ 2022-01-20 13:10 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Alex Shi, Steven Rostedt, Ingo Molnar, Naoya Horiguchi, Yu Zhao,
	Arnd Bergmann, Vlastimil Babka, Mel Gorman, Johannes Weiner,
	linux-kernel, linux-mm

From: Alex Shi <alexs@kernel.org>

The function could be fully replaced by lruvec_add_folio_tail, no reason
to keep a duplicate one.

Signed-off-by: Alex Shi <alexs@kernel.org>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Yu Zhao <yuzhao@google.com>
Cc: Alex Shi <alexs@kernel.org>
Cc: Vlastimil Babka <vbabka@suse.cz>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: linux-kernel@vger.kernel.org
Cc: linux-mm@kvack.org
---
 include/linux/mm_inline.h | 6 ------
 mm/swap.c                 | 2 +-
 2 files changed, 1 insertion(+), 7 deletions(-)

diff --git a/include/linux/mm_inline.h b/include/linux/mm_inline.h
index 7d7abd5ff73f..4df5b39cc97b 100644
--- a/include/linux/mm_inline.h
+++ b/include/linux/mm_inline.h
@@ -102,12 +102,6 @@ void lruvec_add_folio_tail(struct lruvec *lruvec, struct folio *folio)
 	list_add_tail(&folio->lru, &lruvec->lists[lru]);
 }
 
-static __always_inline void add_page_to_lru_list_tail(struct page *page,
-				struct lruvec *lruvec)
-{
-	lruvec_add_folio_tail(lruvec, page_folio(page));
-}
-
 static __always_inline
 void lruvec_del_folio(struct lruvec *lruvec, struct folio *folio)
 {
diff --git a/mm/swap.c b/mm/swap.c
index fb101a06dce4..23c0afb76be6 100644
--- a/mm/swap.c
+++ b/mm/swap.c
@@ -550,7 +550,7 @@ static void lru_deactivate_file_fn(struct page *page, struct lruvec *lruvec)
 		 * The page's writeback ends up during pagevec
 		 * We move that page into tail of inactive.
 		 */
-		add_page_to_lru_list_tail(page, lruvec);
+		lruvec_add_folio_tail(lruvec, page_folio(page));
 		__count_vm_events(PGROTATED, nr_pages);
 	}
 
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 5/5] mm: remove del_page_from_lru_list()
  2022-01-20 13:10 [PATCH 0/5] remove add/del page to lru functions alexs
                   ` (3 preceding siblings ...)
  2022-01-20 13:10 ` [PATCH 4/5] mm: remove add_page_to_lru_list_tail() alexs
@ 2022-01-20 13:10 ` alexs
  4 siblings, 0 replies; 9+ messages in thread
From: alexs @ 2022-01-20 13:10 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Alex Shi, Steven Rostedt, Ingo Molnar, Naoya Horiguchi, Yu Zhao,
	Arnd Bergmann, Vlastimil Babka, Mel Gorman, Johannes Weiner,
	linux-kernel, linux-mm

From: Alex Shi <alexs@kernel.org>

The function could be fully replaced by lruvec_del_folio(), no reason to
keep a duplicate one.

Signed-off-by: Alex Shi <alexs@kernel.org>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Yu Zhao <yuzhao@google.com>
Cc: Alex Shi <alexs@kernel.org>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Vlastimil Babka <vbabka@suse.cz>
Cc: linux-kernel@vger.kernel.org
Cc: linux-mm@kvack.org
---
 include/linux/mm_inline.h |  6 ------
 mm/compaction.c           |  2 +-
 mm/mlock.c                |  2 +-
 mm/swap.c                 | 10 +++++-----
 mm/vmscan.c               |  4 ++--
 5 files changed, 9 insertions(+), 15 deletions(-)

diff --git a/include/linux/mm_inline.h b/include/linux/mm_inline.h
index 4df5b39cc97b..a66c08079675 100644
--- a/include/linux/mm_inline.h
+++ b/include/linux/mm_inline.h
@@ -110,12 +110,6 @@ void lruvec_del_folio(struct lruvec *lruvec, struct folio *folio)
 			-folio_nr_pages(folio));
 }
 
-static __always_inline void del_page_from_lru_list(struct page *page,
-				struct lruvec *lruvec)
-{
-	lruvec_del_folio(lruvec, page_folio(page));
-}
-
 #ifdef CONFIG_ANON_VMA_NAME
 /*
  * mmap_lock should be read-locked when calling vma_anon_name() and while using
diff --git a/mm/compaction.c b/mm/compaction.c
index 12f2af6ac484..385e0bb7aad5 100644
--- a/mm/compaction.c
+++ b/mm/compaction.c
@@ -1064,7 +1064,7 @@ isolate_migratepages_block(struct compact_control *cc, unsigned long low_pfn,
 			low_pfn += compound_nr(page) - 1;
 
 		/* Successfully isolated */
-		del_page_from_lru_list(page, lruvec);
+		lruvec_del_folio(lruvec, page_folio(page));
 		mod_node_page_state(page_pgdat(page),
 				NR_ISOLATED_ANON + folio_is_file_lru(page_folio(page)),
 				thp_nr_pages(page));
diff --git a/mm/mlock.c b/mm/mlock.c
index 8f584eddd305..6b64758b5d8c 100644
--- a/mm/mlock.c
+++ b/mm/mlock.c
@@ -280,7 +280,7 @@ static void __munlock_pagevec(struct pagevec *pvec, struct zone *zone)
 			 */
 			if (TestClearPageLRU(page)) {
 				lruvec = folio_lruvec_relock_irq(folio, lruvec);
-				del_page_from_lru_list(page, lruvec);
+				lruvec_del_folio(lruvec, page_folio(page));
 				continue;
 			} else
 				__munlock_isolation_failed(page);
diff --git a/mm/swap.c b/mm/swap.c
index 23c0afb76be6..359821740e0f 100644
--- a/mm/swap.c
+++ b/mm/swap.c
@@ -85,7 +85,7 @@ static void __page_cache_release(struct page *page)
 		unsigned long flags;
 
 		lruvec = folio_lruvec_lock_irqsave(folio, &flags);
-		del_page_from_lru_list(page, lruvec);
+		lruvec_del_folio(lruvec, page_folio(page));
 		__folio_clear_lru_flags(page_folio(page));
 		unlock_page_lruvec_irqrestore(lruvec, flags);
 	}
@@ -533,7 +533,7 @@ static void lru_deactivate_file_fn(struct page *page, struct lruvec *lruvec)
 	if (page_mapped(page))
 		return;
 
-	del_page_from_lru_list(page, lruvec);
+	lruvec_del_folio(lruvec, page_folio(page));
 	ClearPageActive(page);
 	ClearPageReferenced(page);
 
@@ -566,7 +566,7 @@ static void lru_deactivate_fn(struct page *page, struct lruvec *lruvec)
 	if (PageActive(page) && !PageUnevictable(page)) {
 		int nr_pages = thp_nr_pages(page);
 
-		del_page_from_lru_list(page, lruvec);
+		lruvec_del_folio(lruvec, page_folio(page));
 		ClearPageActive(page);
 		ClearPageReferenced(page);
 		lruvec_add_folio(lruvec, page_folio(page));
@@ -583,7 +583,7 @@ static void lru_lazyfree_fn(struct page *page, struct lruvec *lruvec)
 	    !PageSwapCache(page) && !PageUnevictable(page)) {
 		int nr_pages = thp_nr_pages(page);
 
-		del_page_from_lru_list(page, lruvec);
+		lruvec_del_folio(lruvec, page_folio(page));
 		ClearPageActive(page);
 		ClearPageReferenced(page);
 		/*
@@ -965,7 +965,7 @@ void release_pages(struct page **pages, int nr)
 			if (prev_lruvec != lruvec)
 				lock_batch = 0;
 
-			del_page_from_lru_list(page, lruvec);
+			lruvec_del_folio(lruvec, page_folio(page));
 			__folio_clear_lru_flags(page_folio(page));
 		}
 
diff --git a/mm/vmscan.c b/mm/vmscan.c
index f09473c9ff35..8ab97eac284a 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -2247,7 +2247,7 @@ int isolate_lru_page(struct page *page)
 
 		get_page(page);
 		lruvec = folio_lruvec_lock_irq(folio);
-		del_page_from_lru_list(page, lruvec);
+		lruvec_del_folio(lruvec, page_folio(page));
 		unlock_page_lruvec_irq(lruvec);
 		ret = 0;
 	}
@@ -4873,7 +4873,7 @@ void check_move_unevictable_pages(struct pagevec *pvec)
 
 		lruvec = folio_lruvec_relock_irq(folio, lruvec);
 		if (page_evictable(page) && PageUnevictable(page)) {
-			del_page_from_lru_list(page, lruvec);
+			lruvec_del_folio(lruvec, page_folio(page));
 			ClearPageUnevictable(page);
 			lruvec_add_folio(lruvec, page_folio(page));
 			pgrescued += nr_pages;
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH 1/5] mm: remove page_is_file_lru function
  2022-01-20 13:10 ` [PATCH 1/5] mm: remove page_is_file_lru function alexs
@ 2022-01-20 13:27   ` Matthew Wilcox
  2022-01-21  7:02     ` Alex Shi
  0 siblings, 1 reply; 9+ messages in thread
From: Matthew Wilcox @ 2022-01-20 13:27 UTC (permalink / raw)
  To: alexs
  Cc: Andrew Morton, Steven Rostedt, Ingo Molnar, Naoya Horiguchi,
	Yu Zhao, Arnd Bergmann, Vlastimil Babka, Mel Gorman,
	Johannes Weiner, linux-kernel, linux-mm

On Thu, Jan 20, 2022 at 09:10:20PM +0800, alexs@kernel.org wrote:
> From: Alex Shi <alexs@kernel.org>
> 
> This function could be full replaced by folio_is_file_lru, so no reason
> to keep a duplicate function.

This is not a helpful way to do this kind of replacement.

Instead of choosing a function to remove and doing a blind replacement,
choose a call site and convert the whole calling function to use folios.
Once you've removed all callers, you can remove the wrapper function.

Also, a number of changes here will conflict with patches I've already
posted.  Try doing change_pte_range() in mprotect.c to get a feel for
how to convert a function entirely to folios.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 1/5] mm: remove page_is_file_lru function
  2022-01-20 13:27   ` Matthew Wilcox
@ 2022-01-21  7:02     ` Alex Shi
  2022-01-21 13:19       ` Matthew Wilcox
  0 siblings, 1 reply; 9+ messages in thread
From: Alex Shi @ 2022-01-21  7:02 UTC (permalink / raw)
  To: Matthew Wilcox
  Cc: Alex Shi, Andrew Morton, Steven Rostedt, Ingo Molnar,
	Naoya Horiguchi, Yu Zhao, Arnd Bergmann, Vlastimil Babka,
	Mel Gorman, Johannes Weiner, linux-kernel, linux-mm

On Thu, Jan 20, 2022 at 9:28 PM Matthew Wilcox <willy@infradead.org> wrote:
>
> On Thu, Jan 20, 2022 at 09:10:20PM +0800, alexs@kernel.org wrote:
> > From: Alex Shi <alexs@kernel.org>
> >
> > This function could be full replaced by folio_is_file_lru, so no reason
> > to keep a duplicate function.
>
> This is not a helpful way to do this kind of replacement.
>
> Instead of choosing a function to remove and doing a blind replacement,
> choose a call site and convert the whole calling function to use folios.
> Once you've removed all callers, you can remove the wrapper function.
>
> Also, a number of changes here will conflict with patches I've already
> posted.  Try doing change_pte_range() in mprotect.c to get a feel for
> how to convert a function entirely to folios.

Hi Willy,

Thanks for your comments!

The patchset did the thing as you required "convert the whole calling
function to use folios. then remove the wrapper function" on yesterday's
Linus and next tree, that included your patchset "Page cache/iomap for 5.17".

Is the conflicting patch "Enabling large folios for 5.17" or others? Sorry
for can't check everyone, your patches are many. If just the former, I see
you mentioned: "I'd be uncomfortable seeing it merged before 5.18".
Would you point out which of your patches was interfered or blocked?

And yes, replacing page functions in change_pte_range is a bit harder,
but it seems it has no much relation with this trival patchset.

Thanks
Alex

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 1/5] mm: remove page_is_file_lru function
  2022-01-21  7:02     ` Alex Shi
@ 2022-01-21 13:19       ` Matthew Wilcox
  0 siblings, 0 replies; 9+ messages in thread
From: Matthew Wilcox @ 2022-01-21 13:19 UTC (permalink / raw)
  To: Alex Shi
  Cc: Alex Shi, Andrew Morton, Steven Rostedt, Ingo Molnar,
	Naoya Horiguchi, Yu Zhao, Arnd Bergmann, Vlastimil Babka,
	Mel Gorman, Johannes Weiner, linux-kernel, linux-mm

On Fri, Jan 21, 2022 at 03:02:12PM +0800, Alex Shi wrote:
> On Thu, Jan 20, 2022 at 9:28 PM Matthew Wilcox <willy@infradead.org> wrote:
> >
> > On Thu, Jan 20, 2022 at 09:10:20PM +0800, alexs@kernel.org wrote:
> > > From: Alex Shi <alexs@kernel.org>
> > >
> > > This function could be full replaced by folio_is_file_lru, so no reason
> > > to keep a duplicate function.
> >
> > This is not a helpful way to do this kind of replacement.
> >
> > Instead of choosing a function to remove and doing a blind replacement,
> > choose a call site and convert the whole calling function to use folios.
> > Once you've removed all callers, you can remove the wrapper function.
> >
> > Also, a number of changes here will conflict with patches I've already
> > posted.  Try doing change_pte_range() in mprotect.c to get a feel for
> > how to convert a function entirely to folios.
> 
> Hi Willy,
> 
> Thanks for your comments!
> 
> The patchset did the thing as you required "convert the whole calling
> function to use folios. then remove the wrapper function" on yesterday's
> Linus and next tree, that included your patchset "Page cache/iomap for 5.17".

That's not what I meant.  What I meant is you're currently doing:

 - Find folio wrapper function
 - Inline it into all callers
 - Delete wrapper function

That creates a lot of churn and not a lot of improvement.

What would be helpful is doing:

 - Find folio wrapper function
 - Find a caller, convert it from using pages to using folios

That's harder, but it actually accomplishes something (ie auditing
a function to make it work with folios).  These wrapper functions are
signals that the callers need to be converted to use folios.

> Is the conflicting patch "Enabling large folios for 5.17" or others? Sorry
> for can't check everyone, your patches are many. If just the former, I see
> you mentioned: "I'd be uncomfortable seeing it merged before 5.18".
> Would you point out which of your patches was interfered or blocked?

The GUP series was the specific series that this conflicted with.
And yes, I have a lot of patches outstanding in this area.  That's a
sign that small cleanup patches aren't going to be welcomed because
they're going to conflict with meaningful patches.

> And yes, replacing page functions in change_pte_range is a bit harder,
> but it seems it has no much relation with this trival patchset.

That is, indeed, the point.

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2022-01-21 13:20 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-01-20 13:10 [PATCH 0/5] remove add/del page to lru functions alexs
2022-01-20 13:10 ` [PATCH 1/5] mm: remove page_is_file_lru function alexs
2022-01-20 13:27   ` Matthew Wilcox
2022-01-21  7:02     ` Alex Shi
2022-01-21 13:19       ` Matthew Wilcox
2022-01-20 13:10 ` [PATCH 2/5] mm: remove __clear_page_lru_flags() alexs
2022-01-20 13:10 ` [PATCH 3/5] mm: remove add_page_to_lru_list() function alexs
2022-01-20 13:10 ` [PATCH 4/5] mm: remove add_page_to_lru_list_tail() alexs
2022-01-20 13:10 ` [PATCH 5/5] mm: remove del_page_from_lru_list() alexs

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).