diff mbox

udp: Add MIB counters for rcvbuferrors

Message ID 1403035982-6548-1-git-send-email-james.leddy@redhat.com
State Changes Requested, archived
Delegated to: David Miller
Headers show

Commit Message

James M Leddy June 17, 2014, 8:13 p.m. UTC
Add MIB counters for rcvbuferrors in UDP to help diagnose problems.

Signed-off-by: James M Leddy <james.leddy@redhat.com>
---
 net/ipv4/udp.c |   13 ++++++++-----
 net/ipv6/udp.c |   15 ++++++++++-----
 2 files changed, 18 insertions(+), 10 deletions(-)

Comments

David Miller June 21, 2014, 10:07 p.m. UTC | #1
From: James M Leddy <james.leddy@redhat.com>

Date: Tue, 17 Jun 2014 16:13:02 -0400

> Add MIB counters for rcvbuferrors in UDP to help diagnose problems.

> 

> Signed-off-by: James M Leddy <james.leddy@redhat.com>


Please compile test your patches:

net/ipv4/udp.c: In function ‘udp_queue_rcv_skb’:
net/ipv4/udp.c:1538:5: error: label ‘csum_error’ used but not defined
make[1]: *** [net/ipv4/udp.o] Error 1
make: *** [net/ipv4/udp.o] Error 2

The encapsulation handling above your changes still use that label.

Besides, I see no reason to replace the goto csum_error; with
doing the counter bump by hand and jumping to "drop".  Especially
since, as per above, there is another code path which can make
use of and thus share that csum_error label code.
James M Leddy June 25, 2014, 9:31 p.m. UTC | #2
On 06/21/2014 06:07 PM, David Miller wrote:
> From: James M Leddy <james.leddy@redhat.com>
> Date: Tue, 17 Jun 2014 16:13:02 -0400
>
>> Add MIB counters for rcvbuferrors in UDP to help diagnose problems.
>>
>> Signed-off-by: James M Leddy <james.leddy@redhat.com>
>
> Please compile test your patches:
>
> net/ipv4/udp.c: In function ‘udp_queue_rcv_skb’:
> net/ipv4/udp.c:1538:5: error: label ‘csum_error’ used but not defined
> make[1]: *** [net/ipv4/udp.o] Error 1
> make: *** [net/ipv4/udp.o] Error 2
>
> The encapsulation handling above your changes still use that label.
>
> Besides, I see no reason to replace the goto csum_error; with
> doing the counter bump by hand and jumping to "drop".  Especially
> since, as per above, there is another code path which can make
> use of and thus share that csum_error label code.

My bad, resending
diff mbox

Patch

diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c
index 4468e1a..8059902 100644
--- a/net/ipv4/udp.c
+++ b/net/ipv4/udp.c
@@ -1542,12 +1542,17 @@  int udp_queue_rcv_skb(struct sock *sk, struct sk_buff *skb)
 	}
 
 	if (rcu_access_pointer(sk->sk_filter) &&
-	    udp_lib_checksum_complete(skb))
-		goto csum_error;
+	    udp_lib_checksum_complete(skb)) {
+		UDP_INC_STATS_BH(sock_net(sk), UDP_MIB_CSUMERRORS, is_udplite);
+		goto drop;
+	}
 
 
-	if (sk_rcvqueues_full(sk, skb, sk->sk_rcvbuf))
+	if (sk_rcvqueues_full(sk, skb, sk->sk_rcvbuf)) {
+		UDP_INC_STATS_BH(sock_net(sk), UDP_MIB_RCVBUFERRORS,
+				 is_udplite);
 		goto drop;
+	}
 
 	rc = 0;
 
@@ -1563,8 +1568,6 @@  int udp_queue_rcv_skb(struct sock *sk, struct sk_buff *skb)
 
 	return rc;
 
-csum_error:
-	UDP_INC_STATS_BH(sock_net(sk), UDP_MIB_CSUMERRORS, is_udplite);
 drop:
 	UDP_INC_STATS_BH(sock_net(sk), UDP_MIB_INERRORS, is_udplite);
 	atomic_inc(&sk->sk_drops);
diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c
index 1e586d9..94ba69c 100644
--- a/net/ipv6/udp.c
+++ b/net/ipv6/udp.c
@@ -666,12 +666,18 @@  int udpv6_queue_rcv_skb(struct sock *sk, struct sk_buff *skb)
 	}
 
 	if (rcu_access_pointer(sk->sk_filter)) {
-		if (udp_lib_checksum_complete(skb))
-			goto csum_error;
+		if (udp_lib_checksum_complete(skb)) {
+			UDP6_INC_STATS_BH(sock_net(sk),
+					  UDP_MIB_CSUMERRORS, is_udplite);
+			goto drop;
+		}
 	}
 
-	if (sk_rcvqueues_full(sk, skb, sk->sk_rcvbuf))
+	if (sk_rcvqueues_full(sk, skb, sk->sk_rcvbuf)) {
+		UDP6_INC_STATS_BH(sock_net(sk),
+				  UDP_MIB_RCVBUFERRORS, is_udplite);
 		goto drop;
+	}
 
 	skb_dst_drop(skb);
 
@@ -686,8 +692,7 @@  int udpv6_queue_rcv_skb(struct sock *sk, struct sk_buff *skb)
 	bh_unlock_sock(sk);
 
 	return rc;
-csum_error:
-	UDP6_INC_STATS_BH(sock_net(sk), UDP_MIB_CSUMERRORS, is_udplite);
+
 drop:
 	UDP6_INC_STATS_BH(sock_net(sk), UDP_MIB_INERRORS, is_udplite);
 	atomic_inc(&sk->sk_drops);