From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pg0-f66.google.com ([74.125.83.66]:44898 "EHLO mail-pg0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S966073AbeCAGOP (ORCPT ); Thu, 1 Mar 2018 01:14:15 -0500 Received: by mail-pg0-f66.google.com with SMTP id l4so1933796pgp.11 for ; Wed, 28 Feb 2018 22:14:15 -0800 (PST) From: Daniel Axtens To: netdev@vger.kernel.org Cc: Daniel Axtens Subject: [PATCH v2 2/4] net: sched: tbf: handle GSO_BY_FRAGS case in enqueue Date: Thu, 1 Mar 2018 17:13:38 +1100 Message-Id: <20180301061340.15464-3-dja@axtens.net> In-Reply-To: <20180301061340.15464-1-dja@axtens.net> References: <20180301061340.15464-1-dja@axtens.net> Sender: netdev-owner@vger.kernel.org List-ID: 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 --- net/sched/sch_tbf.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/net/sched/sch_tbf.c b/net/sched/sch_tbf.c index 229172d509cc..03225a8df973 100644 --- a/net/sched/sch_tbf.c +++ b/net/sched/sch_tbf.c @@ -188,7 +188,8 @@ static int tbf_enqueue(struct sk_buff *skb, struct Qdisc *sch, int ret; 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 qdisc_drop(skb, sch, to_free); } -- 2.14.1