[PATCH v2] mm/damon/vaddr: remove redundant RCU lock
From: Igor Putko
Date: Tue Jun 30 2026 - 09:21:05 EST
__damon_va_three_regions() is called only by damon_va_three_regions(),
which already holds mmap_read_lock(). Since mmap_read_lock() is held,
the maple tree and VMA list are protected from concurrent changes.
Remove the unnecessary rcu_read_lock() and rcu_read_unlock() calls.
Signed-off-by: Igor Putko <igorpetindev@xxxxxxxxx>
---
mm/damon/tests/vaddr-kunit.h | 2 ++
mm/damon/vaddr.c | 2 --
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/mm/damon/tests/vaddr-kunit.h b/mm/damon/tests/vaddr-kunit.h
index 563fbc7e3..70cb7825e 100644
--- a/mm/damon/tests/vaddr-kunit.h
+++ b/mm/damon/tests/vaddr-kunit.h
@@ -81,7 +81,9 @@ static void damon_test_three_regions_in_vmas(struct kunit *test)
if (__link_vmas(&mm.mm_mt, vmas, ARRAY_SIZE(vmas)))
kunit_skip(test, "Failed to create VMA tree");
+ rcu_read_lock();
__damon_va_three_regions(&mm, regions);
+ rcu_read_unlock();
KUNIT_EXPECT_EQ(test, 10ul, regions[0].start);
KUNIT_EXPECT_EQ(test, 25ul, regions[0].end);
diff --git a/mm/damon/vaddr.c b/mm/damon/vaddr.c
index d27147603..345b89b5d 100644
--- a/mm/damon/vaddr.c
+++ b/mm/damon/vaddr.c
@@ -84,7 +84,6 @@ static int __damon_va_three_regions(struct mm_struct *mm,
* If this is too slow, it can be optimised to examine the maple
* tree gaps.
*/
- rcu_read_lock();
for_each_vma(vmi, vma) {
unsigned long gap;
@@ -105,7 +104,6 @@ static int __damon_va_three_regions(struct mm_struct *mm,
next:
prev = vma;
}
- rcu_read_unlock();
if (!sz_range(&second_gap) || !sz_range(&first_gap))
return -EINVAL;
--
2.47.3