|
@@ -4611,8 +4611,10 @@ int tcp_send_rcvq(struct sock *sk, struct msghdr *msg, size_t size)
|
|
|
skb->data_len = data_len;
|
|
|
skb->len = size;
|
|
|
|
|
|
- if (tcp_try_rmem_schedule(sk, skb, skb->truesize))
|
|
|
+ if (tcp_try_rmem_schedule(sk, skb, skb->truesize)) {
|
|
|
+ NET_INC_STATS(sock_net(sk), LINUX_MIB_TCPRCVQDROP);
|
|
|
goto err_free;
|
|
|
+ }
|
|
|
|
|
|
err = skb_copy_datagram_from_iter(skb, 0, &msg->msg_iter, size);
|
|
|
if (err)
|
|
@@ -4677,8 +4679,10 @@ static void tcp_data_queue(struct sock *sk, struct sk_buff *skb)
|
|
|
queue_and_out:
|
|
|
if (skb_queue_len(&sk->sk_receive_queue) == 0)
|
|
|
sk_forced_mem_schedule(sk, skb->truesize);
|
|
|
- else if (tcp_try_rmem_schedule(sk, skb, skb->truesize))
|
|
|
+ else if (tcp_try_rmem_schedule(sk, skb, skb->truesize)) {
|
|
|
+ NET_INC_STATS(sock_net(sk), LINUX_MIB_TCPRCVQDROP);
|
|
|
goto drop;
|
|
|
+ }
|
|
|
|
|
|
eaten = tcp_queue_rcv(sk, skb, 0, &fragstolen);
|
|
|
tcp_rcv_nxt_update(tp, TCP_SKB_CB(skb)->end_seq);
|