[PATCH v2 4/4] mm, madvise: use standard madvise locking in madvise_set_anon_name()
From: Vlastimil Babka
Date: Tue Jun 24 2025 - 09:11:05 EST
Use madvise_lock()/madvise_unlock() in madvise_set_anon_name() in the
same way as in do_madvise(). This narrows the lock scope a bit and
reuses existing functionality. get_lock_mode() already picks the correct
MADVISE_MMAP_WRITE_LOCK mode for __MADV_SET_ANON_VMA_NAME so we can just
remove the explicit assignment.
Signed-off-by: Vlastimil Babka <vbabka@xxxxxxx>
---
mm/madvise.c | 13 +++++++++----
1 file changed, 9 insertions(+), 4 deletions(-)
diff --git a/mm/madvise.c b/mm/madvise.c
index cae064479cdf908707c45b941bd03d43d095eab6..ee02ccd0315a146cdb3001cd189e03be9e48a2ea 100644
--- a/mm/madvise.c
+++ b/mm/madvise.c
@@ -2082,10 +2082,10 @@ static int madvise_set_anon_name(struct mm_struct *mm, unsigned long start,
{
unsigned long end;
unsigned long len;
+ int error;
struct madvise_behavior madv_behavior = {
.mm = mm,
.behavior = __MADV_SET_ANON_VMA_NAME,
- .lock_mode = MADVISE_MMAP_WRITE_LOCK,
.anon_name = anon_name,
};
@@ -2106,7 +2106,14 @@ static int madvise_set_anon_name(struct mm_struct *mm, unsigned long start,
madv_behavior.range.start = start;
madv_behavior.range.end = end;
- return madvise_walk_vmas(&madv_behavior);
+
+ error = madvise_lock(&madv_behavior);
+ if (error)
+ return error;
+ error = madvise_walk_vmas(&madv_behavior);
+ madvise_unlock(&madv_behavior);
+
+ return error;
}
int set_anon_vma_name(unsigned long addr, unsigned long size,
@@ -2136,9 +2143,7 @@ int set_anon_vma_name(unsigned long addr, unsigned long size,
return -ENOMEM;
}
- mmap_write_lock(mm);
error = madvise_set_anon_name(mm, addr, size, anon_name);
- mmap_write_unlock(mm);
anon_vma_name_put(anon_name);
return error;
--
2.50.0