summaryrefslogtreecommitdiffstats
path: root/net/mpls
diff options
context:
space:
mode:
authorChristoph Paasch <cpaasch@apple.com>2024-03-06 19:11:17 +0100
committerJakub Kicinski <kuba@kernel.org>2024-03-08 05:42:13 +0100
commit8edbd3960150ee7dd7a2857bd9a5cf14906facc2 (patch)
tree85d480f4f73234cf604802a01de1a3df8664b031 /net/mpls
parentnet: dsa: Leverage core stats allocator (diff)
downloadlinux-8edbd3960150ee7dd7a2857bd9a5cf14906facc2.tar.xz
linux-8edbd3960150ee7dd7a2857bd9a5cf14906facc2.zip
mpls: Do not orphan the skb
We observed that TCP-pacing was falling back to the TCP-layer pacing instead of utilizing sch_fq for the pacing. This causes significant CPU-usage due to the hrtimer running on a per-TCP-connection basis. The issue is that mpls_xmit() calls skb_orphan() and thus sets skb->sk to NULL. Which implies that many of the goodies of TCP won't work. Pacing falls back to TCP-layer pacing. TCP Small Queues does not work, ... It is safe to remove this call to skb_orphan() in mpls_xmit() as there really is not reason for it to be there. It appears that this call to skb_orphan comes from the very initial implementation of MPLS. Cc: Roopa Prabhu <roopa@nvidia.com> Reported-by: Craig Taylor <cmtaylor@apple.com> Signed-off-by: Christoph Paasch <cpaasch@apple.com> Link: https://lore.kernel.org/r/20240306181117.77419-1-cpaasch@apple.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'net/mpls')
-rw-r--r--net/mpls/mpls_iptunnel.c2
1 files changed, 0 insertions, 2 deletions
diff --git a/net/mpls/mpls_iptunnel.c b/net/mpls/mpls_iptunnel.c
index ef59e25dc482..8fc790f2a01b 100644
--- a/net/mpls/mpls_iptunnel.c
+++ b/net/mpls/mpls_iptunnel.c
@@ -55,8 +55,6 @@ static int mpls_xmit(struct sk_buff *skb)
out_dev = dst->dev;
net = dev_net(out_dev);
- skb_orphan(skb);
-
if (!mpls_output_possible(out_dev) ||
!dst->lwtstate || skb_warn_if_lro(skb))
goto drop;