]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
mm/damon/sysfs: handle clear_schemes_tried_regions from DAMON sysfs context
authorSeongJae Park <sj@kernel.org>
Fri, 3 Jan 2025 17:43:52 +0000 (09:43 -0800)
committerAndrew Morton <akpm@linux-foundation.org>
Sun, 26 Jan 2025 04:22:25 +0000 (20:22 -0800)
DAMON sysfs interface handles clear_schemes_tried_regions request from the
DAMON callback context (damon_sysfs_cmd_request_callback()), which is
designed to be used for safe access to the related DAMON context internal
data.  But no DAMON context internal data is accessed for the work.
Directly handle it from DAMON sysfs interface context, namely
damon_sysfs_handle_cmd().

Link: https://lkml.kernel.org/r/20250103174400.54890-3-sj@kernel.org
Signed-off-by: SeongJae Park <sj@kernel.org>
Cc: Jonathan Corbet <corbet@lwn.net>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
mm/damon/sysfs-schemes.c
mm/damon/sysfs.c

index 2aa34778a472b3d5f3d85a8359ff356926ffeddc..c57ab47686ffbc915ea0fe4914025224ef9da20b 100644 (file)
@@ -2260,7 +2260,7 @@ static void damos_tried_regions_init_upd_status(
        }
 }
 
-/* Called from damon_sysfs_cmd_request_callback under damon_sysfs_lock */
+/* Called while damon_sysfs_lock is hold */
 int damon_sysfs_schemes_update_regions_start(
                struct damon_sysfs_schemes *sysfs_schemes,
                struct damon_ctx *ctx, bool total_bytes_only)
index 789804986ab0dd0c40ce17643418d4b1c7c56cf1..4f6e4720b7ce2ede5318d16af54806bd36d5072f 100644 (file)
@@ -1254,17 +1254,6 @@ static int damon_sysfs_upd_schemes_regions_stop(
        return damon_sysfs_schemes_update_regions_stop(ctx);
 }
 
-static int damon_sysfs_clear_schemes_regions(
-               struct damon_sysfs_kdamond *kdamond)
-{
-       struct damon_ctx *ctx = kdamond->damon_ctx;
-
-       if (!ctx)
-               return -EINVAL;
-       return damon_sysfs_schemes_clear_regions(
-                       kdamond->contexts->contexts_arr[0]->schemes);
-}
-
 static inline bool damon_sysfs_kdamond_running(
                struct damon_sysfs_kdamond *kdamond)
 {
@@ -1417,9 +1406,6 @@ static int damon_sysfs_cmd_request_callback(struct damon_ctx *c, bool active,
                        damon_sysfs_schemes_regions_updating = false;
                }
                break;
-       case DAMON_SYSFS_CMD_CLEAR_SCHEMES_TRIED_REGIONS:
-               err = damon_sysfs_clear_schemes_regions(kdamond);
-               break;
        case DAMON_SYSFS_CMD_UPDATE_SCHEMES_EFFECTIVE_QUOTAS:
                err = damon_sysfs_upd_schemes_effective_quotas(kdamond);
                break;
@@ -1549,6 +1535,9 @@ static int damon_sysfs_handle_cmd(enum damon_sysfs_cmd cmd,
                return damon_sysfs_turn_damon_on(kdamond);
        case DAMON_SYSFS_CMD_OFF:
                return damon_sysfs_turn_damon_off(kdamond);
+       case DAMON_SYSFS_CMD_CLEAR_SCHEMES_TRIED_REGIONS:
+               return damon_sysfs_schemes_clear_regions(
+                       kdamond->contexts->contexts_arr[0]->schemes);
        default:
                break;
        }