diff options
author | SeongJae Park <[email protected]> | 2022-05-09 18:20:54 -0700 |
---|---|---|
committer | Andrew Morton <[email protected]> | 2022-05-13 07:20:08 -0700 |
commit | abacd635fa7b7a39858bb4182eef33ffa628b12c (patch) | |
tree | 9fd0b6ab4c3b9a545a0268c9b9fe18866d63dd84 | |
parent | 6e74d2bf5a265113ca54a8323783d2f3fdde96b7 (diff) |
mm/damon/core: finish kdamond as soon as any callback returns an error
When 'after_sampling()' or 'after_aggregation()' DAMON callbacks return an
error, kdamond continues the remaining loop once. It makes no much sense
to run the remaining part while something wrong already happened. The
context might be corrupted or having invalid data. This commit therefore
makes kdamond skips the remaining works and immediately finish in the
cases.
Link: https://lkml.kernel.org/r/[email protected]
Signed-off-by: SeongJae Park <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
-rw-r--r-- | mm/damon/core.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/mm/damon/core.c b/mm/damon/core.c index 44fe7e452a1e..b6daaff37bec 100644 --- a/mm/damon/core.c +++ b/mm/damon/core.c @@ -1089,8 +1089,10 @@ static int kdamond_fn(void *data) if (ctx->ops.prepare_access_checks) ctx->ops.prepare_access_checks(ctx); if (ctx->callback.after_sampling && - ctx->callback.after_sampling(ctx)) + ctx->callback.after_sampling(ctx)) { done = true; + continue; + } kdamond_usleep(ctx->sample_interval); @@ -1102,8 +1104,10 @@ static int kdamond_fn(void *data) max_nr_accesses / 10, sz_limit); if (ctx->callback.after_aggregation && - ctx->callback.after_aggregation(ctx)) + ctx->callback.after_aggregation(ctx)) { done = true; + continue; + } kdamond_apply_schemes(ctx); kdamond_reset_aggregated(ctx); kdamond_split_regions(ctx); |