Skip to content

Commit

Permalink
mm/damon/sysfs: deduplicate inputs applying
Browse files Browse the repository at this point in the history
DAMON sysfs interface's DAMON context building and its online parameter
update have duplicated code.  This commit removes the duplicate.

Link: https://lkml.kernel.org/r/20220606182310.48781-5-sj@kernel.org
Signed-off-by: SeongJae Park <sj@kernel.org>
Cc: Jonathan Corbet <corbet@lwn.net>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
  • Loading branch information
SeongJae Park authored and akpm committed Jul 4, 2022
1 parent f25ab3b commit a79b68e
Showing 1 changed file with 24 additions and 35 deletions.
59 changes: 24 additions & 35 deletions mm/damon/sysfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -2357,6 +2357,23 @@ static inline bool damon_sysfs_kdamond_running(
damon_sysfs_ctx_running(kdamond->damon_ctx);
}

static int damon_sysfs_apply_inputs(struct damon_ctx *ctx,
struct damon_sysfs_context *sys_ctx)
{
int err;

err = damon_select_ops(ctx, sys_ctx->ops_id);
if (err)
return err;
err = damon_sysfs_set_attrs(ctx, sys_ctx->attrs);
if (err)
return err;
err = damon_sysfs_set_targets(ctx, sys_ctx->targets);
if (err)
return err;
return damon_sysfs_set_schemes(ctx, sys_ctx->schemes);
}

/*
* damon_sysfs_commit_input() - Commit user inputs to a running kdamond.
* @kdamond: The kobject wrapper for the associated kdamond.
Expand All @@ -2365,31 +2382,14 @@ static inline bool damon_sysfs_kdamond_running(
*/
static int damon_sysfs_commit_input(struct damon_sysfs_kdamond *kdamond)
{
struct damon_ctx *ctx = kdamond->damon_ctx;
struct damon_sysfs_context *sys_ctx;
int err = 0;

if (!damon_sysfs_kdamond_running(kdamond))
return -EINVAL;
/* TODO: Support multiple contexts per kdamond */
if (kdamond->contexts->nr != 1)
return -EINVAL;

sys_ctx = kdamond->contexts->contexts_arr[0];

err = damon_select_ops(ctx, sys_ctx->ops_id);
if (err)
return err;
err = damon_sysfs_set_attrs(ctx, sys_ctx->attrs);
if (err)
return err;
err = damon_sysfs_set_targets(ctx, sys_ctx->targets);
if (err)
return err;
err = damon_sysfs_set_schemes(ctx, sys_ctx->schemes);
if (err)
return err;
return err;
return damon_sysfs_apply_inputs(kdamond->damon_ctx,
kdamond->contexts->contexts_arr[0]);
}

/*
Expand Down Expand Up @@ -2436,27 +2436,16 @@ static struct damon_ctx *damon_sysfs_build_ctx(
if (!ctx)
return ERR_PTR(-ENOMEM);

err = damon_select_ops(ctx, sys_ctx->ops_id);
if (err)
goto out;
err = damon_sysfs_set_attrs(ctx, sys_ctx->attrs);
if (err)
goto out;
err = damon_sysfs_set_targets(ctx, sys_ctx->targets);
if (err)
goto out;
err = damon_sysfs_set_schemes(ctx, sys_ctx->schemes);
if (err)
goto out;
err = damon_sysfs_apply_inputs(ctx, sys_ctx);
if (err) {
damon_destroy_ctx(ctx);
return ERR_PTR(err);
}

ctx->callback.after_wmarks_check = damon_sysfs_cmd_request_callback;
ctx->callback.after_aggregation = damon_sysfs_cmd_request_callback;
ctx->callback.before_terminate = damon_sysfs_before_terminate;
return ctx;

out:
damon_destroy_ctx(ctx);
return ERR_PTR(err);
}

static int damon_sysfs_turn_damon_on(struct damon_sysfs_kdamond *kdamond)
Expand Down

0 comments on commit a79b68e

Please sign in to comment.