Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a18135eb authored by David S. Miller's avatar David S. Miller
Browse files

[IPV6]: Add UDP_MIB_{SND,RCV}BUFERRORS handling.

parent 81aa646c
Loading
Loading
Loading
Loading
+16 −1
Original line number Original line Diff line number Diff line
@@ -345,6 +345,8 @@ static void udpv6_err(struct sk_buff *skb, struct inet6_skb_parm *opt,


static inline int udpv6_queue_rcv_skb(struct sock * sk, struct sk_buff *skb)
static inline int udpv6_queue_rcv_skb(struct sock * sk, struct sk_buff *skb)
{
{
	int rc;

	if (!xfrm6_policy_check(sk, XFRM_POLICY_IN, skb)) {
	if (!xfrm6_policy_check(sk, XFRM_POLICY_IN, skb)) {
		kfree_skb(skb);
		kfree_skb(skb);
		return -1;
		return -1;
@@ -356,7 +358,10 @@ static inline int udpv6_queue_rcv_skb(struct sock * sk, struct sk_buff *skb)
		return 0;
		return 0;
	}
	}


	if (sock_queue_rcv_skb(sk,skb)<0) {
	if ((rc = sock_queue_rcv_skb(sk,skb)) < 0) {
		/* Note that an ENOMEM error is charged twice */
		if (rc == -ENOMEM)
			UDP_INC_STATS_BH(UDP_MIB_RCVBUFERRORS);
		UDP6_INC_STATS_BH(UDP_MIB_INERRORS);
		UDP6_INC_STATS_BH(UDP_MIB_INERRORS);
		kfree_skb(skb);
		kfree_skb(skb);
		return 0;
		return 0;
@@ -857,6 +862,16 @@ static int udpv6_sendmsg(struct kiocb *iocb, struct sock *sk,
		UDP6_INC_STATS_USER(UDP_MIB_OUTDATAGRAMS);
		UDP6_INC_STATS_USER(UDP_MIB_OUTDATAGRAMS);
		return len;
		return len;
	}
	}
	/*
	 * ENOBUFS = no kernel mem, SOCK_NOSPACE = no sndbuf space.  Reporting
	 * ENOBUFS might not be good (it's not tunable per se), but otherwise
	 * we don't have a good statistic (IpOutDiscards but it can be too many
	 * things).  We could add another new stat but at least for now that
	 * seems like overkill.
	 */
	if (err == -ENOBUFS || test_bit(SOCK_NOSPACE, &sk->sk_socket->flags)) {
		UDP_INC_STATS_USER(UDP_MIB_SNDBUFERRORS);
	}
	return err;
	return err;


do_confirm:
do_confirm: