]> git.ipfire.org Git - thirdparty/kernel/linux.git/blobdiff - net/ipv4/af_inet.c
Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next
[thirdparty/kernel/linux.git] / net / ipv4 / af_inet.c
index fafb123f798be346c247dac0f9dc8e498e034349..44564d009e95e6972e5a58c659889a0ed96749d8 100644 (file)
@@ -1072,6 +1072,7 @@ const struct proto_ops inet_stream_ops = {
 #endif
        .splice_eof        = inet_splice_eof,
        .splice_read       = tcp_splice_read,
+       .set_peek_off      = sk_set_peek_off,
        .read_sock         = tcp_read_sock,
        .read_skb          = tcp_read_skb,
        .sendmsg_locked    = tcp_sendmsg_locked,
@@ -1306,8 +1307,8 @@ static int inet_sk_reselect_saddr(struct sock *sk)
 
 int inet_sk_rebuild_header(struct sock *sk)
 {
+       struct rtable *rt = dst_rtable(__sk_dst_check(sk, 0));
        struct inet_sock *inet = inet_sk(sk);
-       struct rtable *rt = (struct rtable *)__sk_dst_check(sk, 0);
        __be32 daddr;
        struct ip_options_rcu *inet_opt;
        struct flowi4 *fl4;
@@ -1481,7 +1482,6 @@ struct sk_buff *inet_gro_receive(struct list_head *head, struct sk_buff *skb)
        struct sk_buff *p;
        unsigned int hlen;
        unsigned int off;
-       unsigned int id;
        int flush = 1;
        int proto;
 
@@ -1507,13 +1507,10 @@ struct sk_buff *inet_gro_receive(struct list_head *head, struct sk_buff *skb)
                goto out;
 
        NAPI_GRO_CB(skb)->proto = proto;
-       id = ntohl(*(__be32 *)&iph->id);
-       flush = (u16)((ntohl(*(__be32 *)iph) ^ skb_gro_len(skb)) | (id & ~IP_DF));
-       id >>= 16;
+       flush = (u16)((ntohl(*(__be32 *)iph) ^ skb_gro_len(skb)) | (ntohl(*(__be32 *)&iph->id) & ~IP_DF));
 
        list_for_each_entry(p, head, list) {
                struct iphdr *iph2;
-               u16 flush_id;
 
                if (!NAPI_GRO_CB(p)->same_flow)
                        continue;
@@ -1530,48 +1527,9 @@ struct sk_buff *inet_gro_receive(struct list_head *head, struct sk_buff *skb)
                        NAPI_GRO_CB(p)->same_flow = 0;
                        continue;
                }
-
-               /* All fields must match except length and checksum. */
-               NAPI_GRO_CB(p)->flush |=
-                       (iph->ttl ^ iph2->ttl) |
-                       (iph->tos ^ iph2->tos) |
-                       ((iph->frag_off ^ iph2->frag_off) & htons(IP_DF));
-
-               NAPI_GRO_CB(p)->flush |= flush;
-
-               /* We need to store of the IP ID check to be included later
-                * when we can verify that this packet does in fact belong
-                * to a given flow.
-                */
-               flush_id = (u16)(id - ntohs(iph2->id));
-
-               /* This bit of code makes it much easier for us to identify
-                * the cases where we are doing atomic vs non-atomic IP ID
-                * checks.  Specifically an atomic check can return IP ID
-                * values 0 - 0xFFFF, while a non-atomic check can only
-                * return 0 or 0xFFFF.
-                */
-               if (!NAPI_GRO_CB(p)->is_atomic ||
-                   !(iph->frag_off & htons(IP_DF))) {
-                       flush_id ^= NAPI_GRO_CB(p)->count;
-                       flush_id = flush_id ? 0xFFFF : 0;
-               }
-
-               /* If the previous IP ID value was based on an atomic
-                * datagram we can overwrite the value and ignore it.
-                */
-               if (NAPI_GRO_CB(skb)->is_atomic)
-                       NAPI_GRO_CB(p)->flush_id = flush_id;
-               else
-                       NAPI_GRO_CB(p)->flush_id |= flush_id;
        }
 
-       NAPI_GRO_CB(skb)->is_atomic = !!(iph->frag_off & htons(IP_DF));
        NAPI_GRO_CB(skb)->flush |= flush;
-       skb_set_network_header(skb, off);
-       /* The above will be needed by the transport layer if there is one
-        * immediately following this IP hdr.
-        */
        NAPI_GRO_CB(skb)->inner_network_offset = off;
 
        /* Note : No need to call skb_gro_postpull_rcsum() here,