]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
mm/damon/sysfs: use damon_call() for update_schemes_effective_quotas
authorSeongJae Park <sj@kernel.org>
Fri, 3 Jan 2025 17:43:56 +0000 (09:43 -0800)
committerAndrew Morton <akpm@linux-foundation.org>
Sun, 26 Jan 2025 04:22:25 +0000 (20:22 -0800)
DAMON sysfs interface uses damon_callback with its own synchronization
facility to handle update_schemes_effective_quotas command.  But
damon_call() can support the use case without the additional
synchronizations.  Convert the code to use damon_call() instead.

Link: https://lkml.kernel.org/r/20250103174400.54890-7-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.c

index 7c2aa9830edc03ed07456767e67b0a5a18536907..917e6aca3f580cbaa4ae7466835d5504e7d34287 100644 (file)
@@ -1327,20 +1327,18 @@ static int damon_sysfs_commit_schemes_quota_goals(void *data)
 /*
  * damon_sysfs_upd_schemes_effective_quotas() - Update schemes effective quotas
  * sysfs files.
- * @kdamond:   The kobject wrapper that associated to the kdamond thread.
+ * @data:      The kobject wrapper that associated to the kdamond thread.
  *
  * This function reads the schemes' effective quotas of specific kdamond and
  * update the related values for sysfs files.  This function should be called
  * from DAMON callbacks while holding ``damon_syfs_lock``, to safely access the
  * DAMON contexts-internal data and DAMON sysfs variables.
  */
-static int damon_sysfs_upd_schemes_effective_quotas(
-               struct damon_sysfs_kdamond *kdamond)
+static int damon_sysfs_upd_schemes_effective_quotas(void *data)
 {
+       struct damon_sysfs_kdamond *kdamond = data;
        struct damon_ctx *ctx = kdamond->damon_ctx;
 
-       if (!ctx)
-               return -EINVAL;
        damos_sysfs_update_effective_quotas(
                        kdamond->contexts->contexts_arr[0]->schemes, ctx);
        return 0;
@@ -1400,9 +1398,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_UPDATE_SCHEMES_EFFECTIVE_QUOTAS:
-               err = damon_sysfs_upd_schemes_effective_quotas(kdamond);
-               break;
        default:
                break;
        }
@@ -1550,6 +1545,10 @@ static int damon_sysfs_handle_cmd(enum damon_sysfs_cmd cmd,
        case DAMON_SYSFS_CMD_CLEAR_SCHEMES_TRIED_REGIONS:
                return damon_sysfs_schemes_clear_regions(
                        kdamond->contexts->contexts_arr[0]->schemes);
+       case DAMON_SYSFS_CMD_UPDATE_SCHEMES_EFFECTIVE_QUOTAS:
+               return damon_sysfs_damon_call(
+                               damon_sysfs_upd_schemes_effective_quotas,
+                               kdamond);
        default:
                break;
        }