aboutsummaryrefslogtreecommitdiffstats
path: root/net/sched/sch_multiq.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/sched/sch_multiq.c')
-rw-r--r--net/sched/sch_multiq.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/net/sched/sch_multiq.c b/net/sched/sch_multiq.c
index afb050a735fa..c0466c1840f3 100644
--- a/net/sched/sch_multiq.c
+++ b/net/sched/sch_multiq.c
@@ -31,7 +31,7 @@ struct multiq_sched_data {
31 u16 bands; 31 u16 bands;
32 u16 max_bands; 32 u16 max_bands;
33 u16 curband; 33 u16 curband;
34 struct tcf_proto *filter_list; 34 struct tcf_proto __rcu *filter_list;
35 struct Qdisc **queues; 35 struct Qdisc **queues;
36}; 36};
37 37
@@ -42,10 +42,11 @@ multiq_classify(struct sk_buff *skb, struct Qdisc *sch, int *qerr)
42 struct multiq_sched_data *q = qdisc_priv(sch); 42 struct multiq_sched_data *q = qdisc_priv(sch);
43 u32 band; 43 u32 band;
44 struct tcf_result res; 44 struct tcf_result res;
45 struct tcf_proto *fl = rcu_dereference_bh(q->filter_list);
45 int err; 46 int err;
46 47
47 *qerr = NET_XMIT_SUCCESS | __NET_XMIT_BYPASS; 48 *qerr = NET_XMIT_SUCCESS | __NET_XMIT_BYPASS;
48 err = tc_classify(skb, q->filter_list, &res); 49 err = tc_classify(skb, fl, &res);
49#ifdef CONFIG_NET_CLS_ACT 50#ifdef CONFIG_NET_CLS_ACT
50 switch (err) { 51 switch (err) {
51 case TC_ACT_STOLEN: 52 case TC_ACT_STOLEN:
@@ -388,7 +389,8 @@ static void multiq_walk(struct Qdisc *sch, struct qdisc_walker *arg)
388 } 389 }
389} 390}
390 391
391static struct tcf_proto **multiq_find_tcf(struct Qdisc *sch, unsigned long cl) 392static struct tcf_proto __rcu **multiq_find_tcf(struct Qdisc *sch,
393 unsigned long cl)
392{ 394{
393 struct multiq_sched_data *q = qdisc_priv(sch); 395 struct multiq_sched_data *q = qdisc_priv(sch);
394 396