diff options
Diffstat (limited to 'net/sched/sch_cake.c')
| -rw-r--r-- | net/sched/sch_cake.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/net/sched/sch_cake.c b/net/sched/sch_cake.c index b910cd5c56f7..73940293700d 100644 --- a/net/sched/sch_cake.c +++ b/net/sched/sch_cake.c | |||
| @@ -1667,7 +1667,7 @@ static s32 cake_enqueue(struct sk_buff *skb, struct Qdisc *sch, | |||
| 1667 | if (skb_is_gso(skb) && q->rate_flags & CAKE_FLAG_SPLIT_GSO) { | 1667 | if (skb_is_gso(skb) && q->rate_flags & CAKE_FLAG_SPLIT_GSO) { |
| 1668 | struct sk_buff *segs, *nskb; | 1668 | struct sk_buff *segs, *nskb; |
| 1669 | netdev_features_t features = netif_skb_features(skb); | 1669 | netdev_features_t features = netif_skb_features(skb); |
| 1670 | unsigned int slen = 0; | 1670 | unsigned int slen = 0, numsegs = 0; |
| 1671 | 1671 | ||
| 1672 | segs = skb_gso_segment(skb, features & ~NETIF_F_GSO_MASK); | 1672 | segs = skb_gso_segment(skb, features & ~NETIF_F_GSO_MASK); |
| 1673 | if (IS_ERR_OR_NULL(segs)) | 1673 | if (IS_ERR_OR_NULL(segs)) |
| @@ -1683,6 +1683,7 @@ static s32 cake_enqueue(struct sk_buff *skb, struct Qdisc *sch, | |||
| 1683 | flow_queue_add(flow, segs); | 1683 | flow_queue_add(flow, segs); |
| 1684 | 1684 | ||
| 1685 | sch->q.qlen++; | 1685 | sch->q.qlen++; |
| 1686 | numsegs++; | ||
| 1686 | slen += segs->len; | 1687 | slen += segs->len; |
| 1687 | q->buffer_used += segs->truesize; | 1688 | q->buffer_used += segs->truesize; |
| 1688 | b->packets++; | 1689 | b->packets++; |
| @@ -1696,7 +1697,7 @@ static s32 cake_enqueue(struct sk_buff *skb, struct Qdisc *sch, | |||
| 1696 | sch->qstats.backlog += slen; | 1697 | sch->qstats.backlog += slen; |
| 1697 | q->avg_window_bytes += slen; | 1698 | q->avg_window_bytes += slen; |
| 1698 | 1699 | ||
| 1699 | qdisc_tree_reduce_backlog(sch, 1, len); | 1700 | qdisc_tree_reduce_backlog(sch, 1-numsegs, len-slen); |
| 1700 | consume_skb(skb); | 1701 | consume_skb(skb); |
| 1701 | } else { | 1702 | } else { |
| 1702 | /* not splitting */ | 1703 | /* not splitting */ |
