mm/damon/sysfs-schemes: implement path file under quota goal directory

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>
This commit is contained in:
SeongJae Park 2025-10-17 14:26:56 -07:00 committed by Andrew Morton
parent b74a120bcf
commit c41e253a41

View 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);