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

Configure Feed

Select the types of activity you want to include in your feed.

secretmem: remove uses of struct page

Use filemap_lock_folio() instead of find_lock_page() to retrieve
a folio from the page cache.

[lorenzo.stoakes@oracle.com: fix check of filemap_lock_folio() return value]
Link: https://lkml.kernel.org/r/fdbca1d0-01a3-4653-85ed-cf257bb848be@lucifer.local
Link: https://lkml.kernel.org/r/20250613194744.3175157-1-willy@infradead.org
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Signed-off-by: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
Reviewed-by: Mike Rapoport (Microsoft) <rppt@kernel.org>
Acked-by: David Hildenbrand <david@redhat.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>

authored by

Matthew Wilcox (Oracle) and committed by
Andrew Morton
32925ee6 02825c09

+7 -9
+7 -9
mm/secretmem.c
··· 54 54 pgoff_t offset = vmf->pgoff; 55 55 gfp_t gfp = vmf->gfp_mask; 56 56 unsigned long addr; 57 - struct page *page; 58 57 struct folio *folio; 59 58 vm_fault_t ret; 60 59 int err; ··· 64 65 filemap_invalidate_lock_shared(mapping); 65 66 66 67 retry: 67 - page = find_lock_page(mapping, offset); 68 - if (!page) { 68 + folio = filemap_lock_folio(mapping, offset); 69 + if (IS_ERR(folio)) { 69 70 folio = folio_alloc(gfp | __GFP_ZERO, 0); 70 71 if (!folio) { 71 72 ret = VM_FAULT_OOM; 72 73 goto out; 73 74 } 74 75 75 - page = &folio->page; 76 - err = set_direct_map_invalid_noflush(page); 76 + err = set_direct_map_invalid_noflush(folio_page(folio, 0)); 77 77 if (err) { 78 78 folio_put(folio); 79 79 ret = vmf_error(err); ··· 88 90 * already happened when we marked the page invalid 89 91 * which guarantees that this call won't fail 90 92 */ 91 - set_direct_map_default_noflush(page); 93 + set_direct_map_default_noflush(folio_page(folio, 0)); 92 94 if (err == -EEXIST) 93 95 goto retry; 94 96 ··· 96 98 goto out; 97 99 } 98 100 99 - addr = (unsigned long)page_address(page); 101 + addr = (unsigned long)folio_address(folio); 100 102 flush_tlb_kernel_range(addr, addr + PAGE_SIZE); 101 103 } 102 104 103 - vmf->page = page; 105 + vmf->page = folio_file_page(folio, vmf->pgoff); 104 106 ret = VM_FAULT_LOCKED; 105 107 106 108 out: ··· 152 154 153 155 static void secretmem_free_folio(struct folio *folio) 154 156 { 155 - set_direct_map_default_noflush(&folio->page); 157 + set_direct_map_default_noflush(folio_page(folio, 0)); 156 158 folio_zero_segment(folio, 0, folio_size(folio)); 157 159 } 158 160