diff options
Diffstat (limited to 'net/sched')
-rw-r--r-- | net/sched/cls_cgroup.c | 23 |
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 | ||
27 | static inline struct cgroup_cls_state *net_cls_state(struct cgroup *cgrp) | 27 | static 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 | |||
33 | static 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 | ||
33 | static struct cgroup_subsys_state *cgrp_create(struct cgroup_subsys *ss, | 39 | static 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 | ||
47 | static void cgrp_destroy(struct cgroup_subsys *ss, struct cgroup *cgrp) | 53 | static 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 | ||
52 | static u64 read_classid(struct cgroup *cgrp, struct cftype *cft) | 58 | static 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 | ||
57 | static int write_classid(struct cgroup *cgrp, struct cftype *cft, u64 value) | 63 | static 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; |