Commit 4a07c222 authored by Tejun Heo's avatar Tejun Heo

cgroup: replace "cgroup.populated" with "cgroup.events"

memcg already uses "memory.events" for event reporting and other
controllers may need event reporting too.  Let's standardize on
"$SUBSYS.events" interface file for reporting events which don't
happen too frequently and thus can share event notification.

"cgroup.populated" is replaced with "populated" field in
"cgroup.events" and documentation is updated accordingly.
Signed-off-by: default avatarTejun Heo <tj@kernel.org>
Cc: Li Zefan <lizefan@huawei.com>
Cc: Johannes Weiner <hannes@cmpxchg.org>
parent 9e10a130
...@@ -341,11 +341,11 @@ is riddled with issues. ...@@ -341,11 +341,11 @@ is riddled with issues.
unnecessarily complicated and probably done this way because event unnecessarily complicated and probably done this way because event
delivery itself was expensive. delivery itself was expensive.
Unified hierarchy implements an interface file "cgroup.populated" Unified hierarchy implements "populated" field in "cgroup.events"
which can be used to monitor whether the cgroup's subhierarchy has interface file which can be used to monitor whether the cgroup's
tasks in it or not. Its value is 0 if there is no task in the cgroup subhierarchy has tasks in it or not. Its value is 0 if there is no
and its descendants; otherwise, 1. poll and [id]notify events are task in the cgroup and its descendants; otherwise, 1. poll and
triggered when the value changes. [id]notify events are triggered when the value changes.
This is significantly lighter and simpler and trivially allows This is significantly lighter and simpler and trivially allows
delegating management of subhierarchy - subhierarchy monitoring can delegating management of subhierarchy - subhierarchy monitoring can
...@@ -435,6 +435,11 @@ may be specified in any order and not all pairs have to be specified. ...@@ -435,6 +435,11 @@ may be specified in any order and not all pairs have to be specified.
the first entry in the file. Specific entries can use "default" as the first entry in the file. Specific entries can use "default" as
its value to indicate inheritance of the default value. its value to indicate inheritance of the default value.
- For events which are not very high frequency, an interface file
"events" should be created which lists event key value pairs.
Whenever a notifiable event happens, file modified event should be
generated on the file.
5-4. Per-Controller Changes 5-4. Per-Controller Changes
......
...@@ -226,7 +226,7 @@ struct cgroup { ...@@ -226,7 +226,7 @@ struct cgroup {
struct kernfs_node *kn; /* cgroup kernfs entry */ struct kernfs_node *kn; /* cgroup kernfs entry */
struct kernfs_node *procs_kn; /* kn for "cgroup.procs" */ struct kernfs_node *procs_kn; /* kn for "cgroup.procs" */
struct kernfs_node *populated_kn; /* kn for "cgroup.subtree_populated" */ struct kernfs_node *events_kn; /* kn for "cgroup.events" */
/* /*
* The bitmask of subsystems enabled on the child cgroups. * The bitmask of subsystems enabled on the child cgroups.
......
...@@ -611,8 +611,8 @@ static void cgroup_update_populated(struct cgroup *cgrp, bool populated) ...@@ -611,8 +611,8 @@ static void cgroup_update_populated(struct cgroup *cgrp, bool populated)
if (!trigger) if (!trigger)
break; break;
if (cgrp->populated_kn) if (cgrp->events_kn)
kernfs_notify(cgrp->populated_kn); kernfs_notify(cgrp->events_kn);
cgrp = cgroup_parent(cgrp); cgrp = cgroup_parent(cgrp);
} while (cgrp); } while (cgrp);
} }
...@@ -3045,9 +3045,10 @@ static ssize_t cgroup_subtree_control_write(struct kernfs_open_file *of, ...@@ -3045,9 +3045,10 @@ static ssize_t cgroup_subtree_control_write(struct kernfs_open_file *of,
goto out_unlock; goto out_unlock;
} }
static int cgroup_populated_show(struct seq_file *seq, void *v) static int cgroup_events_show(struct seq_file *seq, void *v)
{ {
seq_printf(seq, "%d\n", (bool)seq_css(seq)->cgroup->populated_cnt); seq_printf(seq, "populated %d\n",
(bool)seq_css(seq)->cgroup->populated_cnt);
return 0; return 0;
} }
...@@ -3214,8 +3215,8 @@ static int cgroup_add_file(struct cgroup *cgrp, struct cftype *cft) ...@@ -3214,8 +3215,8 @@ static int cgroup_add_file(struct cgroup *cgrp, struct cftype *cft)
if (cft->write == cgroup_procs_write) if (cft->write == cgroup_procs_write)
cgrp->procs_kn = kn; cgrp->procs_kn = kn;
else if (cft->seq_show == cgroup_populated_show) else if (cft->seq_show == cgroup_events_show)
cgrp->populated_kn = kn; cgrp->events_kn = kn;
return 0; return 0;
} }
...@@ -4388,9 +4389,9 @@ static struct cftype cgroup_dfl_base_files[] = { ...@@ -4388,9 +4389,9 @@ static struct cftype cgroup_dfl_base_files[] = {
.write = cgroup_subtree_control_write, .write = cgroup_subtree_control_write,
}, },
{ {
.name = "cgroup.populated", .name = "cgroup.events",
.flags = CFTYPE_NOT_ON_ROOT, .flags = CFTYPE_NOT_ON_ROOT,
.seq_show = cgroup_populated_show, .seq_show = cgroup_events_show,
}, },
{ } /* terminate */ { } /* terminate */
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment