Skip to content

Commit 4828d20

Browse files
thejhakpm00
authored andcommitted
userfaultfd: don't BUG_ON() if khugepaged yanks our page table
Since khugepaged was changed to allow retracting page tables in file mappings without holding the mmap lock, these BUG_ON()s are wrong - get rid of them. We could also remove the preceding "if (unlikely(...))" block, but then we could reach pte_offset_map_lock() with transhuge pages not just for file mappings but also for anonymous mappings - which would probably be fine but I think is not necessarily expected. Link: https://lkml.kernel.org/r/[email protected] Fixes: 1d65b77 ("mm/khugepaged: retract_page_tables() without mmap or vma lock") Signed-off-by: Jann Horn <[email protected]> Reviewed-by: Qi Zheng <[email protected]> Acked-by: David Hildenbrand <[email protected]> Cc: Andrea Arcangeli <[email protected]> Cc: Hugh Dickins <[email protected]> Cc: Pavel Emelyanov <[email protected]> Cc: <[email protected]> Signed-off-by: Andrew Morton <[email protected]>
1 parent 71c186e commit 4828d20

File tree

1 file changed

+4
-3
lines changed

1 file changed

+4
-3
lines changed

mm/userfaultfd.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -807,9 +807,10 @@ static __always_inline ssize_t mfill_atomic(struct userfaultfd_ctx *ctx,
807807
err = -EFAULT;
808808
break;
809809
}
810-
811-
BUG_ON(pmd_none(*dst_pmd));
812-
BUG_ON(pmd_trans_huge(*dst_pmd));
810+
/*
811+
* For shmem mappings, khugepaged is allowed to remove page
812+
* tables under us; pte_offset_map_lock() will deal with that.
813+
*/
813814

814815
err = mfill_atomic_pte(dst_pmd, dst_vma, dst_addr,
815816
src_addr, flags, &folio);

0 commit comments

Comments
 (0)