Re: [PATCH mm-unstable v4 5/5] mm/khugepaged: unify khugepaged and madv_collapse with collapse_single_pmd()

From: Lorenzo Stoakes

Date: Wed Apr 08 2026 - 02:42:47 EST


On Tue, Apr 07, 2026 at 02:42:59PM -0700, Andrew Morton wrote:
> On Tue, 7 Apr 2026 09:38:19 +0100 "Lorenzo Stoakes (Oracle)" <ljs@xxxxxxxxxx> wrote:
>
> > On Wed, Apr 01, 2026 at 01:31:45PM -0700, Andrew Morton wrote:
> > > On Wed, 1 Apr 2026 09:14:35 +0100 "Lorenzo Stoakes (Oracle)" <ljs@xxxxxxxxxx> wrote:
> > >
> > > > From: "Lorenzo Stoakes (Oracle)" <ljs@xxxxxxxxxx>
> > > > Date: Tue, 31 Mar 2026 13:11:18 +0100
> > > > Subject: [PATCH] mm/khugepaged: fix issue with tracking lock
> > > >
> > > > We are incorrectly treating lock_dropped to track both whether the lock is
> > > > currently held and whether or not the lock was ever dropped.
> > > >
> > > > Update this change to account for this.
> > > >
> > > > Signed-off-by: Lorenzo Stoakes (Oracle) <ljs@xxxxxxxxxx>
> > >
> > > Not sure if I should add this?
> > >
> > > Should it have
> > >
> > > Fixes: 330f3758a3bc ("mm/khugepaged: unify khugepaged and madv_collapse
> > > with collapse_single_pmd()")?
> >
> > (Sorry only just noticed this)
> >
> > I mean we do need this patch, if you plan to do this as a fix follow up then
> > should have a fixed tag, but I do worry about bisection hazard by leaving this
> > as-is.
> >
> > We definitely either need this patch folded in or as a fix that gets sent
> > alongside the change.
>
> I added this to mm-stable a couple of days ago as 5a62019807da
> ("mm/khugepaged: fix issue with tracking lock"), below. It does have
> the Fixes: so I think we're good.

Ack LGTM thanks!

Sorry was going through old mail after I realised I didn't know how to use
neomutt properly and missed a bunch :)

Cheers, Lorenzo

