[PATCH 01/12] mm/khugepaged: drop redundant mm_struct pin in madvise_collapse()

From: Kiryl Shutsemau

Date: Fri Sep 04 2026 - 11:30:14 EST


From: "Kiryl Shutsemau (Meta)" <kas@xxxxxxxxxx>

madvise_collapse() holds an mmgrab() reference across its work. It is
redundant. Every caller already holds mm_users:

- madvise(2) works on current->mm, which lives as long as the task is in
the syscall;
- process_madvise(2) reaches a remote mm through mm_access(), which takes
an mm_users reference and holds it until the syscall returns;
- io_uring passes current->mm;
- DAMON takes one with get_task_mm() and drops it after the call.

Drop the mmgrab()/mmdrop() pair.

Assisted-by: Claude-Code:claude-opus-5
Signed-off-by: Kiryl Shutsemau (Meta) <kas@xxxxxxxxxx>
---
mm/khugepaged.c | 2 --
1 file changed, 2 deletions(-)

diff --git a/mm/khugepaged.c b/mm/khugepaged.c
index f49a6710933b..f1f8d4375e96 100644
--- a/mm/khugepaged.c
+++ b/mm/khugepaged.c
@@ -3236,7 +3236,6 @@ int madvise_collapse(struct vm_area_struct *vma, unsigned long start,
cc->is_khugepaged = false;
cc->progress = 0;

- mmgrab(mm);
lru_add_drain_all();

for (addr = hstart; addr < hend; addr += HPAGE_PMD_SIZE) {
@@ -3292,7 +3291,6 @@ int madvise_collapse(struct vm_area_struct *vma, unsigned long start,
}
out_nolock:
mmap_assert_locked(mm);
- mmdrop(mm);
kfree(cc);

return thps == ((hend - hstart) >> HPAGE_PMD_SHIFT) ? 0
--
2.54.0