Commit abacd635 authored by SeongJae Park's avatar SeongJae Park Committed by Andrew Morton

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/20220429160606.127307-3-sj@kernel.orgSigned-off-by: default avatarSeongJae Park <sj@kernel.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
parent 6e74d2bf
...@@ -1089,8 +1089,10 @@ static int kdamond_fn(void *data) ...@@ -1089,8 +1089,10 @@ static int kdamond_fn(void *data)
if (ctx->ops.prepare_access_checks) if (ctx->ops.prepare_access_checks)
ctx->ops.prepare_access_checks(ctx); ctx->ops.prepare_access_checks(ctx);
if (ctx->callback.after_sampling && if (ctx->callback.after_sampling &&
ctx->callback.after_sampling(ctx)) ctx->callback.after_sampling(ctx)) {
done = true; done = true;
continue;
}
kdamond_usleep(ctx->sample_interval); kdamond_usleep(ctx->sample_interval);
...@@ -1102,8 +1104,10 @@ static int kdamond_fn(void *data) ...@@ -1102,8 +1104,10 @@ static int kdamond_fn(void *data)
max_nr_accesses / 10, max_nr_accesses / 10,
sz_limit); sz_limit);
if (ctx->callback.after_aggregation && if (ctx->callback.after_aggregation &&
ctx->callback.after_aggregation(ctx)) ctx->callback.after_aggregation(ctx)) {
done = true; done = true;
continue;
}
kdamond_apply_schemes(ctx); kdamond_apply_schemes(ctx);
kdamond_reset_aggregated(ctx); kdamond_reset_aggregated(ctx);
kdamond_split_regions(ctx); kdamond_split_regions(ctx);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment