BUG_ON(skb->len != skb->data_len); 
if (skb->len != skb->data_len) return tcp_fragment(sk, skb, len, mss_now); 
static int tso_fragment(struct sock *sk, struct sk_buff *skb, unsigned int len, unsigned int mss_now){	struct sk_buff *buff;	int nlen = skb->len - len;	u16 flags;	/* All of a TSO frame must be composed of paged data.  */	BUG_ON(skb->len != skb->data_len);	buff = sk_stream_alloc_pskb(sk, 0, 0, GFP_ATOMIC);	if (unlikely(buff == NULL))		return -ENOMEM;	buff->truesize = nlen;	skb->truesize -= nlen;	/* Correct the sequence numbers. */	TCP_SKB_CB(buff)->seq = TCP_SKB_CB(skb)->seq + len;	TCP_SKB_CB(buff)->end_seq = TCP_SKB_CB(skb)->end_seq;	TCP_SKB_CB(skb)->end_seq = TCP_SKB_CB(buff)->seq;	/* PSH and FIN should only be set in the second packet. */	flags = TCP_SKB_CB(skb)->flags;	TCP_SKB_CB(skb)->flags = flags & ~(TCPCB_FLAG_FIN|TCPCB_FLAG_PSH);	TCP_SKB_CB(buff)->flags = flags;	/* This packet was never sent out yet, so no SACK bits. */	TCP_SKB_CB(buff)->sacked = 0;	buff->ip_summed = skb->ip_summed = CHECKSUM_HW;	skb_split(skb, buff, len);	/* Fix up tso_factor for both original and new SKB.  */	tcp_set_skb_tso_segs(sk, skb, mss_now);	tcp_set_skb_tso_segs(sk, buff, mss_now);	/* Link BUFF into the send queue. */	skb_header_release(buff);	__skb_append(skb, buff);	return 0;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/35d59efd105b3b7c1b5878dcc9d1749f41f9740f/tcp_output.c/buggy/net/ipv4/tcp_output.c