net: sched: tbf: handle GSO_BY_FRAGS case in enqueue
tbf_enqueue() checks the size of a packet before enqueuing it. However, the GSO size check does not consider the GSO_BY_FRAGS case, and so will drop GSO SCTP packets, causing a massive drop in throughput. Use skb_gso_validate_mac_len() instead, as it does consider that case. Signed-off-by: Daniel Axtens <dja@axtens.net> Reviewed-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
779b7931b2
commit
ee78bbef8d
|
@ -188,7 +188,8 @@ static int tbf_enqueue(struct sk_buff *skb, struct Qdisc *sch,
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (qdisc_pkt_len(skb) > q->max_size) {
|
if (qdisc_pkt_len(skb) > q->max_size) {
|
||||||
if (skb_is_gso(skb) && skb_gso_mac_seglen(skb) <= q->max_size)
|
if (skb_is_gso(skb) &&
|
||||||
|
skb_gso_validate_mac_len(skb, q->max_size))
|
||||||
return tbf_segment(skb, sch, to_free);
|
return tbf_segment(skb, sch, to_free);
|
||||||
return qdisc_drop(skb, sch, to_free);
|
return qdisc_drop(skb, sch, to_free);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue