diff options
author | Satoru Moriya <satoru.moriya@hds.com> | 2011-06-17 08:00:03 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-06-21 19:06:10 -0400 |
commit | 3847ce32aea9fdf56022de132000e8cf139042eb (patch) | |
tree | 02edbf97518be8af9a1ce978f7e9fcefdc7e0db1 /net/core/sock.c | |
parent | 296f7ea75b45913d5e2067baef0812087e0b6eb9 (diff) |
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/sock.c')
-rw-r--r-- | net/core/sock.c | 5 |
1 files changed, 5 insertions, 0 deletions
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 @@ | |||
128 | 128 | ||
129 | #include <linux/filter.h> | 129 | #include <linux/filter.h> |
130 | 130 | ||
131 | #include <trace/events/sock.h> | ||
132 | |||
131 | #ifdef CONFIG_INET | 133 | #ifdef CONFIG_INET |
132 | #include <net/tcp.h> | 134 | #include <net/tcp.h> |
133 | #endif | 135 | #endif |
@@ -292,6 +294,7 @@ int sock_queue_rcv_skb(struct sock *sk, struct sk_buff *skb) | |||
292 | if (atomic_read(&sk->sk_rmem_alloc) + skb->truesize >= | 294 | if (atomic_read(&sk->sk_rmem_alloc) + skb->truesize >= |
293 | (unsigned)sk->sk_rcvbuf) { | 295 | (unsigned)sk->sk_rcvbuf) { |
294 | atomic_inc(&sk->sk_drops); | 296 | atomic_inc(&sk->sk_drops); |
297 | trace_sock_rcvqueue_full(sk, skb); | ||
295 | return -ENOMEM; | 298 | return -ENOMEM; |
296 | } | 299 | } |
297 | 300 | ||
@@ -1736,6 +1739,8 @@ suppress_allocation: | |||
1736 | return 1; | 1739 | return 1; |
1737 | } | 1740 | } |
1738 | 1741 | ||
1742 | trace_sock_exceed_buf_limit(sk, prot, allocated); | ||
1743 | |||
1739 | /* Alas. Undo changes. */ | 1744 | /* Alas. Undo changes. */ |
1740 | sk->sk_forward_alloc -= amt * SK_MEM_QUANTUM; | 1745 | sk->sk_forward_alloc -= amt * SK_MEM_QUANTUM; |
1741 | atomic_long_sub(amt, prot->memory_allocated); | 1746 | atomic_long_sub(amt, prot->memory_allocated); |