]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blobdiff - net/sched/sch_ingress.c
Merge branch 'x86-seccomp-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
[mirror_ubuntu-bionic-kernel.git] / net / sched / sch_ingress.c
index 62871c14e1f93fef31e5795ad2b8ae2f064399a4..eb5b8445fef989c1f331fa1485fa39c649181a82 100644 (file)
@@ -17,7 +17,7 @@
 
 
 struct ingress_qdisc_data {
-       struct tcf_proto        *filter_list;
+       struct tcf_proto __rcu  *filter_list;
 };
 
 /* ------------------------- Class/flow operations ------------------------- */
@@ -46,7 +46,8 @@ static void ingress_walk(struct Qdisc *sch, struct qdisc_walker *walker)
 {
 }
 
-static struct tcf_proto **ingress_find_tcf(struct Qdisc *sch, unsigned long cl)
+static struct tcf_proto __rcu **ingress_find_tcf(struct Qdisc *sch,
+                                                unsigned long cl)
 {
        struct ingress_qdisc_data *p = qdisc_priv(sch);
 
@@ -59,15 +60,16 @@ static int ingress_enqueue(struct sk_buff *skb, struct Qdisc *sch)
 {
        struct ingress_qdisc_data *p = qdisc_priv(sch);
        struct tcf_result res;
+       struct tcf_proto *fl = rcu_dereference_bh(p->filter_list);
        int result;
 
-       result = tc_classify(skb, p->filter_list, &res);
+       result = tc_classify(skb, fl, &res);
 
        qdisc_bstats_update(sch, skb);
        switch (result) {
        case TC_ACT_SHOT:
                result = TC_ACT_SHOT;
-               sch->qstats.drops++;
+               qdisc_qstats_drop(sch);
                break;
        case TC_ACT_STOLEN:
        case TC_ACT_QUEUED: