diff options
author | Satoru Moriya <satoru.moriya@hds.com> | 2011-06-17 11:58:39 +0000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-06-21 16:06:10 -0700 |
commit | 296f7ea75b45913d5e2067baef0812087e0b6eb9 (patch) | |
tree | 94a5774a525ebb388306a4ae2aef90a0706031f4 /net | |
parent | dec17b74516bb780de75b41e7cfa0072df16bb82 (diff) | |
download | linux-stable-296f7ea75b45913d5e2067baef0812087e0b6eb9.tar.gz linux-stable-296f7ea75b45913d5e2067baef0812087e0b6eb9.tar.bz2 linux-stable-296f7ea75b45913d5e2067baef0812087e0b6eb9.zip |
udp: add tracepoints for queueing skb to rcvbuf
This patch adds a tracepoint to __udp_queue_rcv_skb to get the
return value of ip_queue_rcv_skb. It indicates why kernel drops
a packet at this point.
ip_queue_rcv_skb returns following values in the packet drop case:
rcvbuf is full : -ENOMEM
sk_filter returns error : -EINVAL, -EACCESS, -ENOMEM, etc.
__sk_mem_schedule returns error: -ENOBUF
Signed-off-by: Satoru Moriya <satoru.moriya@hds.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
-rw-r--r-- | net/core/net-traces.c | 1 | ||||
-rw-r--r-- | net/ipv4/udp.c | 2 |
2 files changed, 3 insertions, 0 deletions
diff --git a/net/core/net-traces.c b/net/core/net-traces.c index 7f1bb2aba03b..13aab64520ad 100644 --- a/net/core/net-traces.c +++ b/net/core/net-traces.c @@ -28,6 +28,7 @@ #include <trace/events/skb.h> #include <trace/events/net.h> #include <trace/events/napi.h> +#include <trace/events/udp.h> EXPORT_TRACEPOINT_SYMBOL_GPL(kfree_skb); diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c index abca870d8ff6..37aa9bf8d382 100644 --- a/net/ipv4/udp.c +++ b/net/ipv4/udp.c @@ -105,6 +105,7 @@ #include <net/route.h> #include <net/checksum.h> #include <net/xfrm.h> +#include <trace/events/udp.h> #include "udp_impl.h" struct udp_table udp_table __read_mostly; @@ -1363,6 +1364,7 @@ static int __udp_queue_rcv_skb(struct sock *sk, struct sk_buff *skb) is_udplite); UDP_INC_STATS_BH(sock_net(sk), UDP_MIB_INERRORS, is_udplite); kfree_skb(skb); + trace_udp_fail_queue_rcv_skb(rc, sk); return -1; } |