aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--net/sched/sch_atm.c21
1 files changed, 14 insertions, 7 deletions
diff --git a/net/sched/sch_atm.c b/net/sched/sch_atm.c
index 9b458c403fa0..ccee10dae66d 100644
--- a/net/sched/sch_atm.c
+++ b/net/sched/sch_atm.c
@@ -411,11 +411,21 @@ static int atm_tc_enqueue(struct sk_buff *skb, struct Qdisc *sch)
411 if (flow->vcc) 411 if (flow->vcc)
412 ATM_SKB(skb)->atm_options = flow->vcc->atm_options; 412 ATM_SKB(skb)->atm_options = flow->vcc->atm_options;
413 /*@@@ looks good ... but it's not supposed to work :-) */ 413 /*@@@ looks good ... but it's not supposed to work :-) */
414#ifdef CONFIG_NET_CLS_POLICE 414#ifdef CONFIG_NET_CLS_ACT
415 switch (result) {
416 case TC_ACT_QUEUED:
417 case TC_ACT_STOLEN:
418 kfree_skb(skb);
419 return NET_XMIT_SUCCESS;
420 case TC_ACT_SHOT:
421 kfree_skb(skb);
422 goto drop;
423 }
424#elif defined(CONFIG_NET_CLS_POLICE)
415 switch (result) { 425 switch (result) {
416 case TC_POLICE_SHOT: 426 case TC_POLICE_SHOT:
417 kfree_skb(skb); 427 kfree_skb(skb);
418 break; 428 goto drop;
419 case TC_POLICE_RECLASSIFY: 429 case TC_POLICE_RECLASSIFY:
420 if (flow->excess) 430 if (flow->excess)
421 flow = flow->excess; 431 flow = flow->excess;
@@ -431,11 +441,8 @@ static int atm_tc_enqueue(struct sk_buff *skb, struct Qdisc *sch)
431 } 441 }
432#endif 442#endif
433 } 443 }
434 if ( 444 if ((ret = flow->q->enqueue(skb, flow->q)) != 0) {
435#ifdef CONFIG_NET_CLS_POLICE 445drop: __maybe_unused
436 result == TC_POLICE_SHOT ||
437#endif
438 (ret = flow->q->enqueue(skb, flow->q)) != 0) {
439 sch->qstats.drops++; 446 sch->qstats.drops++;
440 if (flow) 447 if (flow)
441 flow->qstats.drops++; 448 flow->qstats.drops++;