[TCP]: Break out send buffer expansion test.

This makes it easier to understand, and allows easier
tweaking of the heuristic later on.

Signed-off-by: David S. Miller <davem@davemloft.net>

+23 -4
+23 -4
net/ipv4/tcp_input.c
··· 3300 tp->snd_cwnd_stamp = tcp_time_stamp; 3301 } 3302 3303 3304 /* When incoming ACK allowed to free some skb from write_queue, 3305 * we remember this event in flag SOCK_QUEUE_SHRUNK and wake up socket ··· 3333 { 3334 struct tcp_sock *tp = tcp_sk(sk); 3335 3336 - if (tp->packets_out < tp->snd_cwnd && 3337 - !(sk->sk_userlocks & SOCK_SNDBUF_LOCK) && 3338 - !tcp_memory_pressure && 3339 - atomic_read(&tcp_memory_allocated) < sysctl_tcp_mem[0]) { 3340 int sndmem = max_t(u32, tp->rx_opt.mss_clamp, tp->mss_cache_std) + 3341 MAX_TCP_HEADER + 16 + sizeof(struct sk_buff), 3342 demanded = max_t(unsigned int, tp->snd_cwnd,
··· 3300 tp->snd_cwnd_stamp = tcp_time_stamp; 3301 } 3302 3303 + static inline int tcp_should_expand_sndbuf(struct sock *sk, struct tcp_sock *tp) 3304 + { 3305 + /* If the user specified a specific send buffer setting, do 3306 + * not modify it. 3307 + */ 3308 + if (sk->sk_userlocks & SOCK_SNDBUF_LOCK) 3309 + return 0; 3310 + 3311 + /* If we are under global TCP memory pressure, do not expand. */ 3312 + if (tcp_memory_pressure) 3313 + return 0; 3314 + 3315 + /* If we are under soft global TCP memory pressure, do not expand. */ 3316 + if (atomic_read(&tcp_memory_allocated) >= sysctl_tcp_mem[0]) 3317 + return 0; 3318 + 3319 + /* If we filled the congestion window, do not expand. */ 3320 + if (tp->packets_out >= tp->snd_cwnd) 3321 + return 0; 3322 + 3323 + return 1; 3324 + } 3325 3326 /* When incoming ACK allowed to free some skb from write_queue, 3327 * we remember this event in flag SOCK_QUEUE_SHRUNK and wake up socket ··· 3311 { 3312 struct tcp_sock *tp = tcp_sk(sk); 3313 3314 + if (tcp_should_expand_sndbuf(sk, tp)) { 3315 int sndmem = max_t(u32, tp->rx_opt.mss_clamp, tp->mss_cache_std) + 3316 MAX_TCP_HEADER + 16 + sizeof(struct sk_buff), 3317 demanded = max_t(unsigned int, tp->snd_cwnd,