|
@@ -5004,6 +5004,9 @@ static int tcp_prune_queue(struct sock *sk)
|
|
else if (tcp_under_memory_pressure(sk))
|
|
else if (tcp_under_memory_pressure(sk))
|
|
tp->rcv_ssthresh = min(tp->rcv_ssthresh, 4U * tp->advmss);
|
|
tp->rcv_ssthresh = min(tp->rcv_ssthresh, 4U * tp->advmss);
|
|
|
|
|
|
|
|
+ if (atomic_read(&sk->sk_rmem_alloc) <= sk->sk_rcvbuf)
|
|
|
|
+ return 0;
|
|
|
|
+
|
|
tcp_collapse_ofo_queue(sk);
|
|
tcp_collapse_ofo_queue(sk);
|
|
if (!skb_queue_empty(&sk->sk_receive_queue))
|
|
if (!skb_queue_empty(&sk->sk_receive_queue))
|
|
tcp_collapse(sk, &sk->sk_receive_queue, NULL,
|
|
tcp_collapse(sk, &sk->sk_receive_queue, NULL,
|