Commit e9b3cc1b authored by Neil Horman's avatar Neil Horman Committed by David S. Miller

net: skb ftracer - add tracepoint to skb_copy_datagram_iovec (v3)

skb allocation / cosumption tracer - Add consumption tracepoint

This patch adds a tracepoint to skb_copy_datagram_iovec, which is called each
time a userspace process copies a frame from a socket receive queue to a user
space buffer.  It allows us to hook in and examine each sk_buff that the system
receives on a per-socket bases, and can be use to compile a list of which skb's
were received by which processes.
Signed-off-by: default avatarNeil Horman <nhorman@tuxdriver.com>

 include/trace/events/skb.h |   20 ++++++++++++++++++++
 net/core/datagram.c        |    3 +++
 2 files changed, 23 insertions(+)
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 1e5053b7
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
#define _TRACE_SKB_H #define _TRACE_SKB_H
#include <linux/skbuff.h> #include <linux/skbuff.h>
#include <linux/netdevice.h>
#include <linux/tracepoint.h> #include <linux/tracepoint.h>
/* /*
...@@ -34,6 +35,25 @@ TRACE_EVENT(kfree_skb, ...@@ -34,6 +35,25 @@ TRACE_EVENT(kfree_skb,
__entry->skbaddr, __entry->protocol, __entry->location) __entry->skbaddr, __entry->protocol, __entry->location)
); );
TRACE_EVENT(skb_copy_datagram_iovec,
TP_PROTO(const struct sk_buff *skb, int len),
TP_ARGS(skb, len),
TP_STRUCT__entry(
__field( const void *, skbaddr )
__field( int, len )
),
TP_fast_assign(
__entry->skbaddr = skb;
__entry->len = len;
),
TP_printk("skbaddr=%p len=%d", __entry->skbaddr, __entry->len)
);
#endif /* _TRACE_SKB_H */ #endif /* _TRACE_SKB_H */
/* This part must be outside protection */ /* This part must be outside protection */
......
...@@ -55,6 +55,7 @@ ...@@ -55,6 +55,7 @@
#include <net/checksum.h> #include <net/checksum.h>
#include <net/sock.h> #include <net/sock.h>
#include <net/tcp_states.h> #include <net/tcp_states.h>
#include <trace/events/skb.h>
/* /*
* Is a socket 'connection oriented' ? * Is a socket 'connection oriented' ?
...@@ -284,6 +285,8 @@ int skb_copy_datagram_iovec(const struct sk_buff *skb, int offset, ...@@ -284,6 +285,8 @@ int skb_copy_datagram_iovec(const struct sk_buff *skb, int offset,
int i, copy = start - offset; int i, copy = start - offset;
struct sk_buff *frag_iter; struct sk_buff *frag_iter;
trace_skb_copy_datagram_iovec(skb, len);
/* Copy header. */ /* Copy header. */
if (copy > 0) { if (copy > 0) {
if (copy > len) if (copy > len)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment