Loading net/ipv4/tcp_output.c +20 −19 Original line number Diff line number Diff line Loading @@ -861,7 +861,8 @@ static int tso_fragment(struct sock *sk, struct sk_buff *skb, unsigned int len, u16 flags; /* All of a TSO frame must be composed of paged data. */ BUG_ON(skb->len != skb->data_len); if (skb->len != skb->data_len) return tcp_fragment(sk, skb, len, mss_now); buff = sk_stream_alloc_pskb(sk, 0, 0, GFP_ATOMIC); if (unlikely(buff == NULL)) Loading Loading @@ -974,6 +975,8 @@ static int tcp_write_xmit(struct sock *sk, unsigned int mss_now, int nonagle) sent_pkts = 0; while ((skb = sk->sk_send_head)) { unsigned int limit; tso_segs = tcp_init_tso_segs(sk, skb, mss_now); BUG_ON(!tso_segs); Loading @@ -994,8 +997,9 @@ static int tcp_write_xmit(struct sock *sk, unsigned int mss_now, int nonagle) break; } limit = mss_now; if (tso_segs > 1) { u32 limit = tcp_window_allows(tp, skb, limit = tcp_window_allows(tp, skb, mss_now, cwnd_quota); if (skb->len < limit) { Loading @@ -1004,14 +1008,11 @@ static int tcp_write_xmit(struct sock *sk, unsigned int mss_now, int nonagle) if (trim) limit = skb->len - trim; } if (skb->len > limit) { if (tso_fragment(sk, skb, limit, mss_now)) break; } } else if (unlikely(skb->len > mss_now)) { if (unlikely(tcp_fragment(sk, skb, mss_now, mss_now))) if (skb->len > limit && unlikely(tso_fragment(sk, skb, limit, mss_now))) break; } TCP_SKB_CB(skb)->when = tcp_time_stamp; Loading Loading @@ -1064,10 +1065,13 @@ void tcp_push_one(struct sock *sk, unsigned int mss_now) cwnd_quota = tcp_snd_test(sk, skb, mss_now, TCP_NAGLE_PUSH); if (likely(cwnd_quota)) { unsigned int limit; BUG_ON(!tso_segs); limit = mss_now; if (tso_segs > 1) { u32 limit = tcp_window_allows(tp, skb, limit = tcp_window_allows(tp, skb, mss_now, cwnd_quota); if (skb->len < limit) { Loading @@ -1076,14 +1080,11 @@ void tcp_push_one(struct sock *sk, unsigned int mss_now) if (trim) limit = skb->len - trim; } if (skb->len > limit) { if (unlikely(tso_fragment(sk, skb, limit, mss_now))) return; } } else if (unlikely(skb->len > mss_now)) { if (unlikely(tcp_fragment(sk, skb, mss_now, mss_now))) if (skb->len > limit && unlikely(tso_fragment(sk, skb, limit, mss_now))) return; } /* Send it out now. */ TCP_SKB_CB(skb)->when = tcp_time_stamp; Loading net/ipv6/ip6_input.c +5 −4 Original line number Diff line number Diff line Loading @@ -198,13 +198,14 @@ static inline int ip6_input_finish(struct sk_buff *skb) if (!raw_sk) { if (xfrm6_policy_check(NULL, XFRM_POLICY_IN, skb)) { IP6_INC_STATS_BH(IPSTATS_MIB_INUNKNOWNPROTOS); icmpv6_param_prob(skb, ICMPV6_UNK_NEXTHDR, nhoff); icmpv6_send(skb, ICMPV6_PARAMPROB, ICMPV6_UNK_NEXTHDR, nhoff, skb->dev); } } else { } else IP6_INC_STATS_BH(IPSTATS_MIB_INDELIVERS); kfree_skb(skb); } } rcu_read_unlock(); return 0; Loading net/ipv6/raw.c +2 −0 Original line number Diff line number Diff line Loading @@ -328,6 +328,8 @@ int rawv6_rcv(struct sock *sk, struct sk_buff *skb) if (skb->ip_summed != CHECKSUM_UNNECESSARY) { if (skb->ip_summed == CHECKSUM_HW) { skb_postpull_rcsum(skb, skb->nh.raw, skb->h.raw - skb->nh.raw); skb->ip_summed = CHECKSUM_UNNECESSARY; if (csum_ipv6_magic(&skb->nh.ipv6h->saddr, &skb->nh.ipv6h->daddr, Loading Loading
net/ipv4/tcp_output.c +20 −19 Original line number Diff line number Diff line Loading @@ -861,7 +861,8 @@ static int tso_fragment(struct sock *sk, struct sk_buff *skb, unsigned int len, u16 flags; /* All of a TSO frame must be composed of paged data. */ BUG_ON(skb->len != skb->data_len); if (skb->len != skb->data_len) return tcp_fragment(sk, skb, len, mss_now); buff = sk_stream_alloc_pskb(sk, 0, 0, GFP_ATOMIC); if (unlikely(buff == NULL)) Loading Loading @@ -974,6 +975,8 @@ static int tcp_write_xmit(struct sock *sk, unsigned int mss_now, int nonagle) sent_pkts = 0; while ((skb = sk->sk_send_head)) { unsigned int limit; tso_segs = tcp_init_tso_segs(sk, skb, mss_now); BUG_ON(!tso_segs); Loading @@ -994,8 +997,9 @@ static int tcp_write_xmit(struct sock *sk, unsigned int mss_now, int nonagle) break; } limit = mss_now; if (tso_segs > 1) { u32 limit = tcp_window_allows(tp, skb, limit = tcp_window_allows(tp, skb, mss_now, cwnd_quota); if (skb->len < limit) { Loading @@ -1004,14 +1008,11 @@ static int tcp_write_xmit(struct sock *sk, unsigned int mss_now, int nonagle) if (trim) limit = skb->len - trim; } if (skb->len > limit) { if (tso_fragment(sk, skb, limit, mss_now)) break; } } else if (unlikely(skb->len > mss_now)) { if (unlikely(tcp_fragment(sk, skb, mss_now, mss_now))) if (skb->len > limit && unlikely(tso_fragment(sk, skb, limit, mss_now))) break; } TCP_SKB_CB(skb)->when = tcp_time_stamp; Loading Loading @@ -1064,10 +1065,13 @@ void tcp_push_one(struct sock *sk, unsigned int mss_now) cwnd_quota = tcp_snd_test(sk, skb, mss_now, TCP_NAGLE_PUSH); if (likely(cwnd_quota)) { unsigned int limit; BUG_ON(!tso_segs); limit = mss_now; if (tso_segs > 1) { u32 limit = tcp_window_allows(tp, skb, limit = tcp_window_allows(tp, skb, mss_now, cwnd_quota); if (skb->len < limit) { Loading @@ -1076,14 +1080,11 @@ void tcp_push_one(struct sock *sk, unsigned int mss_now) if (trim) limit = skb->len - trim; } if (skb->len > limit) { if (unlikely(tso_fragment(sk, skb, limit, mss_now))) return; } } else if (unlikely(skb->len > mss_now)) { if (unlikely(tcp_fragment(sk, skb, mss_now, mss_now))) if (skb->len > limit && unlikely(tso_fragment(sk, skb, limit, mss_now))) return; } /* Send it out now. */ TCP_SKB_CB(skb)->when = tcp_time_stamp; Loading
net/ipv6/ip6_input.c +5 −4 Original line number Diff line number Diff line Loading @@ -198,13 +198,14 @@ static inline int ip6_input_finish(struct sk_buff *skb) if (!raw_sk) { if (xfrm6_policy_check(NULL, XFRM_POLICY_IN, skb)) { IP6_INC_STATS_BH(IPSTATS_MIB_INUNKNOWNPROTOS); icmpv6_param_prob(skb, ICMPV6_UNK_NEXTHDR, nhoff); icmpv6_send(skb, ICMPV6_PARAMPROB, ICMPV6_UNK_NEXTHDR, nhoff, skb->dev); } } else { } else IP6_INC_STATS_BH(IPSTATS_MIB_INDELIVERS); kfree_skb(skb); } } rcu_read_unlock(); return 0; Loading
net/ipv6/raw.c +2 −0 Original line number Diff line number Diff line Loading @@ -328,6 +328,8 @@ int rawv6_rcv(struct sock *sk, struct sk_buff *skb) if (skb->ip_summed != CHECKSUM_UNNECESSARY) { if (skb->ip_summed == CHECKSUM_HW) { skb_postpull_rcsum(skb, skb->nh.raw, skb->h.raw - skb->nh.raw); skb->ip_summed = CHECKSUM_UNNECESSARY; if (csum_ipv6_magic(&skb->nh.ipv6h->saddr, &skb->nh.ipv6h->daddr, Loading