From: Daniel Axtens <d...@axtens.net> Date: Mon, 5 Feb 2018 15:02:06 +1100
> 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 <d...@axtens.net> > > --- > > skb_gso_validate_mac_len() is an out-of-line call, but so is > skb_gso_mac_seglen(), so this is slower but not much slower. I > will send a patch to make the skb_gso_validate_* functions > inline-able shortly. > > Also, GSO_BY_FRAGS considered harmful - I'm pretty sure this is > not the only place it causes issues. > > v2: put S-o-b in the right spot, thanks Andrew Donnellan It's not good that our GSO helpers are not universal, and do not properly handle all kinds of GSO encodings the kernel can produce. Like you said this problem probably exists elsewhere. Therefore, I would much rather you fix the helpers to handle GSO_BY_FRAGS properly.