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 | |
| 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')
| -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 @@ | |||
| 28 | #include <trace/events/skb.h> | 28 | #include <trace/events/skb.h> |
| 29 | #include <trace/events/net.h> | 29 | #include <trace/events/net.h> |
| 30 | #include <trace/events/napi.h> | 30 | #include <trace/events/napi.h> |
| 31 | #include <trace/events/sock.h> | ||
| 31 | #include <trace/events/udp.h> | 32 | #include <trace/events/udp.h> |
| 32 | 33 | ||
| 33 | EXPORT_TRACEPOINT_SYMBOL_GPL(kfree_skb); | 34 | 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 @@ | |||
| 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); |
