Commit c274cd5c authored by Kaixu Xia's avatar Kaixu Xia Committed by Andrew Morton
Browse files

mm/damon/sysfs: simplify the judgement whether kdamonds are busy

It is unnecessary to get the number of the running kdamond to judge
whether kdamonds are busy.  Here we can use the
damon_sysfs_kdamond_running() helper and return -EBUSY directly when
finding a running kdamond.  Meanwhile, merging with the judgement that a
kdamond has current sysfs command callback request to make the code more
clear.

Link: https://lkml.kernel.org/r/1662302166-13216-1-git-send-email-kaixuxia@tencent.com


Signed-off-by: default avatarKaixu Xia <kaixuxia@tencent.com>
Reviewed-by: default avatarSeongJae Park <sj@kernel.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
parent 8eeda55f
Loading
Loading
Loading
Loading
+7 −18
Original line number Diff line number Diff line
@@ -2657,23 +2657,18 @@ static void damon_sysfs_kdamonds_rm_dirs(struct damon_sysfs_kdamonds *kdamonds)
	kdamonds->kdamonds_arr = NULL;
}

static int damon_sysfs_nr_running_ctxs(struct damon_sysfs_kdamond **kdamonds,
static bool damon_sysfs_kdamonds_busy(struct damon_sysfs_kdamond **kdamonds,
		int nr_kdamonds)
{
	int nr_running_ctxs = 0;
	int i;

	for (i = 0; i < nr_kdamonds; i++) {
		struct damon_ctx *ctx = kdamonds[i]->damon_ctx;

		if (!ctx)
			continue;
		mutex_lock(&ctx->kdamond_lock);
		if (ctx->kdamond)
			nr_running_ctxs++;
		mutex_unlock(&ctx->kdamond_lock);
		if (damon_sysfs_kdamond_running(kdamonds[i]) ||
		    damon_sysfs_cmd_request.kdamond == kdamonds[i])
			return true;
	}
	return nr_running_ctxs;

	return false;
}

static int damon_sysfs_kdamonds_add_dirs(struct damon_sysfs_kdamonds *kdamonds,
@@ -2682,15 +2677,9 @@ static int damon_sysfs_kdamonds_add_dirs(struct damon_sysfs_kdamonds *kdamonds,
	struct damon_sysfs_kdamond **kdamonds_arr, *kdamond;
	int err, i;

	if (damon_sysfs_nr_running_ctxs(kdamonds->kdamonds_arr, kdamonds->nr))
	if (damon_sysfs_kdamonds_busy(kdamonds->kdamonds_arr, kdamonds->nr))
		return -EBUSY;

	for (i = 0; i < kdamonds->nr; i++) {
		if (damon_sysfs_cmd_request.kdamond ==
				kdamonds->kdamonds_arr[i])
			return -EBUSY;
	}

	damon_sysfs_kdamonds_rm_dirs(kdamonds);
	if (!nr_kdamonds)
		return 0;