mm/damon/sysfs: simplify the judgement whether kdamonds are busy
authorKaixu Xia <kaixuxia@tencent.com>
Sun, 4 Sep 2022 14:36:06 +0000 (22:36 +0800)
committerAndrew Morton <akpm@linux-foundation.org>
Mon, 3 Oct 2022 21:02:55 +0000 (14:02 -0700)
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>
mm/damon/sysfs.c

index 7488e27..fe6c687 100644 (file)
@@ -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;