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

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.comSigned-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
...@@ -2657,23 +2657,18 @@ static void damon_sysfs_kdamonds_rm_dirs(struct damon_sysfs_kdamonds *kdamonds) ...@@ -2657,23 +2657,18 @@ static void damon_sysfs_kdamonds_rm_dirs(struct damon_sysfs_kdamonds *kdamonds)
kdamonds->kdamonds_arr = NULL; 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_kdamonds)
{ {
int nr_running_ctxs = 0;
int i; int i;
for (i = 0; i < nr_kdamonds; i++) { for (i = 0; i < nr_kdamonds; i++) {
struct damon_ctx *ctx = kdamonds[i]->damon_ctx; if (damon_sysfs_kdamond_running(kdamonds[i]) ||
damon_sysfs_cmd_request.kdamond == kdamonds[i])
if (!ctx) return true;
continue;
mutex_lock(&ctx->kdamond_lock);
if (ctx->kdamond)
nr_running_ctxs++;
mutex_unlock(&ctx->kdamond_lock);
} }
return nr_running_ctxs;
return false;
} }
static int damon_sysfs_kdamonds_add_dirs(struct damon_sysfs_kdamonds *kdamonds, 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, ...@@ -2682,15 +2677,9 @@ static int damon_sysfs_kdamonds_add_dirs(struct damon_sysfs_kdamonds *kdamonds,
struct damon_sysfs_kdamond **kdamonds_arr, *kdamond; struct damon_sysfs_kdamond **kdamonds_arr, *kdamond;
int err, i; 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; 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); damon_sysfs_kdamonds_rm_dirs(kdamonds);
if (!nr_kdamonds) if (!nr_kdamonds)
return 0; return 0;
......
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