From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pl0-f65.google.com ([209.85.160.65]:38048 "EHLO mail-pl0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752933AbeB0NI1 (ORCPT ); Tue, 27 Feb 2018 08:08:27 -0500 Received: by mail-pl0-f65.google.com with SMTP id d4so11317080pll.5 for ; Tue, 27 Feb 2018 05:08:27 -0800 (PST) From: Daniel Axtens To: netdev@vger.kernel.org Cc: Daniel Axtens Subject: [PATCH 2/6] net: sched: tbf: handle GSO_BY_FRAGS case in enqueue Date: Wed, 28 Feb 2018 00:04:03 +1100 Message-Id: <20180227130407.22498-3-dja@axtens.net> In-Reply-To: <20180227130407.22498-1-dja@axtens.net> References: <20180227130407.22498-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