tcp_set_skb_tso_segs(sk, skb); 
tcp_set_skb_tso_segs(sk, skb, mss); 
int tcp_write_wakeup(struct sock *sk){	if (sk->sk_state != TCP_CLOSE) {		struct tcp_sock *tp = tcp_sk(sk);		struct sk_buff *skb;		if ((skb = sk->sk_send_head) != NULL &&		    before(TCP_SKB_CB(skb)->seq, tp->snd_una+tp->snd_wnd)) {			int err;			unsigned int mss = tcp_current_mss(sk, 0);			unsigned int seg_size = tp->snd_una+tp->snd_wnd-TCP_SKB_CB(skb)->seq;			if (before(tp->pushed_seq, TCP_SKB_CB(skb)->end_seq))				tp->pushed_seq = TCP_SKB_CB(skb)->end_seq;			/* We are probing the opening of a window			 * but the window size is != 0			 * must have been a result SWS avoidance ( sender )			 */			if (seg_size < TCP_SKB_CB(skb)->end_seq - TCP_SKB_CB(skb)->seq ||			    skb->len > mss) {				seg_size = min(seg_size, mss);				TCP_SKB_CB(skb)->flags |= TCPCB_FLAG_PSH;				if (tcp_fragment(sk, skb, seg_size))					return -1;				/* SWS override triggered forced fragmentation.				 * Disable TSO, the connection is too sick. */				if (sk->sk_route_caps & NETIF_F_TSO) {					sock_set_flag(sk, SOCK_NO_LARGESEND);					sk->sk_route_caps &= ~NETIF_F_TSO;				}			} else if (!tcp_skb_pcount(skb))				tcp_set_skb_tso_segs(sk, skb);			TCP_SKB_CB(skb)->flags |= TCPCB_FLAG_PSH;			TCP_SKB_CB(skb)->when = tcp_time_stamp;			err = tcp_transmit_skb(sk, skb_clone(skb, GFP_ATOMIC));			if (!err) {				update_send_head(sk, tp, skb);			}			return err;		} else {			if (tp->urg_mode &&			    between(tp->snd_up, tp->snd_una+1, tp->snd_una+0xFFFF))				tcp_xmit_probe_skb(sk, TCPCB_URG);			return tcp_xmit_probe_skb(sk, 0);		}	}	return -1;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/846998ae87a80b0fd45b4cf5cf001a159d746f27/tcp_output.c/buggy/net/ipv4/tcp_output.c