Message ID | 1403035982-6548-1-git-send-email-james.leddy@redhat.com |
---|---|
State | Changes Requested, archived |
Delegated to: | David Miller |
Headers | show |
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.
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 --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);
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(-)