diff options
Diffstat (limited to 'net/sched/sch_dsmark.c')
-rw-r--r-- | net/sched/sch_dsmark.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/net/sched/sch_dsmark.c b/net/sched/sch_dsmark.c index 49d6ef338b55..227114f27f94 100644 --- a/net/sched/sch_dsmark.c +++ b/net/sched/sch_dsmark.c | |||
@@ -37,7 +37,7 @@ | |||
37 | 37 | ||
38 | struct dsmark_qdisc_data { | 38 | struct dsmark_qdisc_data { |
39 | struct Qdisc *q; | 39 | struct Qdisc *q; |
40 | struct tcf_proto *filter_list; | 40 | struct tcf_proto __rcu *filter_list; |
41 | u8 *mask; /* "owns" the array */ | 41 | u8 *mask; /* "owns" the array */ |
42 | u8 *value; | 42 | u8 *value; |
43 | u16 indices; | 43 | u16 indices; |
@@ -186,8 +186,8 @@ ignore: | |||
186 | } | 186 | } |
187 | } | 187 | } |
188 | 188 | ||
189 | static inline struct tcf_proto **dsmark_find_tcf(struct Qdisc *sch, | 189 | static inline struct tcf_proto __rcu **dsmark_find_tcf(struct Qdisc *sch, |
190 | unsigned long cl) | 190 | unsigned long cl) |
191 | { | 191 | { |
192 | struct dsmark_qdisc_data *p = qdisc_priv(sch); | 192 | struct dsmark_qdisc_data *p = qdisc_priv(sch); |
193 | return &p->filter_list; | 193 | return &p->filter_list; |
@@ -229,7 +229,8 @@ static int dsmark_enqueue(struct sk_buff *skb, struct Qdisc *sch) | |||
229 | skb->tc_index = TC_H_MIN(skb->priority); | 229 | skb->tc_index = TC_H_MIN(skb->priority); |
230 | else { | 230 | else { |
231 | struct tcf_result res; | 231 | struct tcf_result res; |
232 | int result = tc_classify(skb, p->filter_list, &res); | 232 | struct tcf_proto *fl = rcu_dereference_bh(p->filter_list); |
233 | int result = tc_classify(skb, fl, &res); | ||
233 | 234 | ||
234 | pr_debug("result %d class 0x%04x\n", result, res.classid); | 235 | pr_debug("result %d class 0x%04x\n", result, res.classid); |
235 | 236 | ||
@@ -257,7 +258,7 @@ static int dsmark_enqueue(struct sk_buff *skb, struct Qdisc *sch) | |||
257 | err = qdisc_enqueue(skb, p->q); | 258 | err = qdisc_enqueue(skb, p->q); |
258 | if (err != NET_XMIT_SUCCESS) { | 259 | if (err != NET_XMIT_SUCCESS) { |
259 | if (net_xmit_drop_count(err)) | 260 | if (net_xmit_drop_count(err)) |
260 | sch->qstats.drops++; | 261 | qdisc_qstats_drop(sch); |
261 | return err; | 262 | return err; |
262 | } | 263 | } |
263 | 264 | ||