Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

uprobes: use folios more widely in __replace_page()

Remove a few hidden calls to compound_head().

Link: https://lkml.kernel.org/r/20220902194653.1739778-45-willy@infradead.org
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>

authored by

Matthew Wilcox (Oracle) and committed by
Andrew Morton
5fcd079a 98b211d6

+10 -9
+10 -9
kernel/events/uprobes.c
··· 19 19 #include <linux/export.h> 20 20 #include <linux/rmap.h> /* anon_vma_prepare */ 21 21 #include <linux/mmu_notifier.h> /* set_pte_at_notify */ 22 - #include <linux/swap.h> /* try_to_free_swap */ 22 + #include <linux/swap.h> /* folio_free_swap */ 23 23 #include <linux/ptrace.h> /* user_enable_single_step */ 24 24 #include <linux/kdebug.h> /* notifier mechanism */ 25 25 #include "../../mm/internal.h" /* munlock_vma_page */ ··· 154 154 static int __replace_page(struct vm_area_struct *vma, unsigned long addr, 155 155 struct page *old_page, struct page *new_page) 156 156 { 157 + struct folio *old_folio = page_folio(old_page); 157 158 struct mm_struct *mm = vma->vm_mm; 158 - DEFINE_FOLIO_VMA_WALK(pvmw, page_folio(old_page), vma, addr, 0); 159 + DEFINE_FOLIO_VMA_WALK(pvmw, old_folio, vma, addr, 0); 159 160 int err; 160 161 struct mmu_notifier_range range; 161 162 ··· 170 169 return err; 171 170 } 172 171 173 - /* For try_to_free_swap() below */ 174 - lock_page(old_page); 172 + /* For folio_free_swap() below */ 173 + folio_lock(old_folio); 175 174 176 175 mmu_notifier_invalidate_range_start(&range); 177 176 err = -EAGAIN; ··· 187 186 /* no new page, just dec_mm_counter for old_page */ 188 187 dec_mm_counter(mm, MM_ANONPAGES); 189 188 190 - if (!PageAnon(old_page)) { 189 + if (!folio_test_anon(old_folio)) { 191 190 dec_mm_counter(mm, mm_counter_file(old_page)); 192 191 inc_mm_counter(mm, MM_ANONPAGES); 193 192 } ··· 199 198 mk_pte(new_page, vma->vm_page_prot)); 200 199 201 200 page_remove_rmap(old_page, vma, false); 202 - if (!page_mapped(old_page)) 203 - try_to_free_swap(old_page); 201 + if (!folio_mapped(old_folio)) 202 + folio_free_swap(old_folio); 204 203 page_vma_mapped_walk_done(&pvmw); 205 - put_page(old_page); 204 + folio_put(old_folio); 206 205 207 206 err = 0; 208 207 unlock: 209 208 mmu_notifier_invalidate_range_end(&range); 210 - unlock_page(old_page); 209 + folio_unlock(old_folio); 211 210 return err; 212 211 } 213 212