Handle act_api classification results.
The ATM scheduler behaves slightly different than other schedulers
in that it only handles policer results for successful classifications,
this behaviour is retained for the act_api case.
Signed-off-by: Patrick McHardy <kaber@trash.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
                if (flow->vcc)
                        ATM_SKB(skb)->atm_options = flow->vcc->atm_options;
                /*@@@ looks good ... but it's not supposed to work :-) */
-#ifdef CONFIG_NET_CLS_POLICE
+#ifdef CONFIG_NET_CLS_ACT
+               switch (result) {
+               case TC_ACT_QUEUED:
+               case TC_ACT_STOLEN:
+                       kfree_skb(skb);
+                       return NET_XMIT_SUCCESS;
+               case TC_ACT_SHOT:
+                       kfree_skb(skb);
+                       goto drop;
+               }
+#elif defined(CONFIG_NET_CLS_POLICE)
                switch (result) {
                case TC_POLICE_SHOT:
                        kfree_skb(skb);
-                       break;
+                       goto drop;
                case TC_POLICE_RECLASSIFY:
                        if (flow->excess)
                                flow = flow->excess;
                }
 #endif
        }
-       if (
-#ifdef CONFIG_NET_CLS_POLICE
-                  result == TC_POLICE_SHOT ||
-#endif
-                  (ret = flow->q->enqueue(skb, flow->q)) != 0) {
+       if ((ret = flow->q->enqueue(skb, flow->q)) != 0) {
+drop: __maybe_unused
                sch->qstats.drops++;
                if (flow)
                        flow->qstats.drops++;