damon/stat module creates only one target in damon_stat_build_ctx(), and the comment in damon_stat_sort_regions() already says so. But the code still iterates adaptive_targets with damon_for_each_target(), which is needlessly verbose and adds an extra indentation level. Just use list_first_entry() to grab the single target, with a list_empty() check to be safe. Signed-off-by: Enze Li --- mm/damon/stat.c | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/mm/damon/stat.c b/mm/damon/stat.c index b05b68f73e10..c8b1e909bbac 100644 --- a/mm/damon/stat.c +++ b/mm/damon/stat.c @@ -91,16 +91,15 @@ static int damon_stat_sort_regions(struct damon_ctx *c, unsigned int nr_regions = 0; unsigned long total_sz = 0; - damon_for_each_target(t, c) { - /* there is only one target */ - region_pointers = kmalloc_objs(*region_pointers, - damon_nr_regions(t)); - if (!region_pointers) - return -ENOMEM; - damon_for_each_region(r, t) { - region_pointers[nr_regions++] = r; - total_sz += r->ar.end - r->ar.start; - } + if (list_empty(&c->adaptive_targets)) + return -EINVAL; + t = list_first_entry(&c->adaptive_targets, struct damon_target, list); + region_pointers = kmalloc_objs(*region_pointers, damon_nr_regions(t)); + if (!region_pointers) + return -ENOMEM; + damon_for_each_region(r, t) { + region_pointers[nr_regions++] = r; + total_sz += r->ar.end - r->ar.start; } sort(region_pointers, nr_regions, sizeof(*region_pointers), damon_stat_cmp_regions, NULL); base-commit: 6c2cdf00fe5205942b5f29e16905603a1717b931 -- 2.43.0