Skip to content

Commit a7a69d8

Browse files
Hugh Dickinstorvalds
authored andcommitted
mm/thp: another PVMW_SYNC fix in page_vma_mapped_walk()
Aha! Shouldn't that quick scan over pte_none()s make sure that it holds ptlock in the PVMW_SYNC case? That too might have been responsible for BUGs or WARNs in split_huge_page_to_list() or its unmap_page(), though I've never seen any. Link: https://lkml.kernel.org/r/[email protected] Link: https://lore.kernel.org/linux-mm/[email protected]/ Fixes: ace71a1 ("mm: introduce page_vma_mapped_walk()") Signed-off-by: Hugh Dickins <[email protected]> Acked-by: Kirill A. Shutemov <[email protected]> Tested-by: Wang Yugui <[email protected]> Cc: Alistair Popple <[email protected]> Cc: Matthew Wilcox <[email protected]> Cc: Peter Xu <[email protected]> Cc: Ralph Campbell <[email protected]> Cc: Will Deacon <[email protected]> Cc: Yang Shi <[email protected]> Cc: Zi Yan <[email protected]> Cc: <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
1 parent a9a7504 commit a7a69d8

File tree

1 file changed

+4
-0
lines changed

1 file changed

+4
-0
lines changed

mm/page_vma_mapped.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,10 @@ bool page_vma_mapped_walk(struct page_vma_mapped_walk *pvmw)
276276
goto restart;
277277
}
278278
pvmw->pte++;
279+
if ((pvmw->flags & PVMW_SYNC) && !pvmw->ptl) {
280+
pvmw->ptl = pte_lockptr(mm, pvmw->pmd);
281+
spin_lock(pvmw->ptl);
282+
}
279283
} while (pte_none(*pvmw->pte));
280284

281285
if (!pvmw->ptl) {

0 commit comments

Comments
 (0)