diff options
Diffstat (limited to 'net/ipv4/tcp_output.c')
-rw-r--r-- | net/ipv4/tcp_output.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index 44df1db726a3..743016baa048 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c | |||
@@ -465,7 +465,7 @@ static int tcp_transmit_skb(struct sock *sk, struct sk_buff *skb, int clone_it, | |||
465 | TCP_INC_STATS(TCP_MIB_OUTSEGS); | 465 | TCP_INC_STATS(TCP_MIB_OUTSEGS); |
466 | 466 | ||
467 | err = icsk->icsk_af_ops->queue_xmit(skb, 0); | 467 | err = icsk->icsk_af_ops->queue_xmit(skb, 0); |
468 | if (unlikely(err <= 0)) | 468 | if (likely(err <= 0)) |
469 | return err; | 469 | return err; |
470 | 470 | ||
471 | tcp_enter_cwr(sk); | 471 | tcp_enter_cwr(sk); |
@@ -533,6 +533,7 @@ int tcp_fragment(struct sock *sk, struct sk_buff *skb, u32 len, unsigned int mss | |||
533 | struct tcp_sock *tp = tcp_sk(sk); | 533 | struct tcp_sock *tp = tcp_sk(sk); |
534 | struct sk_buff *buff; | 534 | struct sk_buff *buff; |
535 | int nsize, old_factor; | 535 | int nsize, old_factor; |
536 | int nlen; | ||
536 | u16 flags; | 537 | u16 flags; |
537 | 538 | ||
538 | BUG_ON(len > skb->len); | 539 | BUG_ON(len > skb->len); |
@@ -552,8 +553,10 @@ int tcp_fragment(struct sock *sk, struct sk_buff *skb, u32 len, unsigned int mss | |||
552 | if (buff == NULL) | 553 | if (buff == NULL) |
553 | return -ENOMEM; /* We'll just try again later. */ | 554 | return -ENOMEM; /* We'll just try again later. */ |
554 | 555 | ||
555 | buff->truesize = skb->len - len; | 556 | sk_charge_skb(sk, buff); |
556 | skb->truesize -= buff->truesize; | 557 | nlen = skb->len - len - nsize; |
558 | buff->truesize += nlen; | ||
559 | skb->truesize -= nlen; | ||
557 | 560 | ||
558 | /* Correct the sequence numbers. */ | 561 | /* Correct the sequence numbers. */ |
559 | TCP_SKB_CB(buff)->seq = TCP_SKB_CB(skb)->seq + len; | 562 | TCP_SKB_CB(buff)->seq = TCP_SKB_CB(skb)->seq + len; |
@@ -1039,7 +1042,8 @@ static int tso_fragment(struct sock *sk, struct sk_buff *skb, unsigned int len, | |||
1039 | if (unlikely(buff == NULL)) | 1042 | if (unlikely(buff == NULL)) |
1040 | return -ENOMEM; | 1043 | return -ENOMEM; |
1041 | 1044 | ||
1042 | buff->truesize = nlen; | 1045 | sk_charge_skb(sk, buff); |
1046 | buff->truesize += nlen; | ||
1043 | skb->truesize -= nlen; | 1047 | skb->truesize -= nlen; |
1044 | 1048 | ||
1045 | /* Correct the sequence numbers. */ | 1049 | /* Correct the sequence numbers. */ |