* [PATCH v2 1/2] cgroup: export list of delegatable control files using sysfs [not found] ` <20171106173854.GE3252168-4dN5La/x3IkLX0oZNxdnEQ2O0Ztt9esIQQ4Iyu8u01E@public.gmane.org> @ 2017-11-06 18:30 ` Roman Gushchin [not found] ` <20171106183029.21297-1-guro-b10kYP2dOMg@public.gmane.org> 0 siblings, 1 reply; 3+ messages in thread From: Roman Gushchin @ 2017-11-06 18:30 UTC (permalink / raw) To: Tejun Heo Cc: linux-kernel-u79uwXL29TY76Z2rM5mHXA, kernel-team-b10kYP2dOMg, cgroups-u79uwXL29TY76Z2rM5mHXA, Roman Gushchin Delegatable cgroup v2 control files may require special handling (e.g. chowning), and the exact list of such files varies between kernel versions (and likely to be extended in the future). To guarantee correctness of this list and simplify the life of userspace (systemd, first of all), let's export the list via /sys/kernel/cgroup/delegate pseudo-file. Format is siple: each control file name is printed on a new line. Example: $ cat /sys/kernel/cgroup/delegate cgroup.procs cgroup.subtree_control Signed-off-by: Roman Gushchin <guro-b10kYP2dOMg@public.gmane.org> Cc: Tejun Heo <tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> Cc: kernel-team-b10kYP2dOMg@public.gmane.org --- kernel/cgroup/cgroup.c | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/kernel/cgroup/cgroup.c b/kernel/cgroup/cgroup.c index d6ed725f36d9..eed92ed624e5 100644 --- a/kernel/cgroup/cgroup.c +++ b/kernel/cgroup/cgroup.c @@ -5832,3 +5832,64 @@ int cgroup_bpf_update(struct cgroup *cgrp, struct bpf_prog *prog, return ret; } #endif /* CONFIG_CGROUP_BPF */ + +#ifdef CONFIG_SYSFS +static ssize_t show_delegatable_files(struct cftype *files, char *buf, + ssize_t size, const char *prefix) +{ + struct cftype *cft; + ssize_t ret = 0; + + for (cft = files; cft && cft->name[0] != '\0'; cft++) { + if (!(cft->flags & CFTYPE_NS_DELEGATABLE)) + continue; + + if (prefix) + ret += snprintf(buf + ret, size - ret, "%s.", prefix); + + ret += snprintf(buf + ret, size - ret, "%s\n", cft->name); + + if (unlikely(ret >= size)) { + WARN_ON(1); + break; + } + } + + return ret; +} + +static ssize_t delegate_show(struct kobject *kobj, struct kobj_attribute *attr, + char *buf) +{ + struct cgroup_subsys *ss; + int ssid; + ssize_t ret = 0; + + ret = show_delegatable_files(cgroup_base_files, buf, PAGE_SIZE - ret, + NULL); + + for_each_subsys(ss, ssid) + ret += show_delegatable_files(ss->dfl_cftypes, buf + ret, + PAGE_SIZE - ret, + cgroup_subsys_name[ssid]); + + return ret; +} +static struct kobj_attribute cgroup_delegate_attr = __ATTR_RO(delegate); + +static struct attribute *cgroup_sysfs_attrs[] = { + &cgroup_delegate_attr.attr, + NULL, +}; + +static const struct attribute_group cgroup_sysfs_attr_group = { + .attrs = cgroup_sysfs_attrs, + .name = "cgroup", +}; + +static int __init cgroup_sysfs_init(void) +{ + return sysfs_create_group(kernel_kobj, &cgroup_sysfs_attr_group); +} +subsys_initcall(cgroup_sysfs_init); +#endif /* CONFIG_SYSFS */ -- 2.13.6 ^ permalink raw reply related [flat|nested] 3+ messages in thread
[parent not found: <20171106183029.21297-1-guro-b10kYP2dOMg@public.gmane.org>]
* [PATCH v2 2/2] cgroup: export list of cgroups v2 features using sysfs [not found] ` <20171106183029.21297-1-guro-b10kYP2dOMg@public.gmane.org> @ 2017-11-06 18:30 ` Roman Gushchin [not found] ` <20171106183029.21297-2-guro-b10kYP2dOMg@public.gmane.org> 0 siblings, 1 reply; 3+ messages in thread From: Roman Gushchin @ 2017-11-06 18:30 UTC (permalink / raw) To: Tejun Heo Cc: linux-kernel-u79uwXL29TY76Z2rM5mHXA, kernel-team-b10kYP2dOMg, cgroups-u79uwXL29TY76Z2rM5mHXA, Roman Gushchin The active development of cgroups v2 sometimes leads to a creation of interfaces, which are not turned on by default (to provide backward compatibility). It's handy to know from userspace, which cgroup v2 features are supported without calculating it based on the kernel version. So, let's export the list of such features using /sys/kernel/cgroup/features pseudo-file. The list is hardcoded and has to be extended when new functionality is added. Each feature is printed on a new line. Example: $ cat /sys/kernel/cgroup/features nsdelegate Signed-off-by: Roman Gushchin <guro-b10kYP2dOMg@public.gmane.org> Cc: Tejun Heo <tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> Cc: kernel-team-b10kYP2dOMg@public.gmane.org --- kernel/cgroup/cgroup.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/kernel/cgroup/cgroup.c b/kernel/cgroup/cgroup.c index eed92ed624e5..69e65d28fe98 100644 --- a/kernel/cgroup/cgroup.c +++ b/kernel/cgroup/cgroup.c @@ -5877,8 +5877,16 @@ static ssize_t delegate_show(struct kobject *kobj, struct kobj_attribute *attr, } static struct kobj_attribute cgroup_delegate_attr = __ATTR_RO(delegate); +static ssize_t features_show(struct kobject *kobj, struct kobj_attribute *attr, + char *buf) +{ + return snprintf(buf, PAGE_SIZE, "nsdelegate\n"); +} +static struct kobj_attribute cgroup_features_attr = __ATTR_RO(features); + static struct attribute *cgroup_sysfs_attrs[] = { &cgroup_delegate_attr.attr, + &cgroup_features_attr.attr, NULL, }; -- 2.13.6 ^ permalink raw reply related [flat|nested] 3+ messages in thread
[parent not found: <20171106183029.21297-2-guro-b10kYP2dOMg@public.gmane.org>]
* Re: [PATCH v2 2/2] cgroup: export list of cgroups v2 features using sysfs [not found] ` <20171106183029.21297-2-guro-b10kYP2dOMg@public.gmane.org> @ 2017-11-06 20:02 ` Tejun Heo 0 siblings, 0 replies; 3+ messages in thread From: Tejun Heo @ 2017-11-06 20:02 UTC (permalink / raw) To: Roman Gushchin Cc: linux-kernel-u79uwXL29TY76Z2rM5mHXA, kernel-team-b10kYP2dOMg, cgroups-u79uwXL29TY76Z2rM5mHXA On Mon, Nov 06, 2017 at 01:30:29PM -0500, Roman Gushchin wrote: > The active development of cgroups v2 sometimes leads to a creation > of interfaces, which are not turned on by default (to provide > backward compatibility). It's handy to know from userspace, which > cgroup v2 features are supported without calculating it based > on the kernel version. So, let's export the list of such features > using /sys/kernel/cgroup/features pseudo-file. > > The list is hardcoded and has to be extended when new functionality > is added. Each feature is printed on a new line. > > Example: > $ cat /sys/kernel/cgroup/features > nsdelegate > > Signed-off-by: Roman Gushchin <guro-b10kYP2dOMg@public.gmane.org> > Cc: Tejun Heo <tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> > Cc: kernel-team-b10kYP2dOMg@public.gmane.org Applied 1-2 to cgroup/for-4.15. Thanks. -- tejun ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2017-11-06 20:02 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20171106173854.GE3252168@devbig577.frc2.facebook.com>
[not found] ` <20171106173854.GE3252168-4dN5La/x3IkLX0oZNxdnEQ2O0Ztt9esIQQ4Iyu8u01E@public.gmane.org>
2017-11-06 18:30 ` [PATCH v2 1/2] cgroup: export list of delegatable control files using sysfs Roman Gushchin
[not found] ` <20171106183029.21297-1-guro-b10kYP2dOMg@public.gmane.org>
2017-11-06 18:30 ` [PATCH v2 2/2] cgroup: export list of cgroups v2 features " Roman Gushchin
[not found] ` <20171106183029.21297-2-guro-b10kYP2dOMg@public.gmane.org>
2017-11-06 20:02 ` Tejun Heo
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).