diff options
Diffstat (limited to 'net/ipv4/tcp_input.c')
-rw-r--r-- | net/ipv4/tcp_input.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index 9c5b3415413f..eecd359595fc 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c | |||
@@ -4611,8 +4611,10 @@ int tcp_send_rcvq(struct sock *sk, struct msghdr *msg, size_t size) | |||
4611 | skb->data_len = data_len; | 4611 | skb->data_len = data_len; |
4612 | skb->len = size; | 4612 | skb->len = size; |
4613 | 4613 | ||
4614 | if (tcp_try_rmem_schedule(sk, skb, skb->truesize)) | 4614 | if (tcp_try_rmem_schedule(sk, skb, skb->truesize)) { |
4615 | NET_INC_STATS(sock_net(sk), LINUX_MIB_TCPRCVQDROP); | ||
4615 | goto err_free; | 4616 | goto err_free; |
4617 | } | ||
4616 | 4618 | ||
4617 | err = skb_copy_datagram_from_iter(skb, 0, &msg->msg_iter, size); | 4619 | err = skb_copy_datagram_from_iter(skb, 0, &msg->msg_iter, size); |
4618 | if (err) | 4620 | if (err) |
@@ -4677,8 +4679,10 @@ static void tcp_data_queue(struct sock *sk, struct sk_buff *skb) | |||
4677 | queue_and_out: | 4679 | queue_and_out: |
4678 | if (skb_queue_len(&sk->sk_receive_queue) == 0) | 4680 | if (skb_queue_len(&sk->sk_receive_queue) == 0) |
4679 | sk_forced_mem_schedule(sk, skb->truesize); | 4681 | sk_forced_mem_schedule(sk, skb->truesize); |
4680 | else if (tcp_try_rmem_schedule(sk, skb, skb->truesize)) | 4682 | else if (tcp_try_rmem_schedule(sk, skb, skb->truesize)) { |
4683 | NET_INC_STATS(sock_net(sk), LINUX_MIB_TCPRCVQDROP); | ||
4681 | goto drop; | 4684 | goto drop; |
4685 | } | ||
4682 | 4686 | ||
4683 | eaten = tcp_queue_rcv(sk, skb, 0, &fragstolen); | 4687 | eaten = tcp_queue_rcv(sk, skb, 0, &fragstolen); |
4684 | tcp_rcv_nxt_update(tp, TCP_SKB_CB(skb)->end_seq); | 4688 | tcp_rcv_nxt_update(tp, TCP_SKB_CB(skb)->end_seq); |