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:
Родитель
8eeda55fe0
Коммит
c274cd5c9b
|
@ -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;
|
||||
|
|
Загрузка…
Ссылка в новой задаче