On Wed, Jun 10, 2026 at 06:29:12PM +0800, Baolin Wang wrote:
[...]
>@@ -2768,15 +2827,23 @@ static enum scan_result collapse_scan_file(struct 
>mm_struct *mm,
>       else
>               cc->progress += HPAGE_PMD_NR;
> 
>-      if (result == SCAN_SUCCEED) {
>-              if (present < HPAGE_PMD_NR - max_ptes_none) {
>-                      result = SCAN_EXCEED_NONE_PTE;
>-                      count_vm_event(THP_SCAN_EXCEED_NONE_PTE);
>-              } else {
>-                      result = collapse_file(mm, addr, file, start, cc, 
>HPAGE_PMD_ORDER);
>-              }
>+      if (result != SCAN_SUCCEED)
>+              goto out;
>+
>+      if (present < HPAGE_PMD_NR - max_ptes_none) {
>+              result = SCAN_EXCEED_NONE_PTE;
>+              count_vm_event(THP_SCAN_EXCEED_NONE_PTE);
>+              count_mthp_stat(HPAGE_PMD_ORDER,
>+                              MTHP_STAT_COLLAPSE_EXCEED_NONE);
>+              goto out;
>       }
> 
>+      result = mthp_collapse(mm, file, start, addr, 0, 0, cc, enabled_orders);

Feels like the second 0 wants to be "swap", no?

>+      if (result == SCAN_SUCCEED && !cc->is_khugepaged) {
>+              /* If MADV_COLLAPSE, adjust result to call 
>collapse_pte_mapped_thp(). */
>+              result = SCAN_PTE_MAPPED_HUGEPAGE;
>+      }
>+out:
>       trace_mm_khugepaged_scan_file(mm, folio, file, present, swap, result);
>       return result;
> }
>@@ -2808,7 +2875,7 @@ static enum scan_result collapse_single_pmd(unsigned 
>long addr,
>       mmap_read_unlock(mm);
>       *lock_dropped = true;
> retry:
>-      result = collapse_scan_file(mm, addr, file, pgoff, cc);
>+      result = collapse_scan_file(mm, vma, addr, file, pgoff, cc);
> 
>       /*
>        * For MADV_COLLAPSE, when encountering dirty pages, try to writeback,
>-- 
>2.47.3
>
>

Reply via email to