[PATCH v2] mm/memory: fix hugetlb_zap_begin() call in zap_vma_range_batched()

From: SJ Park

Date: Thu Sep 03 2026 - 19:52:06 EST


Commit f1fc44daf618 ("mm/hugetlb: don't lock private resv_map during
final unmap") added zap_details parameter to hugetlb_zap_begin(). But
the hugetlb_zap_begin() call in zap_vma_range_batched() is not updated.
As a result, build fails as below.

CC mm/memory.o
.../mm/memory.c: In function â??zap_vma_range_batchedâ??:
.../mm/memory.c:2308:9: error: too few arguments to function â??hugetlb_zap_beginâ??
2308 | hugetlb_zap_begin(vma, &range.start, &range.end);
| ^~~~~~~~~~~~~~~~~
In file included from .../mm/memory.c:48:
.../include/linux/hugetlb.h:253:20: note: declared here
253 | static inline void hugetlb_zap_begin(struct vm_area_struct *vma,
| ^~~~~~~~~~~~~~~~~

It also fails on !CONFIG_HUGETLB_PAGE config.

.../mm/memory.c: In function 'unmap_vmas':
.../mm/memory.c:2272:3: error: too many arguments to function 'hugetlb_zap_begin'
2272 | hugetlb_zap_begin(vma, &start, &end, &details);
| ^~~~~~~~~~~~~~~~~
In file included from .../mm/memory.c:48:
.../include/linux/hugetlb.h:322:20: note: declared here
322 | static inline void hugetlb_zap_begin(

Fixes: Fixes: f1fc44daf618 ("mm/hugetlb: don't lock private resv_map during final unmap")
Signed-off-by: SJ Park <sj@xxxxxxxxxx>
---
I didn't read the broken commit in depth. This fix is only
build-tested. I wanted to report the issue with this as a temporal fix,
but the broken commit doesn't have Link: tag. So directly posting this
temporal and not very well verified fix first.

Changes from v1
- v1: https://lore.kernel.org/20260904000028.149656-1-sj@xxxxxxxxxx
- Fix !CONFIG_HUGETLB_PAGE build.

include/linux/hugetlb.h | 3 ++-
mm/memory.c | 2 +-
2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h
index 63c85f2540c9f..0cdccafb83983 100644
--- a/include/linux/hugetlb.h
+++ b/include/linux/hugetlb.h
@@ -321,7 +321,8 @@ static inline void adjust_range_if_pmd_sharing_possible(

static inline void hugetlb_zap_begin(
struct vm_area_struct *vma,
- unsigned long *start, unsigned long *end)
+ unsigned long *start, unsigned long *end,
+ struct zap_details *details)
{
}

diff --git a/mm/memory.c b/mm/memory.c
index fcf893f4b55e2..151a1bf512e00 100644
--- a/mm/memory.c
+++ b/mm/memory.c
@@ -2305,7 +2305,7 @@ void zap_vma_range_batched(struct mmu_gather *tlb,

mmu_notifier_range_init(&range, MMU_NOTIFY_CLEAR, 0, vma->vm_mm,
address, end);
- hugetlb_zap_begin(vma, &range.start, &range.end);
+ hugetlb_zap_begin(vma, &range.start, &range.end, details);
update_hiwater_rss(vma->vm_mm);
mmu_notifier_invalidate_range_start(&range);
/*

base-commit: 2d1388907095f676b59fe6dd22f244abc08408cf
--
2.47.3