]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
mm/damon/sysfs-schemes: implement path file under quota goal directory
authorSeongJae Park <sj@kernel.org>
Fri, 17 Oct 2025 21:26:56 +0000 (14:26 -0700)
committerAndrew Morton <akpm@linux-foundation.org>
Wed, 22 Oct 2025 01:51:42 +0000 (18:51 -0700)
Add a DAMOS sysfs file for specifying the cgroup of the interest for
DAMOS_QUOTA_NODE_MEMCG_USED_BP.

Link: https://lkml.kernel.org/r/20251017212706.183502-5-sj@kernel.org
Signed-off-by: SeongJae Park <sj@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
mm/damon/sysfs-schemes.c

index 6536f16006c90f0d130abf11339cfcf05317ffe8..2c440a2b80e62881096fd42810bf66782d10742f 100644 (file)
@@ -999,6 +999,7 @@ struct damos_sysfs_quota_goal {
        unsigned long target_value;
        unsigned long current_value;
        int nid;
+       char *path;
 };
 
 static struct damos_sysfs_quota_goal *damos_sysfs_quota_goal_alloc(void)
@@ -1128,10 +1129,39 @@ static ssize_t nid_store(struct kobject *kobj,
        return err ? err : count;
 }
 
+static ssize_t path_show(struct kobject *kobj,
+               struct kobj_attribute *attr, char *buf)
+{
+       struct damos_sysfs_quota_goal *goal = container_of(kobj,
+                       struct damos_sysfs_quota_goal, kobj);
+
+       return sysfs_emit(buf, "%s\n", goal->path ? goal->path : "");
+}
+
+static ssize_t path_store(struct kobject *kobj,
+               struct kobj_attribute *attr, const char *buf, size_t count)
+{
+       struct damos_sysfs_quota_goal *goal = container_of(kobj,
+                       struct damos_sysfs_quota_goal, kobj);
+       char *path = kmalloc_array(size_add(count, 1), sizeof(*path),
+                                  GFP_KERNEL);
+
+       if (!path)
+               return -ENOMEM;
+
+       strscpy(path, buf, count + 1);
+       kfree(goal->path);
+       goal->path = path;
+       return count;
+}
+
 static void damos_sysfs_quota_goal_release(struct kobject *kobj)
 {
-       /* or, notify this release to the feed callback */
-       kfree(container_of(kobj, struct damos_sysfs_quota_goal, kobj));
+       struct damos_sysfs_quota_goal *goal = container_of(kobj,
+                       struct damos_sysfs_quota_goal, kobj);
+
+       kfree(goal->path);
+       kfree(goal);
 }
 
 static struct kobj_attribute damos_sysfs_quota_goal_target_metric_attr =
@@ -1146,11 +1176,15 @@ static struct kobj_attribute damos_sysfs_quota_goal_current_value_attr =
 static struct kobj_attribute damos_sysfs_quota_goal_nid_attr =
                __ATTR_RW_MODE(nid, 0600);
 
+static struct kobj_attribute damos_sysfs_quota_goal_path_attr =
+               __ATTR_RW_MODE(path, 0600);
+
 static struct attribute *damos_sysfs_quota_goal_attrs[] = {
        &damos_sysfs_quota_goal_target_metric_attr.attr,
        &damos_sysfs_quota_goal_target_value_attr.attr,
        &damos_sysfs_quota_goal_current_value_attr.attr,
        &damos_sysfs_quota_goal_nid_attr.attr,
+       &damos_sysfs_quota_goal_path_attr.attr,
        NULL,
 };
 ATTRIBUTE_GROUPS(damos_sysfs_quota_goal);