diff options
author | Satoru Moriya <satoru.moriya@hds.com> | 2011-06-17 14:00:03 +0200 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-06-22 01:06:10 +0200 |
commit | 3847ce32aea9fdf56022de132000e8cf139042eb (patch) | |
tree | 02edbf97518be8af9a1ce978f7e9fcefdc7e0db1 /net/core | |
parent | udp: add tracepoints for queueing skb to rcvbuf (diff) | |
download | linux-3847ce32aea9fdf56022de132000e8cf139042eb.tar.xz linux-3847ce32aea9fdf56022de132000e8cf139042eb.zip |
core: add tracepoints for queueing skb to rcvbuf
This patch adds 2 tracepoints to get a status of a socket receive queue
and related parameter.
One tracepoint is added to sock_queue_rcv_skb. It records rcvbuf size
and its usage. The other tracepoint is added to __sk_mem_schedule and
it records limitations of memory for sockets and current usage.
By using these tracepoints we're able to know detailed reason why kernel
drop the packet.
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/core')
-rw-r--r-- | net/core/net-traces.c | 1 | ||||
-rw-r--r-- | net/core/sock.c | 5 |
2 files changed, 6 insertions, 0 deletions
diff --git a/net/core/net-traces.c b/net/core/net-traces.c index 13aab64520ad..52380b1d552a 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/sock.h> #include <trace/events/udp.h> EXPORT_TRACEPOINT_SYMBOL_GPL(kfree_skb); diff --git a/net/core/sock.c b/net/core/sock.c index 6e819780c232..76c403146750 100644 --- a/net/core/sock.c +++ b/net/core/sock.c @@ -128,6 +128,8 @@ #include <linux/filter.h> +#include <trace/events/sock.h> + #ifdef CONFIG_INET #include <net/tcp.h> #endif @@ -292,6 +294,7 @@ int sock_queue_rcv_skb(struct sock *sk, struct sk_buff *skb) if (atomic_read(&sk->sk_rmem_alloc) + skb->truesize >= (unsigned)sk->sk_rcvbuf) { atomic_inc(&sk->sk_drops); + trace_sock_rcvqueue_full(sk, skb); return -ENOMEM; } @@ -1736,6 +1739,8 @@ suppress_allocation: return 1; } + trace_sock_exceed_buf_limit(sk, prot, allocated); + /* Alas. Undo changes. */ sk->sk_forward_alloc -= amt * SK_MEM_QUANTUM; atomic_long_sub(amt, prot->memory_allocated); |