From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6094D31A56D for ; Tue, 23 Dec 2025 14:13:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766499191; cv=none; b=TNbf1V6RsjvZ7Wab28vM8JU4mLb9nex5VyyFXZdFwEp8t0nuNkzE9gL2QaIw8xHwPVEpQ5/qywXn4NroAsUj0tBEuEQMB8MKhLr99fiBtLAN1jpben0PKqM9tzY+pTgHKkx+jfANLWxHPYv8xF5bo0j/qT1NC/s3VEuhYrY6xYc= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766499191; c=relaxed/simple; bh=npo998vyw91hSEqyr83yySfdDZvwpdc37NOZXBUKUh8=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=oW3yRwf84pzlx1aJNV8YdDIkKWNWzLsAISj21orXPQZO/zbJEXrVwgPTVSovEk7xeW0zrKFABqXKztIoLcbIaZ4c27EYAwrF61uAs/1HOkXvDCQyC8+o6AGF/qrCBqFZddlhaGcxjSHXxjkcQHTiQocscEObasy5Y6s9gxy4fBI= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=d3xeN2jt; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b=F0C2pMk+; arc=none smtp.client-ip=170.10.133.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="d3xeN2jt"; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b="F0C2pMk+" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1766499188; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Tnt9HsgJu0ejswucQziIfqB6VQPJ8jxDsIeAyekFBzs=; b=d3xeN2jt14zVuX77X5zzF1wLtxvUe5axP23YxadOYblH9akXfPJH+QGVLXYPrGEqZDkBPh UIyPuEqxB3rGASVFJ1IYVPMNJUzG+lRV/hTxOXoObi0VvzC91bB0kFOTOp2dn2emq+9hYJ 53IFjl9kJGqMzAj6LaijGa8dd1JDz44= Received: from mail-wm1-f69.google.com (mail-wm1-f69.google.com [209.85.128.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-20-pVUfq4IrNKKlHjYsfotwTQ-1; Tue, 23 Dec 2025 09:13:03 -0500 X-MC-Unique: pVUfq4IrNKKlHjYsfotwTQ-1 X-Mimecast-MFC-AGG-ID: pVUfq4IrNKKlHjYsfotwTQ_1766499182 Received: by mail-wm1-f69.google.com with SMTP id 5b1f17b1804b1-4779b3749a8so36424685e9.1 for ; Tue, 23 Dec 2025 06:13:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1766499182; x=1767103982; darn=vger.kernel.org; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=Tnt9HsgJu0ejswucQziIfqB6VQPJ8jxDsIeAyekFBzs=; b=F0C2pMk+yxcx7iFZgwfjPAeEhqg9o70zj+y86L89a98ESWuCazF6BtPZ1eSvEqHe4H r6cgQWgQVHOp0bTdyx/X1eA+aQWAAL5+GFOkLke4LlmCP0tHwRsIyRdFrC0E7cWgEUrr 4s1bmRi9M4bFMwxXTy4HEaVPWpk6/23ZrItK5ryShizTjBcTJzuSBdexW1swEU5glIA0 oxhiwiKTgqFvhjQwcuLmTlBoX0nbEKYeyudZXHnxZU+hHa20MNFTXYBJL/9i6wXvTJmp rzA3s0dEYMZ/hQfNhOTWwAo7s7v5eB4XU5PaMFetmFFARRHNYrl63M4VkT0uk4cKgW6i moow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1766499182; x=1767103982; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=Tnt9HsgJu0ejswucQziIfqB6VQPJ8jxDsIeAyekFBzs=; b=chUrNr2IdqWFnvIlxvDISRZUcVEuX+o8d6D4/EDxvJx7GHWw0gCXIoEqau5qotjeBM r/Z5FI4PTaqkXH1yY3JDzPy1IH8492zPhLPoRIbxet2xfuZISUd2oZIOrKoJxw2caCZP Ojz9XxnDjPrFHWF8qhK3D80zuRvYIszeCyLW+VE7nMPtL9GOPtmS0j4TslO0CuBvrGsu vMa+0ofAx0G6aWW3WIe35KwaPW55w4KsZ+2WSDV21RAGQG5N/GbTgErnOqS/e2S3oRG6 shAC5W3tXa4XPddZx1hQlP5VPvXB0qhhx0wcvT6t2zuSAZULqbw2P1ANsD/y2EV7FyAI fpsg== X-Forwarded-Encrypted: i=1; AJvYcCXLTM+7qUA3azNAxJP6G/tMusTH/i77MuMv1qi/X5IPvrlDDhmH8TyP9704gpetqGWp4Xz5RW4+Y/sEqD0=@vger.kernel.org X-Gm-Message-State: AOJu0YyPj7yMtJzVI0SBRP9VdLVJjfBkJk97bo6xk4botIv6SwuiCZtN LYagtmjTinmnlIuj2PXEJx12zZ7FUBqZmL0iQyqxc2W7csmDgeIUCpRozPMVxottUPshmAsftkH lA80TELdUomkrPRoTzbHncsiK+6v4OMcxTdvfM73jz3M6TXnOMO2qybXIsGvR+ju+qQ== X-Gm-Gg: AY/fxX5BP0dlQp1j0WfRsMfhrL/erXzbFg0wUXL8+B52GmUgTaEOFRUIUdqrtQY/naQ kvjB4iyo7tauNiUkHLmG+1Ek0UdNLGRweAuy1nbFZjrxg8fy3EMRCZbL1uylr/p1jrnw8Pb2MIo sguHiDK03DOrbJI/TFrAT2tbreNGvs3UHhO/enNLNlGMwcewXimxT1XxeS9kjY7t3oIweaLAQoJ ptwCGxkvQbVRv2da1hIB2alBiEtsydmz+d/pAk6xnF0uINIxHnlCdMCd08AwCTujBQ75Xom62f2 r6TDmD3b1eIDLo2Dua9aVoH0UdFjw/zA5GoOMHO2VDPH2UU1dTuZh3YJQXH+qKwfeBWPx+zpcv2 1x9lxOzIEx6qd X-Received: by 2002:a05:600c:a00b:b0:477:7b9a:bb0a with SMTP id 5b1f17b1804b1-47d1957e4e0mr139227705e9.21.1766499181637; Tue, 23 Dec 2025 06:13:01 -0800 (PST) X-Google-Smtp-Source: AGHT+IGd2F5z4wbLe3efZdpRSf3+bxZeFuR7kdHFUh/07zOmiOvBJ9uVUehgrpT1q45jZN+DWyz2Gg== X-Received: by 2002:a05:600c:a00b:b0:477:7b9a:bb0a with SMTP id 5b1f17b1804b1-47d1957e4e0mr139227375e9.21.1766499181248; Tue, 23 Dec 2025 06:13:01 -0800 (PST) Received: from [192.168.88.32] ([216.128.11.164]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-47d192e88f5sm238919555e9.0.2025.12.23.06.12.59 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 23 Dec 2025 06:13:00 -0800 (PST) Message-ID: Date: Tue, 23 Dec 2025 15:12:58 +0100 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH] net: fix segmentation of forwarding fraglist GRO To: Jibin Zhang , Eric Dumazet , Neal Cardwell , Kuniyuki Iwashima , "David S . Miller" , David Ahern , Jakub Kicinski , Simon Horman , Matthias Brugger , AngeloGioacchino Del Regno , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org Cc: wsd_upstream@mediatek.com, shiming.cheng@mediatek.com, defa.li@mediatek.com References: <20251217035548.8104-1-jibin.zhang@mediatek.com> Content-Language: en-US From: Paolo Abeni In-Reply-To: <20251217035548.8104-1-jibin.zhang@mediatek.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit On 12/17/25 4:55 AM, Jibin Zhang wrote: > This patch enhances GSO segment checks by verifying the presence > of frag_list and protocol consistency, addressing low throughput > issues on IPv4 servers when used as hotspots > > Specifically, it fixes a bug in GSO segmentation when forwarding > GRO packets with frag_list. The function skb_segment_list cannot > correctly process GRO skbs converted by XLAT, because XLAT only > converts the header of the head skb. As a result, skbs in the > frag_list may remain unconverted, leading to protocol > inconsistencies and reduced throughput. > > To resolve this, the patch uses skb_segment to handle forwarded > packets converted by XLAT, ensuring that all fragments are > properly converted and segmented. > > Signed-off-by: Jibin Zhang This looks like a fix, it should target the 'net' tree and include a suitable Fixes tag. > --- > net/ipv4/tcp_offload.c | 3 ++- > net/ipv4/udp_offload.c | 3 ++- > 2 files changed, 4 insertions(+), 2 deletions(-) > > diff --git a/net/ipv4/tcp_offload.c b/net/ipv4/tcp_offload.c > index fdda18b1abda..162a384a15bb 100644 > --- a/net/ipv4/tcp_offload.c > +++ b/net/ipv4/tcp_offload.c > @@ -104,7 +104,8 @@ static struct sk_buff *tcp4_gso_segment(struct sk_buff *skb, > if (!pskb_may_pull(skb, sizeof(struct tcphdr))) > return ERR_PTR(-EINVAL); > > - if (skb_shinfo(skb)->gso_type & SKB_GSO_FRAGLIST) { > + if ((skb_shinfo(skb)->gso_type & SKB_GSO_FRAGLIST) && skb_has_frag_list(skb) && > + (skb->protocol == skb_shinfo(skb)->frag_list->protocol)) { > struct tcphdr *th = tcp_hdr(skb); > > if (skb_pagelen(skb) - th->doff * 4 == skb_shinfo(skb)->gso_size) > diff --git a/net/ipv4/udp_offload.c b/net/ipv4/udp_offload.c > index 19d0b5b09ffa..704fb32d10d7 100644 > --- a/net/ipv4/udp_offload.c > +++ b/net/ipv4/udp_offload.c > @@ -512,7 +512,8 @@ struct sk_buff *__udp_gso_segment(struct sk_buff *gso_skb, > return NULL; > } > > - if (skb_shinfo(gso_skb)->gso_type & SKB_GSO_FRAGLIST) { > + if ((skb_shinfo(gso_skb)->gso_type & SKB_GSO_FRAGLIST) && skb_has_frag_list(gso_skb) && > + (gso_skb->protocol == skb_shinfo(gso_skb)->frag_list->protocol)) { > /* Detect modified geometry and pass those to skb_segment. */ > if (skb_pagelen(gso_skb) - sizeof(*uh) == skb_shinfo(gso_skb)->gso_size) > return __udp_gso_segment_list(gso_skb, features, is_ipv6); I guess checks should be needed for ipv6. Also it looks like this skips the CSUM_PARTIAL preparation, and possibly break csum offload. Additionally I don't like the ever increasing stack of hacks needed to let GSO_FRAGLIST operate in the most diverse setups, the simpler fix would be disabling such aggregation. /P