]> git.baikalelectronics.ru Git - kernel.git/commitdiff
ipv4: update comment to document GSO fragmentation cases.
authorLance Richardson <lrichard@redhat.com>
Wed, 9 Nov 2016 20:04:39 +0000 (15:04 -0500)
committerDavid S. Miller <davem@davemloft.net>
Thu, 10 Nov 2016 17:01:54 +0000 (12:01 -0500)
This is a follow-up to commit 24d05de5f993 ("ipv4: allow local
fragmentation in ip_finish_output_gso()"), updating the comment
documenting cases in which fragmentation is needed for egress
GSO packets.

Suggested-by: Shmulik Ladkani <shmulik.ladkani@gmail.com>
Reviewed-by: Shmulik Ladkani <shmulik.ladkani@gmail.com>
Signed-off-by: Lance Richardson <lrichard@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/ip_output.c

index 9403fa3850be839bd8c25959dc4fcab8486b7f21..105908d841a359bb433621b286398a2821852645 100644 (file)
@@ -244,12 +244,18 @@ static int ip_finish_output_gso(struct net *net, struct sock *sk,
        if (skb_gso_validate_mtu(skb, mtu))
                return ip_finish_output2(net, sk, skb);
 
-       /* Slowpath -  GSO segment length is exceeding the dst MTU.
+       /* Slowpath -  GSO segment length exceeds the egress MTU.
         *
-        * This can happen in two cases:
-        * 1) TCP GRO packet, DF bit not set
-        * 2) skb arrived via virtio-net, we thus get TSO/GSO skbs directly
-        * from host network stack.
+        * This can happen in several cases:
+        *  - Forwarding of a TCP GRO skb, when DF flag is not set.
+        *  - Forwarding of an skb that arrived on a virtualization interface
+        *    (virtio-net/vhost/tap) with TSO/GSO size set by other network
+        *    stack.
+        *  - Local GSO skb transmitted on an NETIF_F_TSO tunnel stacked over an
+        *    interface with a smaller MTU.
+        *  - Arriving GRO skb (or GSO skb in a virtualized environment) that is
+        *    bridged to a NETIF_F_TSO tunnel stacked over an interface with an
+        *    insufficent MTU.
         */
        features = netif_skb_features(skb);
        BUILD_BUG_ON(sizeof(*IPCB(skb)) > SKB_SGO_CB_OFFSET);