aboutsummaryrefslogtreecommitdiffstats
path: root/net/sched/cls_cgroup.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/sched/cls_cgroup.c')
-rw-r--r--net/sched/cls_cgroup.c23
1 files changed, 14 insertions, 9 deletions
diff --git a/net/sched/cls_cgroup.c b/net/sched/cls_cgroup.c
index 31d95b1946c6..91a3db4a76f8 100644
--- a/net/sched/cls_cgroup.c
+++ b/net/sched/cls_cgroup.c
@@ -24,10 +24,16 @@ struct cgroup_cls_state
24 u32 classid; 24 u32 classid;
25}; 25};
26 26
27static inline struct cgroup_cls_state *net_cls_state(struct cgroup *cgrp) 27static inline struct cgroup_cls_state *cgrp_cls_state(struct cgroup *cgrp)
28{ 28{
29 return (struct cgroup_cls_state *) 29 return container_of(cgroup_subsys_state(cgrp, net_cls_subsys_id),
30 cgroup_subsys_state(cgrp, net_cls_subsys_id); 30 struct cgroup_cls_state, css);
31}
32
33static inline struct cgroup_cls_state *task_cls_state(struct task_struct *p)
34{
35 return container_of(task_subsys_state(p, net_cls_subsys_id),
36 struct cgroup_cls_state, css);
31} 37}
32 38
33static struct cgroup_subsys_state *cgrp_create(struct cgroup_subsys *ss, 39static struct cgroup_subsys_state *cgrp_create(struct cgroup_subsys *ss,
@@ -39,19 +45,19 @@ static struct cgroup_subsys_state *cgrp_create(struct cgroup_subsys *ss,
39 return ERR_PTR(-ENOMEM); 45 return ERR_PTR(-ENOMEM);
40 46
41 if (cgrp->parent) 47 if (cgrp->parent)
42 cs->classid = net_cls_state(cgrp->parent)->classid; 48 cs->classid = cgrp_cls_state(cgrp->parent)->classid;
43 49
44 return &cs->css; 50 return &cs->css;
45} 51}
46 52
47static void cgrp_destroy(struct cgroup_subsys *ss, struct cgroup *cgrp) 53static void cgrp_destroy(struct cgroup_subsys *ss, struct cgroup *cgrp)
48{ 54{
49 kfree(net_cls_state(cgrp)); 55 kfree(cgrp_cls_state(cgrp));
50} 56}
51 57
52static u64 read_classid(struct cgroup *cgrp, struct cftype *cft) 58static u64 read_classid(struct cgroup *cgrp, struct cftype *cft)
53{ 59{
54 return net_cls_state(cgrp)->classid; 60 return cgrp_cls_state(cgrp)->classid;
55} 61}
56 62
57static int write_classid(struct cgroup *cgrp, struct cftype *cft, u64 value) 63static int write_classid(struct cgroup *cgrp, struct cftype *cft, u64 value)
@@ -59,7 +65,7 @@ static int write_classid(struct cgroup *cgrp, struct cftype *cft, u64 value)
59 if (!cgroup_lock_live_group(cgrp)) 65 if (!cgroup_lock_live_group(cgrp))
60 return -ENODEV; 66 return -ENODEV;
61 67
62 net_cls_state(cgrp)->classid = (u32) value; 68 cgrp_cls_state(cgrp)->classid = (u32) value;
63 69
64 cgroup_unlock(); 70 cgroup_unlock();
65 71
@@ -115,8 +121,7 @@ static int cls_cgroup_classify(struct sk_buff *skb, struct tcf_proto *tp,
115 return -1; 121 return -1;
116 122
117 rcu_read_lock(); 123 rcu_read_lock();
118 cs = (struct cgroup_cls_state *) task_subsys_state(current, 124 cs = task_cls_state(current);
119 net_cls_subsys_id);
120 if (cs->classid && tcf_em_tree_match(skb, &head->ematches, NULL)) { 125 if (cs->classid && tcf_em_tree_match(skb, &head->ematches, NULL)) {
121 res->classid = cs->classid; 126 res->classid = cs->classid;
122 res->class = 0; 127 res->class = 0;