···3300 tp->snd_cwnd_stamp = tcp_time_stamp;3301}3302000000000000000000000033033304/* 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);33353336- 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}33023303+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, do3306+ * 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+}33253326/* 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);33133314+ if (tcp_should_expand_sndbuf(sk, tp)) {0003315 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,