diff options
author | Alexander Duyck <alexander.h.duyck@intel.com> | 2018-05-07 20:08:22 +0200 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2018-05-09 04:30:05 +0200 |
commit | dfec0ee22c0a4488e4f4c764b2720d3096920383 (patch) | |
tree | 42f86b2a8e499b72818c3f3f0a548b1342452e3f /net/ipv4/udp.c | |
parent | dt-bindings: dsa: Remove unnecessary #address/#size-cells (diff) | |
download | linux-dfec0ee22c0a4488e4f4c764b2720d3096920383.tar.xz linux-dfec0ee22c0a4488e4f4c764b2720d3096920383.zip |
udp: Record gso_segs when supporting UDP segmentation offload
We need to record the number of segments that will be generated when this
frame is segmented. The expectation is that if gso_size is set then
gso_segs is set as well. Without this some drivers such as ixgbe get
confused if they attempt to offload this as they record 0 segments for the
entire packet instead of the correct value.
Reviewed-by: Eric Dumazet <edumazet@google.com>
Acked-by: Willem de Bruijn <willemb@google.com>
Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4/udp.c')
-rw-r--r-- | net/ipv4/udp.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c index dd3102a37ef9..e07db83b311e 100644 --- a/net/ipv4/udp.c +++ b/net/ipv4/udp.c @@ -793,6 +793,8 @@ static int udp_send_skb(struct sk_buff *skb, struct flowi4 *fl4, skb_shinfo(skb)->gso_size = cork->gso_size; skb_shinfo(skb)->gso_type = SKB_GSO_UDP_L4; + skb_shinfo(skb)->gso_segs = DIV_ROUND_UP(len - sizeof(uh), + cork->gso_size); goto csum_partial; } |