|
@@ -577,7 +577,7 @@ int tcp_fragment(struct sock *sk, struct sk_buff *skb, u32 len, unsigned int mss
|
|
TCP_SKB_CB(buff)->sacked = TCP_SKB_CB(skb)->sacked;
|
|
TCP_SKB_CB(buff)->sacked = TCP_SKB_CB(skb)->sacked;
|
|
TCP_SKB_CB(skb)->sacked &= ~TCPCB_AT_TAIL;
|
|
TCP_SKB_CB(skb)->sacked &= ~TCPCB_AT_TAIL;
|
|
|
|
|
|
- if (!skb_shinfo(skb)->nr_frags && skb->ip_summed != CHECKSUM_HW) {
|
|
|
|
|
|
+ if (!skb_shinfo(skb)->nr_frags && skb->ip_summed != CHECKSUM_PARTIAL) {
|
|
/* Copy and checksum data tail into the new buffer. */
|
|
/* Copy and checksum data tail into the new buffer. */
|
|
buff->csum = csum_partial_copy_nocheck(skb->data + len, skb_put(buff, nsize),
|
|
buff->csum = csum_partial_copy_nocheck(skb->data + len, skb_put(buff, nsize),
|
|
nsize, 0);
|
|
nsize, 0);
|
|
@@ -586,7 +586,7 @@ int tcp_fragment(struct sock *sk, struct sk_buff *skb, u32 len, unsigned int mss
|
|
|
|
|
|
skb->csum = csum_block_sub(skb->csum, buff->csum, len);
|
|
skb->csum = csum_block_sub(skb->csum, buff->csum, len);
|
|
} else {
|
|
} else {
|
|
- skb->ip_summed = CHECKSUM_HW;
|
|
|
|
|
|
+ skb->ip_summed = CHECKSUM_PARTIAL;
|
|
skb_split(skb, buff, len);
|
|
skb_split(skb, buff, len);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -689,7 +689,7 @@ int tcp_trim_head(struct sock *sk, struct sk_buff *skb, u32 len)
|
|
__pskb_trim_head(skb, len - skb_headlen(skb));
|
|
__pskb_trim_head(skb, len - skb_headlen(skb));
|
|
|
|
|
|
TCP_SKB_CB(skb)->seq += len;
|
|
TCP_SKB_CB(skb)->seq += len;
|
|
- skb->ip_summed = CHECKSUM_HW;
|
|
|
|
|
|
+ skb->ip_summed = CHECKSUM_PARTIAL;
|
|
|
|
|
|
skb->truesize -= len;
|
|
skb->truesize -= len;
|
|
sk->sk_wmem_queued -= len;
|
|
sk->sk_wmem_queued -= len;
|
|
@@ -1062,7 +1062,7 @@ static int tso_fragment(struct sock *sk, struct sk_buff *skb, unsigned int len,
|
|
/* This packet was never sent out yet, so no SACK bits. */
|
|
/* This packet was never sent out yet, so no SACK bits. */
|
|
TCP_SKB_CB(buff)->sacked = 0;
|
|
TCP_SKB_CB(buff)->sacked = 0;
|
|
|
|
|
|
- buff->ip_summed = skb->ip_summed = CHECKSUM_HW;
|
|
|
|
|
|
+ buff->ip_summed = skb->ip_summed = CHECKSUM_PARTIAL;
|
|
skb_split(skb, buff, len);
|
|
skb_split(skb, buff, len);
|
|
|
|
|
|
/* Fix up tso_factor for both original and new SKB. */
|
|
/* Fix up tso_factor for both original and new SKB. */
|
|
@@ -1206,8 +1206,7 @@ static int tcp_mtu_probe(struct sock *sk)
|
|
TCP_SKB_CB(nskb)->flags = TCPCB_FLAG_ACK;
|
|
TCP_SKB_CB(nskb)->flags = TCPCB_FLAG_ACK;
|
|
TCP_SKB_CB(nskb)->sacked = 0;
|
|
TCP_SKB_CB(nskb)->sacked = 0;
|
|
nskb->csum = 0;
|
|
nskb->csum = 0;
|
|
- if (skb->ip_summed == CHECKSUM_HW)
|
|
|
|
- nskb->ip_summed = CHECKSUM_HW;
|
|
|
|
|
|
+ nskb->ip_summed = skb->ip_summed;
|
|
|
|
|
|
len = 0;
|
|
len = 0;
|
|
while (len < probe_size) {
|
|
while (len < probe_size) {
|
|
@@ -1231,7 +1230,7 @@ static int tcp_mtu_probe(struct sock *sk)
|
|
~(TCPCB_FLAG_FIN|TCPCB_FLAG_PSH);
|
|
~(TCPCB_FLAG_FIN|TCPCB_FLAG_PSH);
|
|
if (!skb_shinfo(skb)->nr_frags) {
|
|
if (!skb_shinfo(skb)->nr_frags) {
|
|
skb_pull(skb, copy);
|
|
skb_pull(skb, copy);
|
|
- if (skb->ip_summed != CHECKSUM_HW)
|
|
|
|
|
|
+ if (skb->ip_summed != CHECKSUM_PARTIAL)
|
|
skb->csum = csum_partial(skb->data, skb->len, 0);
|
|
skb->csum = csum_partial(skb->data, skb->len, 0);
|
|
} else {
|
|
} else {
|
|
__pskb_trim_head(skb, copy);
|
|
__pskb_trim_head(skb, copy);
|
|
@@ -1572,10 +1571,9 @@ static void tcp_retrans_try_collapse(struct sock *sk, struct sk_buff *skb, int m
|
|
|
|
|
|
memcpy(skb_put(skb, next_skb_size), next_skb->data, next_skb_size);
|
|
memcpy(skb_put(skb, next_skb_size), next_skb->data, next_skb_size);
|
|
|
|
|
|
- if (next_skb->ip_summed == CHECKSUM_HW)
|
|
|
|
- skb->ip_summed = CHECKSUM_HW;
|
|
|
|
|
|
+ skb->ip_summed = next_skb->ip_summed;
|
|
|
|
|
|
- if (skb->ip_summed != CHECKSUM_HW)
|
|
|
|
|
|
+ if (skb->ip_summed != CHECKSUM_PARTIAL)
|
|
skb->csum = csum_block_add(skb->csum, next_skb->csum, skb_size);
|
|
skb->csum = csum_block_add(skb->csum, next_skb->csum, skb_size);
|
|
|
|
|
|
/* Update sequence range on original skb. */
|
|
/* Update sequence range on original skb. */
|