Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/hpa/linux...
[powerpc.git] / net / sched / sch_atm.c
index ccee10d..ddc4f2c 100644 (file)
@@ -292,13 +292,12 @@ static int atm_tc_change(struct Qdisc *sch, u32 classid, u32 parent,
                }
        }
        DPRINTK("atm_tc_change: new id %x\n", classid);
-       flow = kmalloc(sizeof(struct atm_flow_data) + hdr_len, GFP_KERNEL);
+       flow = kzalloc(sizeof(struct atm_flow_data) + hdr_len, GFP_KERNEL);
        DPRINTK("atm_tc_change: flow %p\n", flow);
        if (!flow) {
                error = -ENOBUFS;
                goto err_out;
        }
-       memset(flow, 0, sizeof(*flow));
        flow->filter_list = NULL;
        if (!(flow->q = qdisc_create_dflt(sch->dev, &pfifo_qdisc_ops, classid)))
                flow->q = &noop_qdisc;
@@ -396,8 +395,9 @@ static int atm_tc_enqueue(struct sk_buff *skb, struct Qdisc *sch)
            !(flow = (struct atm_flow_data *)atm_tc_get(sch, skb->priority)))
                for (flow = p->flows; flow; flow = flow->next)
                        if (flow->filter_list) {
-                               result = tc_classify(skb, flow->filter_list,
-                                                    &res);
+                               result = tc_classify_compat(skb,
+                                                           flow->filter_list,
+                                                           &res);
                                if (result < 0)
                                        continue;
                                flow = (struct atm_flow_data *)res.class;
@@ -420,27 +420,16 @@ static int atm_tc_enqueue(struct sk_buff *skb, struct Qdisc *sch)
                case TC_ACT_SHOT:
                        kfree_skb(skb);
                        goto drop;
-               }
-#elif defined(CONFIG_NET_CLS_POLICE)
-               switch (result) {
-               case TC_POLICE_SHOT:
-                       kfree_skb(skb);
-                       goto drop;
                case TC_POLICE_RECLASSIFY:
                        if (flow->excess)
                                flow = flow->excess;
-                       else {
+                       else
                                ATM_SKB(skb)->atm_options |= ATM_ATMOPT_CLP;
-                               break;
-                       }
-                       /* fall through */
-               case TC_POLICE_OK:
-                       /* fall through */
-               default:
                        break;
                }
 #endif
        }
+
        if ((ret = flow->q->enqueue(skb, flow->q)) != 0) {
 drop: __maybe_unused
                sch->qstats.drops++;