damon_split_region_at() should be called with the correct address to split on. Add a sanity check for that under CONFIG_DAMON_DEBUG_SANITY. Signed-off-by: SeongJae Park --- mm/damon/core.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/mm/damon/core.c b/mm/damon/core.c index 94be598cafef1..16f7994903d6d 100644 --- a/mm/damon/core.c +++ b/mm/damon/core.c @@ -2629,6 +2629,23 @@ static void kdamond_merge_regions(struct damon_ctx *c, unsigned int threshold, threshold / 2 < max_thres); } +#ifdef CONFIG_DAMON_DEBUG_SANITY +static void damon_verify_split_region_at(struct damon_region *r, + unsigned long sz_r) +{ + if (sz_r > 0 && sz_r < damon_sz_region(r)) + return; + pr_err("damon_split_region() call with r %lu-%lu (%lu), sz_r %lu\n", + r->ar.start, r->ar.end, damon_sz_region(r), sz_r); + WARN_ONCE(); +} +#else +static void damon_verify_split_region_at(struct damon_region *r, + unsigned long sz_r) +{ +} +#endif + /* * Split a region in two * @@ -2640,6 +2657,8 @@ static void damon_split_region_at(struct damon_target *t, { struct damon_region *new; + damon_verify_split_region_at(r, sz_r); + new = damon_new_region(r->ar.start + sz_r, r->ar.end); if (!new) return; -- 2.47.3