Skip to content

Commit

Permalink
udp6: cleanup stats accounting in recvmsg()
Browse files Browse the repository at this point in the history
In the udp6 code path, we needed multiple tests to select the correct
mib to be updated. Since we touch at least a counter at each iteration,
it's convenient to use the recently introduced __UDPX_MIB() helper once
and remove some code duplication.

Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Paolo Abeni authored and davem330 committed Nov 10, 2018
1 parent 560f1ba commit 029a374
Showing 1 changed file with 7 additions and 25 deletions.
32 changes: 7 additions & 25 deletions net/ipv6/udp.c
Original file line number Diff line number Diff line change
Expand Up @@ -326,6 +326,7 @@ int udpv6_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
int err;
int is_udplite = IS_UDPLITE(sk);
bool checksum_valid = false;
struct udp_mib *mib;
int is_udp4;

if (flags & MSG_ERRQUEUE)
Expand All @@ -349,6 +350,7 @@ int udpv6_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
msg->msg_flags |= MSG_TRUNC;

is_udp4 = (skb->protocol == htons(ETH_P_IP));
mib = __UDPX_MIB(sk, is_udp4);

/*
* If checksum is needed at all, try to do it while copying the
Expand Down Expand Up @@ -377,24 +379,13 @@ int udpv6_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
if (unlikely(err)) {
if (!peeked) {
atomic_inc(&sk->sk_drops);
if (is_udp4)
UDP_INC_STATS(sock_net(sk), UDP_MIB_INERRORS,
is_udplite);
else
UDP6_INC_STATS(sock_net(sk), UDP_MIB_INERRORS,
is_udplite);
SNMP_INC_STATS(mib, UDP_MIB_INERRORS);
}
kfree_skb(skb);
return err;
}
if (!peeked) {
if (is_udp4)
UDP_INC_STATS(sock_net(sk), UDP_MIB_INDATAGRAMS,
is_udplite);
else
UDP6_INC_STATS(sock_net(sk), UDP_MIB_INDATAGRAMS,
is_udplite);
}
if (!peeked)
SNMP_INC_STATS(mib, UDP_MIB_INDATAGRAMS);

sock_recv_ts_and_drops(msg, sk, skb);

Expand Down Expand Up @@ -443,17 +434,8 @@ int udpv6_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
csum_copy_err:
if (!__sk_queue_drop_skb(sk, &udp_sk(sk)->reader_queue, skb, flags,
udp_skb_destructor)) {
if (is_udp4) {
UDP_INC_STATS(sock_net(sk),
UDP_MIB_CSUMERRORS, is_udplite);
UDP_INC_STATS(sock_net(sk),
UDP_MIB_INERRORS, is_udplite);
} else {
UDP6_INC_STATS(sock_net(sk),
UDP_MIB_CSUMERRORS, is_udplite);
UDP6_INC_STATS(sock_net(sk),
UDP_MIB_INERRORS, is_udplite);
}
SNMP_INC_STATS(mib, UDP_MIB_CSUMERRORS);
SNMP_INC_STATS(mib, UDP_MIB_INERRORS);
}
kfree_skb(skb);

Expand Down

0 comments on commit 029a374

Please sign in to comment.