From: KII Keiichi <kkii@redhat.com> Date: Thu, 23 Apr 2009 13:36:35 -0400 Subject: [trace] tracepoints for network socket Message-id: 49F0A723.2060202@redhat.com O-Subject: [RHEL5.4 PATCH 1/2] BZ475719: tracepoints for network socket Bugzilla: 475719 RH-Acked-by: Neil Horman <nhorman@redhat.com> This is the first patch to add tracepoints for network socket. The purpose is to get socket information per sockets. Keiichi diff --git a/include/trace/socket.h b/include/trace/socket.h new file mode 100644 index 0000000..f7cd08d --- /dev/null +++ b/include/trace/socket.h @@ -0,0 +1,18 @@ +#ifndef _TRACE_SOCKET_H +#define _TRACE_SOCKET_H + +#include <net/sock.h> +#include <linux/tracepoint.h> + +DEFINE_TRACE(socket_sendmsg, + TPPROTO(struct socket *sock, struct msghdr *msg, size_t size, int ret), + TPARGS(sock, msg, size, ret)); +DEFINE_TRACE(socket_recvmsg, + TPPROTO(struct socket *sock, struct msghdr *msg, size_t size, int flags, + int ret), + TPARGS(sock, msg, size, flags, ret)); +DEFINE_TRACE(socket_sendpage, + TPPROTO(struct socket *sock, struct page *page, int offset, size_t size, + int flags, int ret), + TPARGS(sock, page, offset, size, flags, ret)); +#endif diff --git a/net/socket.c b/net/socket.c index 679828a..c1b06da 100644 --- a/net/socket.c +++ b/net/socket.c @@ -86,6 +86,7 @@ #include <linux/kmod.h> #include <linux/audit.h> #include <linux/wireless.h> +#include <trace/socket.h> #include <asm/uaccess.h> #include <asm/unistd.h> @@ -596,7 +597,9 @@ static inline int __sock_sendmsg(struct kiocb *iocb, struct socket *sock, if (err) return err; - return sock->ops->sendmsg(iocb, sock, msg, size); + err = sock->ops->sendmsg(iocb, sock, msg, size); + trace_socket_sendmsg(sock, msg, size, err); + return err; } int sock_sendmsg(struct socket *sock, struct msghdr *msg, size_t size) @@ -647,7 +650,9 @@ static inline int __sock_recvmsg(struct kiocb *iocb, struct socket *sock, if (err) return err; - return sock->ops->recvmsg(iocb, sock, msg, size, flags); + err = sock->ops->recvmsg(iocb, sock, msg, size, flags); + trace_socket_recvmsg(sock, msg, size, flags, err); + return err; } int sock_recvmsg(struct socket *sock, struct msghdr *msg, @@ -693,7 +698,7 @@ static ssize_t sock_sendpage(struct file *file, struct page *page, int offset, size_t size, loff_t *ppos, int more) { struct socket *sock; - int flags; + int flags, err; sock = file->private_data; @@ -701,7 +706,9 @@ static ssize_t sock_sendpage(struct file *file, struct page *page, if (more) flags |= MSG_MORE; - return sock->ops->sendpage(sock, page, offset, size, flags); + err = sock->ops->sendpage(sock, page, offset, size, flags); + trace_socket_sendpage(sock, page, offset, size, flags, err); + return err; } static struct sock_iocb *alloc_sock_iocb(struct kiocb *iocb,