>
>
> commit 5a62019807da4a7add0717c962ac83b23dd12b2c
> Author: Lorenzo Stoakes (Oracle) <ljs@xxxxxxxxxx>
> Date: Tue Mar 31 13:11:18 2026 +0100
>
> mm/khugepaged: fix issue with tracking lock
>
> We are incorrectly treating lock_dropped to track both whether the lock is
> currently held and whether or not the lock was ever dropped.
>
> Update this change to account for this.
>
> Link: https://lkml.kernel.org/r/7760c811-e100-4d40-9217-0813c28314be@lucifer.local
> Fixes: 330f3758a3bc ("mm/khugepaged: unify khugepaged and madv_collapse with collapse_single_pmd()")
> Signed-off-by: Lorenzo Stoakes (Oracle) <ljs@xxxxxxxxxx>
> Reviewed-by: Lance Yang <lance.yang@xxxxxxxxx>
> Reviewed-by: Nico Pache <npache@xxxxxxxxxx>
> Cc: Alistair Popple <apopple@xxxxxxxxxx>
> Cc: Andrea Arcangeli <aarcange@xxxxxxxxxx>
> Cc: Anshuman Khandual <anshuman.khandual@xxxxxxx>
> Cc: Baolin Wang <baolin.wang@xxxxxxxxxxxxxxxxx>
> Cc: Barry Song <baohua@xxxxxxxxxx>
> Cc: Brendan Jackman <jackmanb@xxxxxxxxxx>
> Cc: Byungchul Park <byungchul@xxxxxx>
> Cc: Catalin Marinas <catalin.marinas@xxxxxxx>
> Cc: David Hildenbrand <david@xxxxxxxxxx>
> Cc: David Rientjes <rientjes@xxxxxxxxxx>
> Cc: Dev Jain <dev.jain@xxxxxxx>
> Cc: Gregory Price <gourry@xxxxxxxxxx>
> Cc: "Huang, Ying" <ying.huang@xxxxxxxxxxxxxxxxx>
> Cc: Hugh Dickins <hughd@xxxxxxxxxx>
> Cc: Jan Kara <jack@xxxxxxx>
> Cc: Jann Horn <jannh@xxxxxxxxxx>
> Cc: Johannes Weiner <hannes@xxxxxxxxxxx>
> Cc: Jonathan Corbet <corbet@xxxxxxx>
> Cc: Joshua Hahn <joshua.hahnjy@xxxxxxxxx>
> Cc: Kefeng Wang <wangkefeng.wang@xxxxxxxxxx>
> Cc: Liam Howlett <liam.howlett@xxxxxxxxxx>
> Cc: "Masami Hiramatsu (Google)" <mhiramat@xxxxxxxxxx>
> Cc: Mathieu Desnoyers <mathieu.desnoyers@xxxxxxxxxxxx>
> Cc: Matthew Brost <matthew.brost@xxxxxxxxx>
> Cc: Matthew Wilcox (Oracle) <willy@xxxxxxxxxxxxx>
> Cc: Michal Hocko <mhocko@xxxxxxxx>
> Cc: Mike Rapoport <rppt@xxxxxxxxxx>
> Cc: Nanyong Sun <sunnanyong@xxxxxxxxxx>
> Cc: Pedro Falcato <pfalcato@xxxxxxx>
> Cc: Peter Xu <peterx@xxxxxxxxxx>
> Cc: Rafael Aquini <raquini@xxxxxxxxxx>
> Cc: Rakie Kim <rakie.kim@xxxxxx>
> Cc: Randy Dunlap <rdunlap@xxxxxxxxxxxxx>
> Cc: Ryan Roberts <ryan.roberts@xxxxxxx>
> Cc: Shivank Garg <shivankg@xxxxxxx>
> Cc: Steven Rostedt <rostedt@xxxxxxxxxxx>
> Cc: Suren Baghdasaryan <surenb@xxxxxxxxxx>
> Cc: Takashi Iwai (SUSE) <tiwai@xxxxxxx>
> Cc: Thomas Hellström <thomas.hellstrom@xxxxxxxxxxxxxxx>
> Cc: Usama Arif <usamaarif642@xxxxxxxxx>
> Cc: Vishal Moola (Oracle) <vishal.moola@xxxxxxxxx>
> Cc: Vlastimil Babka <vbabka@xxxxxxx>
> Cc: Wei Yang <richard.weiyang@xxxxxxxxx>
> Cc: Will Deacon <will@xxxxxxxxxx>
> Cc: Yang Shi <yang@xxxxxxxxxxxxxxxxxxxxxx>
> Cc: Zach O'Keefe <zokeefe@xxxxxxxxxx>
> Cc: Zi Yan <ziy@xxxxxxxxxx>
> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>
>
> diff --git a/mm/khugepaged.c b/mm/khugepaged.c
> index d21348b85a59..b8452dbdb043 100644
> --- a/mm/khugepaged.c
> +++ b/mm/khugepaged.c
> @@ -2828,6 +2828,7 @@ int madvise_collapse(struct vm_area_struct *vma, unsigned long start,
> unsigned long hstart, hend, addr;
> enum scan_result last_fail = SCAN_FAIL;
> int thps = 0;
> + bool mmap_unlocked = false;
>
> BUG_ON(vma->vm_start > start);
> BUG_ON(vma->vm_end < end);
> @@ -2850,10 +2851,11 @@ int madvise_collapse(struct vm_area_struct *vma, unsigned long start,
> for (addr = hstart; addr < hend; addr += HPAGE_PMD_SIZE) {
> enum scan_result result = SCAN_FAIL;
>
> - if (*lock_dropped) {
> + if (mmap_unlocked) {
> cond_resched();
> mmap_read_lock(mm);
> - *lock_dropped = false;
> + mmap_unlocked = false;
> + *lock_dropped = true;
> result = hugepage_vma_revalidate(mm, addr, false, &vma,
> cc);
> if (result != SCAN_SUCCEED) {
> @@ -2864,7 +2866,7 @@ int madvise_collapse(struct vm_area_struct *vma, unsigned long start,
> hend = min(hend, vma->vm_end & HPAGE_PMD_MASK);
> }
>
> - result = collapse_single_pmd(addr, vma, lock_dropped, cc);
> + result = collapse_single_pmd(addr, vma, &mmap_unlocked, cc);
>
> switch (result) {
> case SCAN_SUCCEED:
> @@ -2893,8 +2895,10 @@ int madvise_collapse(struct vm_area_struct *vma, unsigned long start,
>
> out_maybelock:
> /* Caller expects us to hold mmap_lock on return */
> - if (*lock_dropped)
> + if (mmap_unlocked) {
> + *lock_dropped = true;
> mmap_read_lock(mm);
> + }
> out_nolock:
> mmap_assert_locked(mm);
> mmdrop(mm);
>