diff mbox series

[3/4] memcg: Use a folio in get_mctgt_type

Message ID 20240111181219.3462852-4-willy@infradead.org (mailing list archive)
State New
Headers show
Series Convert memcontrol charge moving to use folios | expand

Commit Message

Matthew Wilcox Jan. 11, 2024, 6:12 p.m. UTC
Replace seven calls to compound_head() with one.  We still use the
page as page_mapped() is different from folio_mapped().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 mm/memcontrol.c | 23 +++++++++++++----------
 1 file changed, 13 insertions(+), 10 deletions(-)

Comments

Johannes Weiner Jan. 11, 2024, 7:34 p.m. UTC | #1
On Thu, Jan 11, 2024 at 06:12:18PM +0000, Matthew Wilcox (Oracle) wrote:
> Replace seven calls to compound_head() with one.  We still use the
> page as page_mapped() is different from folio_mapped().

Only seven, eh? :) For the 4 patches:

Acked-by: Johannes Weiner <hannes@cmpxchg.org>

Thanks
Muchun Song Jan. 15, 2024, 3:48 a.m. UTC | #2
> On Jan 12, 2024, at 02:12, Matthew Wilcox (Oracle) <willy@infradead.org> wrote:
> 
> Replace seven calls to compound_head() with one.  We still use the
> page as page_mapped() is different from folio_mapped().
> 
> Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>

Reviewed-by: Muchun Song <muchun.song@linux.dev>

Thanks.
diff mbox series

Patch

diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index d14fe0740b37..b6096c34b3e4 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -6076,6 +6076,7 @@  static enum mc_target_type get_mctgt_type(struct vm_area_struct *vma,
 		unsigned long addr, pte_t ptent, union mc_target *target)
 {
 	struct page *page = NULL;
+	struct folio *folio;
 	enum mc_target_type ret = MC_TARGET_NONE;
 	swp_entry_t ent = { .val = 0 };
 
@@ -6090,9 +6091,11 @@  static enum mc_target_type get_mctgt_type(struct vm_area_struct *vma,
 	else if (is_swap_pte(ptent))
 		page = mc_handle_swap_pte(vma, ptent, &ent);
 
+	if (page)
+		folio = page_folio(page);
 	if (target && page) {
-		if (!trylock_page(page)) {
-			put_page(page);
+		if (!folio_trylock(folio)) {
+			folio_put(folio);
 			return ret;
 		}
 		/*
@@ -6107,8 +6110,8 @@  static enum mc_target_type get_mctgt_type(struct vm_area_struct *vma,
 		 * Alas, skip moving the page in this case.
 		 */
 		if (!pte_present(ptent) && page_mapped(page)) {
-			unlock_page(page);
-			put_page(page);
+			folio_unlock(folio);
+			folio_put(folio);
 			return ret;
 		}
 	}
@@ -6121,18 +6124,18 @@  static enum mc_target_type get_mctgt_type(struct vm_area_struct *vma,
 		 * mem_cgroup_move_account() checks the page is valid or
 		 * not under LRU exclusion.
 		 */
-		if (page_memcg(page) == mc.from) {
+		if (folio_memcg(folio) == mc.from) {
 			ret = MC_TARGET_PAGE;
-			if (is_device_private_page(page) ||
-			    is_device_coherent_page(page))
+			if (folio_is_device_private(folio) ||
+			    folio_is_device_coherent(folio))
 				ret = MC_TARGET_DEVICE;
 			if (target)
-				target->folio = page_folio(page);
+				target->folio = folio;
 		}
 		if (!ret || !target) {
 			if (target)
-				unlock_page(page);
-			put_page(page);
+				folio_unlock(folio);
+			folio_put(folio);
 		}
 	}
 	/*