Release 4.7 net/core/netclassid_cgroup.c
/*
* net/core/netclassid_cgroup.c Classid Cgroupfs Handling
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version
* 2 of the License, or (at your option) any later version.
*
* Authors: Thomas Graf <tgraf@suug.ch>
*/
#include <linux/slab.h>
#include <linux/cgroup.h>
#include <linux/fdtable.h>
#include <net/cls_cgroup.h>
#include <net/sock.h>
static inline struct cgroup_cls_state *css_cls_state(struct cgroup_subsys_state *css)
{
return css ? container_of(css, struct cgroup_cls_state, css) : NULL;
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
daniel borkmann | daniel borkmann | 29 | 100.00% | 1 | 100.00% |
| Total | 29 | 100.00% | 1 | 100.00% |
struct cgroup_cls_state *task_cls_state(struct task_struct *p)
{
return css_cls_state(task_css_check(p, net_cls_cgrp_id,
rcu_read_lock_bh_held()));
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
daniel borkmann | daniel borkmann | 21 | 80.77% | 1 | 33.33% |
konstantin khlebnikov | konstantin khlebnikov | 4 | 15.38% | 1 | 33.33% |
tejun heo | tejun heo | 1 | 3.85% | 1 | 33.33% |
| Total | 26 | 100.00% | 3 | 100.00% |
EXPORT_SYMBOL_GPL(task_cls_state);
static struct cgroup_subsys_state *
cgrp_css_alloc(struct cgroup_subsys_state *parent_css)
{
struct cgroup_cls_state *cs;
cs = kzalloc(sizeof(*cs), GFP_KERNEL);
if (!cs)
return ERR_PTR(-ENOMEM);
return &cs->css;
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
daniel borkmann | daniel borkmann | 49 | 100.00% | 1 | 100.00% |
| Total | 49 | 100.00% | 1 | 100.00% |
static int cgrp_css_online(struct cgroup_subsys_state *css)
{
struct cgroup_cls_state *cs = css_cls_state(css);
struct cgroup_cls_state *parent = css_cls_state(css->parent);
if (parent)
cs->classid = parent->classid;
return 0;
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
daniel borkmann | daniel borkmann | 46 | 95.83% | 1 | 50.00% |
tejun heo | tejun heo | 2 | 4.17% | 1 | 50.00% |
| Total | 48 | 100.00% | 2 | 100.00% |
static void cgrp_css_free(struct cgroup_subsys_state *css)
{
kfree(css_cls_state(css));
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
daniel borkmann | daniel borkmann | 19 | 100.00% | 1 | 100.00% |
| Total | 19 | 100.00% | 1 | 100.00% |
static int update_classid_sock(const void *v, struct file *file, unsigned n)
{
int err;
struct socket *sock = sock_from_file(file, &err);
if (sock) {
spin_lock(&cgroup_sk_update_lock);
sock_cgroup_set_classid(&sock->sk->sk_cgrp_data,
(unsigned long)v);
spin_unlock(&cgroup_sk_update_lock);
}
return 0;
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
daniel borkmann | daniel borkmann | 51 | 70.83% | 1 | 25.00% |
tejun heo | tejun heo | 20 | 27.78% | 2 | 50.00% |
nina schiff | nina schiff | 1 | 1.39% | 1 | 25.00% |
| Total | 72 | 100.00% | 4 | 100.00% |
static void update_classid(struct cgroup_subsys_state *css, void *v)
{
struct css_task_iter it;
struct task_struct *p;
css_task_iter_start(css, &it);
while ((p = css_task_iter_next(&it))) {
task_lock(p);
iterate_fd(p->files, 0, update_classid_sock, v);
task_unlock(p);
}
css_task_iter_end(&it);
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
daniel borkmann | daniel borkmann | 45 | 60.00% | 1 | 50.00% |
nina schiff | nina schiff | 30 | 40.00% | 1 | 50.00% |
| Total | 75 | 100.00% | 2 | 100.00% |
static void cgrp_attach(struct cgroup_taskset *tset)
{
struct cgroup_subsys_state *css;
cgroup_taskset_first(tset, &css);
update_classid(css,
(void *)(unsigned long)css_cls_state(css)->classid);
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
nina schiff | nina schiff | 30 | 68.18% | 1 | 33.33% |
tejun heo | tejun heo | 13 | 29.55% | 1 | 33.33% |
daniel borkmann | daniel borkmann | 1 | 2.27% | 1 | 33.33% |
| Total | 44 | 100.00% | 3 | 100.00% |
static u64 read_classid(struct cgroup_subsys_state *css, struct cftype *cft)
{
return css_cls_state(css)->classid;
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
daniel borkmann | daniel borkmann | 24 | 100.00% | 1 | 100.00% |
| Total | 24 | 100.00% | 1 | 100.00% |
static int write_classid(struct cgroup_subsys_state *css, struct cftype *cft,
u64 value)
{
struct cgroup_cls_state *cs = css_cls_state(css);
cgroup_sk_alloc_disable();
cs->classid = (u32)value;
update_classid(css, (void *)(unsigned long)cs->classid);
return 0;
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
daniel borkmann | daniel borkmann | 34 | 55.74% | 1 | 33.33% |
nina schiff | nina schiff | 24 | 39.34% | 1 | 33.33% |
tejun heo | tejun heo | 3 | 4.92% | 1 | 33.33% |
| Total | 61 | 100.00% | 3 | 100.00% |
static struct cftype ss_files[] = {
{
.name = "classid",
.read_u64 = read_classid,
.write_u64 = write_classid,
},
{ } /* terminate */
};
struct cgroup_subsys net_cls_cgrp_subsys = {
.css_alloc = cgrp_css_alloc,
.css_online = cgrp_css_online,
.css_free = cgrp_css_free,
.attach = cgrp_attach,
.legacy_cftypes = ss_files,
};
Overall Contributors
| Person | Tokens | Prop | Commits | CommitProp |
daniel borkmann | daniel borkmann | 397 | 75.33% | 1 | 11.11% |
nina schiff | nina schiff | 85 | 16.13% | 1 | 11.11% |
tejun heo | tejun heo | 41 | 7.78% | 6 | 66.67% |
konstantin khlebnikov | konstantin khlebnikov | 4 | 0.76% | 1 | 11.11% |
| Total | 527 | 100.00% | 9 | 100.00% |
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.