On Wed, Apr 30, 2025 at 4:12 AM Baolin Wang <baolin.wang@xxxxxxxxxxxxxxxxx> wrote: > > > > On 2025/4/29 02:12, Nico Pache wrote: > > There are cases where, if an attempted collapse fails, all subsequent > > orders are guaranteed to also fail. Avoid these collapse attempts by > > bailing out early. > > > > Signed-off-by: Nico Pache <npache@xxxxxxxxxx> > > --- > > mm/khugepaged.c | 17 +++++++++++++++++ > > 1 file changed, 17 insertions(+) > > > > diff --git a/mm/khugepaged.c b/mm/khugepaged.c > > index 86d1153ce9e8..5e6732cccb86 100644 > > --- a/mm/khugepaged.c > > +++ b/mm/khugepaged.c > > @@ -1365,6 +1365,23 @@ static int khugepaged_scan_bitmap(struct mm_struct *mm, unsigned long address, > > collapsed += (1 << order); > > continue; > > } > > + /* > > + * Some ret values indicate all lower order will also > > + * fail, dont trying to collapse smaller orders > > + */ > > + if (ret == SCAN_EXCEED_NONE_PTE || > > + ret == SCAN_EXCEED_SWAP_PTE || > > + ret == SCAN_EXCEED_SHARED_PTE || > > + ret == SCAN_PTE_NON_PRESENT || > > + ret == SCAN_PTE_UFFD_WP || > > + ret == SCAN_ALLOC_HUGE_PAGE_FAIL || > > + ret == SCAN_CGROUP_CHARGE_FAIL || > > + ret == SCAN_COPY_MC || > > + ret == SCAN_PAGE_LOCK || > > + ret == SCAN_PAGE_COUNT) > > + goto next; > > + else > > + break; > > Better to merge this patch into patch 6, which can be helped to > understand your logic. Sounds good, it wasnt part of the original logic/RFCs so i separated it out to get some review on it. >