[PATCH 2/3] mm/damon/core: use damon_nr_regions() in damon_commit_target_regions()

Josh Law posted 3 patches 1 week, 1 day ago
[PATCH 2/3] mm/damon/core: use damon_nr_regions() in damon_commit_target_regions()
Posted by Josh Law 1 week, 1 day ago
damon_commit_target_regions() walks the source region list twice: once
to count regions and again to copy their address ranges.  Use the
already-maintained damon_nr_regions() instead of the counting traversal.

Signed-off-by: Josh Law <objecting@objecting.org>
---
 mm/damon/core.c | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)

diff --git a/mm/damon/core.c b/mm/damon/core.c
index 56372e577931..6c1f738e265c 100644
--- a/mm/damon/core.c
+++ b/mm/damon/core.c
@@ -1217,17 +1217,15 @@ static int damon_commit_target_regions(struct damon_target *dst,
 {
 	struct damon_region *src_region;
 	struct damon_addr_range *ranges;
+	unsigned int nr = damon_nr_regions(src);
 	int i = 0, err;
 
-	damon_for_each_region(src_region, src)
-		i++;
-	if (!i)
+	if (!nr)
 		return 0;
 
-	ranges = kmalloc_objs(*ranges, i, GFP_KERNEL | __GFP_NOWARN);
+	ranges = kmalloc_objs(*ranges, nr, GFP_KERNEL | __GFP_NOWARN);
 	if (!ranges)
 		return -ENOMEM;
-	i = 0;
 	damon_for_each_region(src_region, src)
 		ranges[i++] = src_region->ar;
 	err = damon_set_regions(dst, ranges, i, src_min_region_sz);
-- 
2.34.1