===== net/ipv4/tcp_output.c 1.75 vs edited ===== --- 1.75/net/ipv4/tcp_output.c 2004-12-29 05:22:40 +11:00 +++ edited/net/ipv4/tcp_output.c 2005-01-15 09:43:48 +11:00 @@ -750,9 +750,21 @@ tcp_snd_test(tp, skb, mss_now, tcp_skb_is_last(sk, skb) ? nonagle : TCP_NAGLE_PUSH)) { + unsigned int len, used; + if (skb->len > mss_now) { if (tcp_fragment(sk, skb, mss_now)) break; + } + + len = skb_netsize(skb); + used = skb->data_len + (skb->end - skb->head); + if (len > used) { + len -= used; + skb->truesize -= len; + sk->sk_queue_shrunk = 1; + sk->sk_wmem_queued -= len; + sk->sk_forward_alloc += len; } TCP_SKB_CB(skb)->when = tcp_time_stamp;