Commit a79b68ee authored by SeongJae Park's avatar SeongJae Park Committed by Andrew Morton
Browse files

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: default avatarSeongJae Park <sj@kernel.org>
Cc: Jonathan Corbet <corbet@lwn.net>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
parent f25ab3bd
Loading
Loading
Loading
Loading
+24 −35
Original line number Diff line number Diff line
@@ -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.
@@ -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]);
}

/*
@@ -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)