mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-28 13:22:57 +00:00
mm/damon/sysfs: deduplicate inputs applying
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>
This commit is contained in:
parent
f25ab3bdfb
commit
a79b68ee3e
1 changed files with 27 additions and 38 deletions
|
@ -2357,25 +2357,10 @@ static inline bool damon_sysfs_kdamond_running(
|
||||||
damon_sysfs_ctx_running(kdamond->damon_ctx);
|
damon_sysfs_ctx_running(kdamond->damon_ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
static int damon_sysfs_apply_inputs(struct damon_ctx *ctx,
|
||||||
* damon_sysfs_commit_input() - Commit user inputs to a running kdamond.
|
struct damon_sysfs_context *sys_ctx)
|
||||||
* @kdamond: The kobject wrapper for the associated kdamond.
|
|
||||||
*
|
|
||||||
* If the sysfs input is wrong, the kdamond will be terminated.
|
|
||||||
*/
|
|
||||||
static int damon_sysfs_commit_input(struct damon_sysfs_kdamond *kdamond)
|
|
||||||
{
|
{
|
||||||
struct damon_ctx *ctx = kdamond->damon_ctx;
|
int err;
|
||||||
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);
|
err = damon_select_ops(ctx, sys_ctx->ops_id);
|
||||||
if (err)
|
if (err)
|
||||||
|
@ -2386,10 +2371,25 @@ static int damon_sysfs_commit_input(struct damon_sysfs_kdamond *kdamond)
|
||||||
err = damon_sysfs_set_targets(ctx, sys_ctx->targets);
|
err = damon_sysfs_set_targets(ctx, sys_ctx->targets);
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
err = damon_sysfs_set_schemes(ctx, sys_ctx->schemes);
|
return damon_sysfs_set_schemes(ctx, sys_ctx->schemes);
|
||||||
if (err)
|
}
|
||||||
return err;
|
|
||||||
return err;
|
/*
|
||||||
|
* damon_sysfs_commit_input() - Commit user inputs to a running kdamond.
|
||||||
|
* @kdamond: The kobject wrapper for the associated kdamond.
|
||||||
|
*
|
||||||
|
* If the sysfs input is wrong, the kdamond will be terminated.
|
||||||
|
*/
|
||||||
|
static int damon_sysfs_commit_input(struct damon_sysfs_kdamond *kdamond)
|
||||||
|
{
|
||||||
|
if (!damon_sysfs_kdamond_running(kdamond))
|
||||||
|
return -EINVAL;
|
||||||
|
/* TODO: Support multiple contexts per kdamond */
|
||||||
|
if (kdamond->contexts->nr != 1)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
return damon_sysfs_apply_inputs(kdamond->damon_ctx,
|
||||||
|
kdamond->contexts->contexts_arr[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -2436,27 +2436,16 @@ static struct damon_ctx *damon_sysfs_build_ctx(
|
||||||
if (!ctx)
|
if (!ctx)
|
||||||
return ERR_PTR(-ENOMEM);
|
return ERR_PTR(-ENOMEM);
|
||||||
|
|
||||||
err = damon_select_ops(ctx, sys_ctx->ops_id);
|
err = damon_sysfs_apply_inputs(ctx, sys_ctx);
|
||||||
if (err)
|
if (err) {
|
||||||
goto out;
|
damon_destroy_ctx(ctx);
|
||||||
err = damon_sysfs_set_attrs(ctx, sys_ctx->attrs);
|
return ERR_PTR(err);
|
||||||
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;
|
|
||||||
|
|
||||||
ctx->callback.after_wmarks_check = damon_sysfs_cmd_request_callback;
|
ctx->callback.after_wmarks_check = damon_sysfs_cmd_request_callback;
|
||||||
ctx->callback.after_aggregation = damon_sysfs_cmd_request_callback;
|
ctx->callback.after_aggregation = damon_sysfs_cmd_request_callback;
|
||||||
ctx->callback.before_terminate = damon_sysfs_before_terminate;
|
ctx->callback.before_terminate = damon_sysfs_before_terminate;
|
||||||
return ctx;
|
return ctx;
|
||||||
|
|
||||||
out:
|
|
||||||
damon_destroy_ctx(ctx);
|
|
||||||
return ERR_PTR(err);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int damon_sysfs_turn_damon_on(struct damon_sysfs_kdamond *kdamond)
|
static int damon_sysfs_turn_damon_on(struct damon_sysfs_kdamond *kdamond)
|
||||||
|
|
Loading…
Reference in a new issue