tcp: make connect() mem charging friendly
[pandora-kernel.git] / net / ipv4 / tcp_output.c
index 0d5a118..a480116 100644 (file)
@@ -1320,21 +1320,21 @@ static void tcp_cwnd_validate(struct sock *sk)
  * when we would be allowed to send the split-due-to-Nagle skb fully.
  */
 static unsigned int tcp_mss_split_point(const struct sock *sk, const struct sk_buff *skb,
-                                       unsigned int mss_now, unsigned int max_segs)
+                                       unsigned int mss_now, unsigned int cwnd)
 {
        const struct tcp_sock *tp = tcp_sk(sk);
-       u32 needed, window, max_len;
+       u32 needed, window, cwnd_len;
 
        window = tcp_wnd_end(tp) - TCP_SKB_CB(skb)->seq;
-       max_len = mss_now * max_segs;
+       cwnd_len = mss_now * cwnd;
 
-       if (likely(max_len <= window && skb != tcp_write_queue_tail(sk)))
-               return max_len;
+       if (likely(cwnd_len <= window && skb != tcp_write_queue_tail(sk)))
+               return cwnd_len;
 
        needed = min(skb->len, window);
 
-       if (max_len <= needed)
-               return max_len;
+       if (cwnd_len <= needed)
+               return cwnd_len;
 
        return needed - needed % mss_now;
 }
@@ -1562,8 +1562,7 @@ static int tcp_tso_should_defer(struct sock *sk, struct sk_buff *skb)
        limit = min(send_win, cong_win);
 
        /* If a full-sized TSO skb can be sent, do it. */
-       if (limit >= min_t(unsigned int, sk->sk_gso_max_size,
-                          sk->sk_gso_max_segs * tp->mss_cache))
+       if (limit >= sk->sk_gso_max_size)
                goto send_now;
 
        /* Middle in queue won't get any more data, full sendable already? */
@@ -1792,9 +1791,7 @@ static int tcp_write_xmit(struct sock *sk, unsigned int mss_now, int nonagle,
                limit = mss_now;
                if (tso_segs > 1 && !tcp_urg_mode(tp))
                        limit = tcp_mss_split_point(sk, skb, mss_now,
-                                                   min_t(unsigned int,
-                                                         cwnd_quota,
-                                                         sk->sk_gso_max_segs));
+                                                   cwnd_quota);
 
                if (skb->len > limit &&
                    unlikely(tso_fragment(sk, skb, limit, mss_now, gfp)))
@@ -2635,13 +2632,10 @@ int tcp_connect(struct sock *sk)
 
        tcp_connect_init(sk);
 
-       buff = alloc_skb_fclone(MAX_TCP_HEADER + 15, sk->sk_allocation);
-       if (unlikely(buff == NULL))
+       buff = sk_stream_alloc_skb(sk, 0, sk->sk_allocation);
+       if (unlikely(!buff))
                return -ENOBUFS;
 
-       /* Reserve space for headers. */
-       skb_reserve(buff, MAX_TCP_HEADER);
-
        tp->snd_nxt = tp->write_seq;
        tcp_init_nondata_skb(buff, tp->write_seq++, TCPHDR_SYN);
        TCP_ECN_send_syn(sk, buff);