diff options
Diffstat (limited to 'net/sched/sch_gred.c')
-rw-r--r-- | net/sched/sch_gred.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/net/sched/sch_gred.c b/net/sched/sch_gred.c index 50f184cd7f1f..f7c6c0359ce5 100644 --- a/net/sched/sch_gred.c +++ b/net/sched/sch_gred.c | |||
@@ -219,12 +219,12 @@ gred_enqueue(struct sk_buff *skb, struct Qdisc* sch) | |||
219 | case RED_PROB_MARK: | 219 | case RED_PROB_MARK: |
220 | sch->qstats.overlimits++; | 220 | sch->qstats.overlimits++; |
221 | q->stats.prob_drop++; | 221 | q->stats.prob_drop++; |
222 | goto drop; | 222 | goto congestion_drop; |
223 | 223 | ||
224 | case RED_HARD_MARK: | 224 | case RED_HARD_MARK: |
225 | sch->qstats.overlimits++; | 225 | sch->qstats.overlimits++; |
226 | q->stats.forced_drop++; | 226 | q->stats.forced_drop++; |
227 | goto drop; | 227 | goto congestion_drop; |
228 | } | 228 | } |
229 | 229 | ||
230 | if (q->backlog + skb->len <= q->limit) { | 230 | if (q->backlog + skb->len <= q->limit) { |
@@ -242,6 +242,11 @@ drop: | |||
242 | kfree_skb(skb); | 242 | kfree_skb(skb); |
243 | sch->qstats.drops++; | 243 | sch->qstats.drops++; |
244 | return NET_XMIT_DROP; | 244 | return NET_XMIT_DROP; |
245 | |||
246 | congestion_drop: | ||
247 | kfree_skb(skb); | ||
248 | sch->qstats.drops++; | ||
249 | return NET_XMIT_CN; | ||
245 | } | 250 | } |
246 | 251 | ||
247 | static int | 252 | static int |