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: Kaixu Xia <kaixuxia@tencent.com>
Reviewed-by: SeongJae Park <sj@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
Kaixu Xia 2022-09-04 22:36:06 +08:00 коммит произвёл Andrew Morton
Родитель 8eeda55fe0
Коммит c274cd5c9b
1 изменённых файлов: 7 добавлений и 18 удалений

Просмотреть файл

@ -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;