Mirror of the lttng-dev mailing list
 help / color / mirror / Atom feed
* [ltt-dev] [PATCH 1/2] Separate socketcall tracepoint.
@ 2009-02-09  4:00 Zhaolei
  2009-02-09  4:01 ` [ltt-dev] [PATCH 2/2] Make ltt support separate " Zhaolei
  2009-02-10 10:30 ` [ltt-dev] [PATCH 1/2] Separate " KOSAKI Motohiro
  0 siblings, 2 replies; 14+ messages in thread
From: Zhaolei @ 2009-02-09  4:00 UTC (permalink / raw)


So we can trace socket calls on arch without socketcall.
And we can get detail information for socket calls.

Signed-off-by: Zhao Lei <zhaolei at cn.fujitsu.com>
---
 include/trace/socket.h |   65 ++++++++++++++++++++++++++++++++++++++++++-----
 net/socket.c           |   63 ++++++++++++++++++++++++++++++++++------------
 2 files changed, 104 insertions(+), 24 deletions(-)

diff --git a/include/trace/socket.h b/include/trace/socket.h
index 60f216c..af7e557 100644
--- a/include/trace/socket.h
+++ b/include/trace/socket.h
@@ -4,21 +4,72 @@
 #include <net/sock.h>
 #include <linux/tracepoint.h>
 
+DECLARE_TRACE(socket_create,
+	TPPROTO(int family, int type, int protocol, struct socket *sock,
+	int ret),
+	TPARGS(family, type, protocol, sock, ret));
+
+DECLARE_TRACE(socket_bind,
+	TPPROTO(int fd, struct sockaddr __user *umyaddr, int addrlen, int ret),
+	TPARGS(fd, umyaddr, addrlen, ret));
+
+DECLARE_TRACE(socket_connect,
+	TPPROTO(int fd, struct sockaddr __user *uservaddr, int addrlen,
+	int ret),
+	TPARGS(fd, uservaddr, addrlen, ret));
+
+DECLARE_TRACE(socket_listen,
+	TPPROTO(int fd, int backlog, int ret),
+	TPARGS(fd, backlog, ret));
+
+DECLARE_TRACE(socket_accept,
+	TPPROTO(int fd, struct sockaddr __user *upeer_sockaddr,
+	int __user *upeer_addrlen, int flags, int ret),
+	TPARGS(fd, upeer_sockaddr, upeer_addrlen, flags, ret));
+
+DECLARE_TRACE(socket_getsockname,
+	TPPROTO(int fd, struct sockaddr __user *usockaddr,
+	int __user *usockaddr_len, int ret),
+	TPARGS(fd, usockaddr, usockaddr_len, ret));
+
+DECLARE_TRACE(socket_getpeername,
+	TPPROTO(int fd, struct sockaddr __user *usockaddr,
+	int __user *usockaddr_len, int ret),
+	TPARGS(fd, usockaddr, usockaddr_len, ret));
+
+DECLARE_TRACE(socket_socketpair,
+	TPPROTO(int family, int type, int protocol, int __user *usockvec,
+	int ret),
+	TPARGS(family, type, protocol, usockvec, ret));
+
 DECLARE_TRACE(socket_sendmsg,
 	TPPROTO(struct socket *sock, struct msghdr *msg, size_t size, int ret),
 	TPARGS(sock, msg, size, ret));
+
 DECLARE_TRACE(socket_recvmsg,
-	TPPROTO(struct socket *sock, struct msghdr *msg, size_t size, int flags,
-		int ret),
+	TPPROTO(struct socket *sock, struct msghdr *msg, size_t size,
+	int flags, int ret),
 	TPARGS(sock, msg, size, flags, ret));
-DECLARE_TRACE(socket_create,
-	TPPROTO(struct socket *sock, int fd),
-	TPARGS(sock, fd));
+
+DECLARE_TRACE(socket_setsockopt,
+	TPPROTO(int fd, int level, int optname, char __user *optval,
+	int optlen, int ret),
+	TPARGS(fd, level, optname, optval, optlen, ret));
+
+DECLARE_TRACE(socket_getsockopt,
+	TPPROTO(int fd, int level, int optname, char __user *optval,
+	int __user *optlen, int ret),
+	TPARGS(fd, level, optname, optval, optlen, ret));
+
+DECLARE_TRACE(socket_shutdown,
+	TPPROTO(int fd, int how, int ret),
+	TPARGS(fd, how, ret));
+
 /*
  * socket_call
  *
- * TODO : This tracepoint should be expanded to cover each element of the
- * switch in sys_socketcall().
+ * We also trace socket_call so we can know which syscall is used by user
+ * (socket_call or sock_send...)
  */
 DECLARE_TRACE(socket_call,
 	TPPROTO(int call, unsigned long a0),
diff --git a/net/socket.c b/net/socket.c
index 6cf37f8..f8f1ac9 100644
--- a/net/socket.c
+++ b/net/socket.c
@@ -156,9 +156,19 @@ static const struct net_proto_family *net_families[NPROTO] __read_mostly;
 
 static DEFINE_PER_CPU(int, sockets_in_use) = 0;
 
+DEFINE_TRACE(socket_create);
+DEFINE_TRACE(socket_bind);
+DEFINE_TRACE(socket_connect);
+DEFINE_TRACE(socket_listen);
+DEFINE_TRACE(socket_accept);
+DEFINE_TRACE(socket_getsockname);
+DEFINE_TRACE(socket_getpeername);
+DEFINE_TRACE(socket_socketpair);
 DEFINE_TRACE(socket_sendmsg);
 DEFINE_TRACE(socket_recvmsg);
-DEFINE_TRACE(socket_create);
+DEFINE_TRACE(socket_setsockopt);
+DEFINE_TRACE(socket_getsockopt);
+DEFINE_TRACE(socket_shutdown);
 DEFINE_TRACE(socket_call);
 
 /*
@@ -1236,8 +1246,10 @@ SYSCALL_DEFINE3(socket, int, family, int, type, int, protocol)
 	BUILD_BUG_ON(SOCK_NONBLOCK & SOCK_TYPE_MASK);
 
 	flags = type & ~SOCK_TYPE_MASK;
-	if (flags & ~(SOCK_CLOEXEC | SOCK_NONBLOCK))
-		return -EINVAL;
+	if (flags & ~(SOCK_CLOEXEC | SOCK_NONBLOCK)) {
+		retval = -EINVAL;
+		goto out;
+	}
 	type &= SOCK_TYPE_MASK;
 
 	if (SOCK_NONBLOCK != O_NONBLOCK && (flags & SOCK_NONBLOCK))
@@ -1251,13 +1263,12 @@ SYSCALL_DEFINE3(socket, int, family, int, type, int, protocol)
 	if (retval < 0)
 		goto out_release;
 
-	trace_socket_create(sock, retval);
-out:
-	/* It may be already another descriptor 8) Not kernel problem. */
-	return retval;
-
+	goto out;
 out_release:
 	sock_release(sock);
+out:
+	trace_socket_create(family, type, protocol, sock, retval);
+	/* It may be already another descriptor 8) Not kernel problem. */
 	return retval;
 }
 
@@ -1274,8 +1285,10 @@ SYSCALL_DEFINE4(socketpair, int, family, int, type, int, protocol,
 	int flags;
 
 	flags = type & ~SOCK_TYPE_MASK;
-	if (flags & ~(SOCK_CLOEXEC | SOCK_NONBLOCK))
-		return -EINVAL;
+	if (flags & ~(SOCK_CLOEXEC | SOCK_NONBLOCK)) {
+		err = -EINVAL;
+		goto out;
+	}
 	type &= SOCK_TYPE_MASK;
 
 	if (SOCK_NONBLOCK != O_NONBLOCK && (flags & SOCK_NONBLOCK))
@@ -1334,17 +1347,18 @@ SYSCALL_DEFINE4(socketpair, int, family, int, type, int, protocol,
 	if (!err)
 		err = put_user(fd2, &usockvec[1]);
 	if (!err)
-		return 0;
+		goto out;
 
 	sys_close(fd2);
 	sys_close(fd1);
-	return err;
+	goto out;
 
 out_release_both:
 	sock_release(sock2);
 out_release_1:
 	sock_release(sock1);
 out:
+	trace_socket_socketpair(family, type, protocol, usockvec, err);
 	return err;
 
 out_fd2:
@@ -1386,6 +1400,7 @@ SYSCALL_DEFINE3(bind, int, fd, struct sockaddr __user *, umyaddr, int, addrlen)
 		}
 		fput_light(sock->file, fput_needed);
 	}
+	trace_socket_bind(fd, umyaddr, addrlen, err);
 	return err;
 }
 
@@ -1413,6 +1428,7 @@ SYSCALL_DEFINE2(listen, int, fd, int, backlog)
 
 		fput_light(sock->file, fput_needed);
 	}
+	trace_socket_listen(fd, backlog, err);
 	return err;
 }
 
@@ -1436,8 +1452,10 @@ SYSCALL_DEFINE4(accept4, int, fd, struct sockaddr __user *, upeer_sockaddr,
 	int err, len, newfd, fput_needed;
 	struct sockaddr_storage address;
 
-	if (flags & ~(SOCK_CLOEXEC | SOCK_NONBLOCK))
-		return -EINVAL;
+	if (flags & ~(SOCK_CLOEXEC | SOCK_NONBLOCK)) {
+		err = -EINVAL;
+		goto out;
+	}
 
 	if (SOCK_NONBLOCK != O_NONBLOCK && (flags & SOCK_NONBLOCK))
 		flags = (flags & ~SOCK_NONBLOCK) | O_NONBLOCK;
@@ -1500,6 +1518,7 @@ SYSCALL_DEFINE4(accept4, int, fd, struct sockaddr __user *, upeer_sockaddr,
 out_put:
 	fput_light(sock->file, fput_needed);
 out:
+	trace_socket_accept(fd, upeer_sockaddr, upeer_addrlen, flags, err);
 	return err;
 out_fd_simple:
 	sock_release(newsock);
@@ -1554,6 +1573,7 @@ SYSCALL_DEFINE3(connect, int, fd, struct sockaddr __user *, uservaddr,
 out_put:
 	fput_light(sock->file, fput_needed);
 out:
+	trace_socket_connect(fd, uservaddr, addrlen, err);
 	return err;
 }
 
@@ -1585,6 +1605,7 @@ SYSCALL_DEFINE3(getsockname, int, fd, struct sockaddr __user *, usockaddr,
 out_put:
 	fput_light(sock->file, fput_needed);
 out:
+	trace_socket_getsockname(fd, usockaddr, usockaddr_len, err);
 	return err;
 }
 
@@ -1605,7 +1626,7 @@ SYSCALL_DEFINE3(getpeername, int, fd, struct sockaddr __user *, usockaddr,
 		err = security_socket_getpeername(sock);
 		if (err) {
 			fput_light(sock->file, fput_needed);
-			return err;
+			goto out;
 		}
 
 		err =
@@ -1616,6 +1637,8 @@ SYSCALL_DEFINE3(getpeername, int, fd, struct sockaddr __user *, usockaddr,
 						usockaddr_len);
 		fput_light(sock->file, fput_needed);
 	}
+out:
+	trace_socket_getpeername(fd, usockaddr, usockaddr_len, err);
 	return err;
 }
 
@@ -1742,8 +1765,10 @@ SYSCALL_DEFINE5(setsockopt, int, fd, int, level, int, optname,
 	int err, fput_needed;
 	struct socket *sock;
 
-	if (optlen < 0)
-		return -EINVAL;
+	if (optlen < 0) {
+		err = -EINVAL;
+		goto out;
+	}
 
 	sock = sockfd_lookup_light(fd, &err, &fput_needed);
 	if (sock != NULL) {
@@ -1762,6 +1787,8 @@ SYSCALL_DEFINE5(setsockopt, int, fd, int, level, int, optname,
 out_put:
 		fput_light(sock->file, fput_needed);
 	}
+out:
+	trace_socket_setsockopt(fd, level, optname, optval, optlen, err);
 	return err;
 }
 
@@ -1793,6 +1820,7 @@ SYSCALL_DEFINE5(getsockopt, int, fd, int, level, int, optname,
 out_put:
 		fput_light(sock->file, fput_needed);
 	}
+	trace_socket_getsockopt(fd, level, optname, optval, optlen, err);
 	return err;
 }
 
@@ -1812,6 +1840,7 @@ SYSCALL_DEFINE2(shutdown, int, fd, int, how)
 			err = sock->ops->shutdown(sock, how);
 		fput_light(sock->file, fput_needed);
 	}
+	trace_socket_shutdown(fd, how, err);
 	return err;
 }
 
-- 
1.5.5.3






^ permalink raw reply	[flat|nested] 14+ messages in thread

* [ltt-dev] [PATCH 2/2] Make ltt support separate socketcall tracepoint
  2009-02-09  4:00 [ltt-dev] [PATCH 1/2] Separate socketcall tracepoint Zhaolei
@ 2009-02-09  4:01 ` Zhaolei
  2009-02-10 10:30 ` [ltt-dev] [PATCH 1/2] Separate " KOSAKI Motohiro
  1 sibling, 0 replies; 14+ messages in thread
From: Zhaolei @ 2009-02-09  4:01 UTC (permalink / raw)


So ltt can trace these socket syscalls.

Signed-off-by: Zhao Lei <zhaolei at cn.fujitsu.com>
---
 ltt/probes/net-trace.c |  112 +++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 97 insertions(+), 15 deletions(-)

diff --git a/ltt/probes/net-trace.c b/ltt/probes/net-trace.c
index a30530d..83cf33a 100644
--- a/ltt/probes/net-trace.c
+++ b/ltt/probes/net-trace.c
@@ -75,30 +75,112 @@ void probe_ipv6_addr_del(struct inet6_ifaddr *ifa)
 		addr[3], addr[2], addr[1], addr[0]);
 }
 
-void probe_socket_sendmsg(struct socket *sock, struct msghdr *msg,
-		size_t size, int ret)
+void probe_socket_create(int family, int type, int protocol,
+	struct socket *sock, int ret)
+{
+	trace_mark_tp(net, socket_create, socket_create, probe_socket_create,
+		"family %d type %d protocol %d sock %p ret %d",
+		family, type, protocol, sock, ret);
+}
+
+void probe_socket_bind(int fd, struct sockaddr __user *umyaddr, int addrlen,
+	int ret)
+{
+	trace_mark_tp(net, socket_bind, socket_bind, probe_socket_bind,
+		"fd %d umyaddr %p addrlen %d ret %d",
+		fd, umyaddr, addrlen, ret);
+}
+
+void probe_socket_connect(int fd, struct sockaddr __user *uservaddr,
+	int addrlen, int ret)
+{
+	trace_mark_tp(net, socket_connect, socket_connect, probe_socket_connect,
+		"fd %d uservaddr %p addrlen %d ret %d",
+		fd, uservaddr, addrlen, ret);
+}
+
+void probe_socket_listen(int fd, int backlog, int ret)
+{
+	trace_mark_tp(net, socket_listen, socket_listen, probe_socket_listen,
+		"fd %d backlog %d ret %d",
+		fd, backlog, ret);
+}
+
+void probe_socket_accept(int fd, struct sockaddr __user *upeer_sockaddr,
+	int __user *upeer_addrlen, int flags, int ret)
+{
+	trace_mark_tp(net, socket_accept, socket_accept, probe_socket_accept,
+		"fd %d upeer_sockaddr %p upeer_addrlen %p flags %d ret %d",
+		fd, upeer_sockaddr, upeer_addrlen, flags, ret);
+}
+
+void probe_socket_getsockname(int fd, struct sockaddr __user *usockaddr,
+	int __user *usockaddr_len, int ret)
+{
+	trace_mark_tp(net, socket_getsockname, socket_getsockname,
+		probe_socket_getsockname,
+		"fd %d usockaddr %p usockaddr_len %p ret %d",
+		fd, usockaddr, usockaddr_len, ret);
+}
+
+void probe_socket_getpeername(int fd, struct sockaddr __user *usockaddr,
+	int __user *usockaddr_len, int ret)
+{
+	trace_mark_tp(net, socket_getpeername, socket_getpeername,
+		probe_socket_getpeername,
+		"fd %d usockaddr %p usockaddr_len %p ret %d",
+		fd, usockaddr, usockaddr_len, ret);
+}
+
+void probe_socket_socketpair(int family, int type, int protocol,
+	int __user *usockvec, int ret)
+{
+	trace_mark_tp(net, socket_socketpair, socket_socketpair,
+		probe_socket_socketpair,
+		"family %d type %d protocol %d usockvec %p ret %d",
+		family, type, protocol, usockvec, ret);
+}
+
+void probe_socket_sendmsg(struct socket *sock, struct msghdr *msg, size_t size,
+	int ret)
 {
 	trace_mark_tp(net, socket_sendmsg, socket_sendmsg, probe_socket_sendmsg,
-		"sock %p family %d type %d protocol %d size %zu",
-		sock, sock->sk->sk_family, sock->sk->sk_type,
-		sock->sk->sk_protocol, size);
+		"sock %p msg %p size %zu ret %d",
+		sock, msg, size, ret);
 }
 
-void probe_socket_recvmsg(struct socket *sock, struct msghdr *msg,
-		size_t size, int flags, int ret)
+void probe_socket_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
+	int flags, int ret)
 {
 	trace_mark_tp(net, socket_recvmsg, socket_recvmsg, probe_socket_recvmsg,
-		"sock %p family %d type %d protocol %d size %zu",
-		sock, sock->sk->sk_family, sock->sk->sk_type,
-		sock->sk->sk_protocol, size);
+		"sock %p msg %p size %zu flags %d ret %d",
+		sock, msg, size, flags, ret);
 }
 
-void probe_socket_create(struct socket *sock, int fd)
+void probe_socket_setsockopt(int fd, int level, int optname,
+	char __user *optval, int optlen, int ret)
 {
-	trace_mark_tp(net, socket_create, socket_create, probe_socket_create,
-		"sock %p family %d type %d protocol %d fd %d",
-		sock, sock->sk->sk_family, sock->sk->sk_type,
-		sock->sk->sk_protocol, fd);
+	trace_mark_tp(net, socket_setsockopt, socket_setsockopt,
+		probe_socket_setsockopt,
+		"fd %d level %d optname %d optval %p optlen %d ret %d",
+		fd, level, optname, optval, optlen, ret);
+}
+
+void probe_socket_getsockopt(int fd, int level, int optname,
+	char __user *optval, int __user *optlen, int ret)
+{
+	trace_mark_tp(net, socket_getsockopt, socket_getsockopt,
+		probe_socket_getsockopt,
+		"fd %d level %d optname %d optval %p optlen %p ret %d",
+		fd, level, optname, optval, optlen, ret);
+}
+
+void probe_socket_shutdown(int fd, int how, int ret)
+{
+	trace_mark_tp(net, socket_shutdown, socket_shutdown,
+		probe_socket_shutdown,
+		"fd %d how %d ret %d",
+		fd, how, ret);
 }
 
 void probe_socket_call(int call, unsigned long a0)
-- 
1.5.5.3






^ permalink raw reply	[flat|nested] 14+ messages in thread

* [ltt-dev] [PATCH 1/2] Separate socketcall tracepoint.
  2009-02-09  4:00 [ltt-dev] [PATCH 1/2] Separate socketcall tracepoint Zhaolei
  2009-02-09  4:01 ` [ltt-dev] [PATCH 2/2] Make ltt support separate " Zhaolei
@ 2009-02-10 10:30 ` KOSAKI Motohiro
  2009-02-10 11:18   ` Zhaolei
  1 sibling, 1 reply; 14+ messages in thread
From: KOSAKI Motohiro @ 2009-02-10 10:30 UTC (permalink / raw)


Hi

> So we can trace socket calls on arch without socketcall.
> And we can get detail information for socket calls.

The description is tooooo short.
Please explain why this patch is useful. Who need this?







^ permalink raw reply	[flat|nested] 14+ messages in thread

* [ltt-dev] [PATCH 1/2] Separate socketcall tracepoint.
  2009-02-10 10:30 ` [ltt-dev] [PATCH 1/2] Separate " KOSAKI Motohiro
@ 2009-02-10 11:18   ` Zhaolei
  2009-02-10 11:28     ` KOSAKI Motohiro
  0 siblings, 1 reply; 14+ messages in thread
From: Zhaolei @ 2009-02-10 11:18 UTC (permalink / raw)


* From: "KOSAKI Motohiro" <kosaki.motohiro@jp.fujitsu.com>
> Hi
> 
>> So we can trace socket calls on arch without socketcall.
>> And we can get detail information for socket calls.
> 
> The description is tooooo short.
> Please explain why this patch is useful. Who need this?
Hello, Kosaki-san

Now lttng trace only sys_socket_call for sys_socket, sys_bind and others.
But on some arch(for ex, ia64) which lacks of sys_socket_call, we can't get those
syscall traced.

This patch add separate socketcall tracers to sys_socket, sys_bind, etc.
So people who using ia64 can trace each socket calls.

Do you agree it?

I'll add some explain to comment and send a v2 patch.

Regards
Zhaolei


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [ltt-dev] [PATCH 1/2] Separate socketcall tracepoint.
  2009-02-10 11:18   ` Zhaolei
@ 2009-02-10 11:28     ` KOSAKI Motohiro
  2009-02-10 11:43       ` [ltt-dev] [PATCH 0/2] " Zhaolei
                         ` (4 more replies)
  0 siblings, 5 replies; 14+ messages in thread
From: KOSAKI Motohiro @ 2009-02-10 11:28 UTC (permalink / raw)


> * From: "KOSAKI Motohiro" <kosaki.motohiro@jp.fujitsu.com>
> > Hi
> > 
> >> So we can trace socket calls on arch without socketcall.
> >> And we can get detail information for socket calls.
> > 
> > The description is tooooo short.
> > Please explain why this patch is useful. Who need this?
> Hello, Kosaki-san
> 
> Now lttng trace only sys_socket_call for sys_socket, sys_bind and others.
> But on some arch(for ex, ia64) which lacks of sys_socket_call, we can't get those
> syscall traced.
> 
> This patch add separate socketcall tracers to sys_socket, sys_bind, etc.
> So people who using ia64 can trace each socket calls.
> 
> Do you agree it?

Sure.
this is good description :)


> 
> I'll add some explain to comment and send a v2 patch.
> 
> Regards
> Zhaolei







^ permalink raw reply	[flat|nested] 14+ messages in thread

* [ltt-dev] [PATCH 0/2] Separate socketcall tracepoint
  2009-02-10 11:28     ` KOSAKI Motohiro
@ 2009-02-10 11:43       ` Zhaolei
  2009-02-10 11:51         ` Zhaolei
  2009-02-10 11:45       ` [ltt-dev] [PATCH v2] " Zhaolei
                         ` (3 subsequent siblings)
  4 siblings, 1 reply; 14+ messages in thread
From: Zhaolei @ 2009-02-10 11:43 UTC (permalink / raw)


Hello,

Thanks for kosaki-san's comment for this patch.
I resend v2 patch to add detail description now.

Regards
Zhaolei





^ permalink raw reply	[flat|nested] 14+ messages in thread

* [ltt-dev] [PATCH v2] Separate socketcall tracepoint.
  2009-02-10 11:28     ` KOSAKI Motohiro
  2009-02-10 11:43       ` [ltt-dev] [PATCH 0/2] " Zhaolei
@ 2009-02-10 11:45       ` Zhaolei
  2009-02-10 11:46       ` [ltt-dev] [PATCH v2 2/2] Make ltt support separate " Zhaolei
                         ` (2 subsequent siblings)
  4 siblings, 0 replies; 14+ messages in thread
From: Zhaolei @ 2009-02-10 11:45 UTC (permalink / raw)


Now lttng trace only sys_socket_call for sys_socket, sys_bind and others.
But on some arch(for ex, ia64) which lacks of sys_socket_call, we can't get
those syscall traced.

This patch add separate socketcall tracers to sys_socket, sys_bind, etc.
So people who using ia64(and other arch without sys_socket_call) can trace
each socket calls.

Another benefit is that we can get detail information for those socket calls
now.(we can see only arg1 before this patch)

Signed-off-by: Zhao Lei <zhaolei at cn.fujitsu.com>
---
 include/trace/socket.h |   65 ++++++++++++++++++++++++++++++++++++++++++-----
 net/socket.c           |   63 ++++++++++++++++++++++++++++++++++------------
 2 files changed, 104 insertions(+), 24 deletions(-)

diff --git a/include/trace/socket.h b/include/trace/socket.h
index 60f216c..af7e557 100644
--- a/include/trace/socket.h
+++ b/include/trace/socket.h
@@ -4,21 +4,72 @@
 #include <net/sock.h>
 #include <linux/tracepoint.h>
 
+DECLARE_TRACE(socket_create,
+	TPPROTO(int family, int type, int protocol, struct socket *sock,
+	int ret),
+	TPARGS(family, type, protocol, sock, ret));
+
+DECLARE_TRACE(socket_bind,
+	TPPROTO(int fd, struct sockaddr __user *umyaddr, int addrlen, int ret),
+	TPARGS(fd, umyaddr, addrlen, ret));
+
+DECLARE_TRACE(socket_connect,
+	TPPROTO(int fd, struct sockaddr __user *uservaddr, int addrlen,
+	int ret),
+	TPARGS(fd, uservaddr, addrlen, ret));
+
+DECLARE_TRACE(socket_listen,
+	TPPROTO(int fd, int backlog, int ret),
+	TPARGS(fd, backlog, ret));
+
+DECLARE_TRACE(socket_accept,
+	TPPROTO(int fd, struct sockaddr __user *upeer_sockaddr,
+	int __user *upeer_addrlen, int flags, int ret),
+	TPARGS(fd, upeer_sockaddr, upeer_addrlen, flags, ret));
+
+DECLARE_TRACE(socket_getsockname,
+	TPPROTO(int fd, struct sockaddr __user *usockaddr,
+	int __user *usockaddr_len, int ret),
+	TPARGS(fd, usockaddr, usockaddr_len, ret));
+
+DECLARE_TRACE(socket_getpeername,
+	TPPROTO(int fd, struct sockaddr __user *usockaddr,
+	int __user *usockaddr_len, int ret),
+	TPARGS(fd, usockaddr, usockaddr_len, ret));
+
+DECLARE_TRACE(socket_socketpair,
+	TPPROTO(int family, int type, int protocol, int __user *usockvec,
+	int ret),
+	TPARGS(family, type, protocol, usockvec, ret));
+
 DECLARE_TRACE(socket_sendmsg,
 	TPPROTO(struct socket *sock, struct msghdr *msg, size_t size, int ret),
 	TPARGS(sock, msg, size, ret));
+
 DECLARE_TRACE(socket_recvmsg,
-	TPPROTO(struct socket *sock, struct msghdr *msg, size_t size, int flags,
-		int ret),
+	TPPROTO(struct socket *sock, struct msghdr *msg, size_t size,
+	int flags, int ret),
 	TPARGS(sock, msg, size, flags, ret));
-DECLARE_TRACE(socket_create,
-	TPPROTO(struct socket *sock, int fd),
-	TPARGS(sock, fd));
+
+DECLARE_TRACE(socket_setsockopt,
+	TPPROTO(int fd, int level, int optname, char __user *optval,
+	int optlen, int ret),
+	TPARGS(fd, level, optname, optval, optlen, ret));
+
+DECLARE_TRACE(socket_getsockopt,
+	TPPROTO(int fd, int level, int optname, char __user *optval,
+	int __user *optlen, int ret),
+	TPARGS(fd, level, optname, optval, optlen, ret));
+
+DECLARE_TRACE(socket_shutdown,
+	TPPROTO(int fd, int how, int ret),
+	TPARGS(fd, how, ret));
+
 /*
  * socket_call
  *
- * TODO : This tracepoint should be expanded to cover each element of the
- * switch in sys_socketcall().
+ * We also trace socket_call so we can know which syscall is used by user
+ * (socket_call or sock_send...)
  */
 DECLARE_TRACE(socket_call,
 	TPPROTO(int call, unsigned long a0),
diff --git a/net/socket.c b/net/socket.c
index 6cf37f8..f8f1ac9 100644
--- a/net/socket.c
+++ b/net/socket.c
@@ -156,9 +156,19 @@ static const struct net_proto_family *net_families[NPROTO] __read_mostly;
 
 static DEFINE_PER_CPU(int, sockets_in_use) = 0;
 
+DEFINE_TRACE(socket_create);
+DEFINE_TRACE(socket_bind);
+DEFINE_TRACE(socket_connect);
+DEFINE_TRACE(socket_listen);
+DEFINE_TRACE(socket_accept);
+DEFINE_TRACE(socket_getsockname);
+DEFINE_TRACE(socket_getpeername);
+DEFINE_TRACE(socket_socketpair);
 DEFINE_TRACE(socket_sendmsg);
 DEFINE_TRACE(socket_recvmsg);
-DEFINE_TRACE(socket_create);
+DEFINE_TRACE(socket_setsockopt);
+DEFINE_TRACE(socket_getsockopt);
+DEFINE_TRACE(socket_shutdown);
 DEFINE_TRACE(socket_call);
 
 /*
@@ -1236,8 +1246,10 @@ SYSCALL_DEFINE3(socket, int, family, int, type, int, protocol)
 	BUILD_BUG_ON(SOCK_NONBLOCK & SOCK_TYPE_MASK);
 
 	flags = type & ~SOCK_TYPE_MASK;
-	if (flags & ~(SOCK_CLOEXEC | SOCK_NONBLOCK))
-		return -EINVAL;
+	if (flags & ~(SOCK_CLOEXEC | SOCK_NONBLOCK)) {
+		retval = -EINVAL;
+		goto out;
+	}
 	type &= SOCK_TYPE_MASK;
 
 	if (SOCK_NONBLOCK != O_NONBLOCK && (flags & SOCK_NONBLOCK))
@@ -1251,13 +1263,12 @@ SYSCALL_DEFINE3(socket, int, family, int, type, int, protocol)
 	if (retval < 0)
 		goto out_release;
 
-	trace_socket_create(sock, retval);
-out:
-	/* It may be already another descriptor 8) Not kernel problem. */
-	return retval;
-
+	goto out;
 out_release:
 	sock_release(sock);
+out:
+	trace_socket_create(family, type, protocol, sock, retval);
+	/* It may be already another descriptor 8) Not kernel problem. */
 	return retval;
 }
 
@@ -1274,8 +1285,10 @@ SYSCALL_DEFINE4(socketpair, int, family, int, type, int, protocol,
 	int flags;
 
 	flags = type & ~SOCK_TYPE_MASK;
-	if (flags & ~(SOCK_CLOEXEC | SOCK_NONBLOCK))
-		return -EINVAL;
+	if (flags & ~(SOCK_CLOEXEC | SOCK_NONBLOCK)) {
+		err = -EINVAL;
+		goto out;
+	}
 	type &= SOCK_TYPE_MASK;
 
 	if (SOCK_NONBLOCK != O_NONBLOCK && (flags & SOCK_NONBLOCK))
@@ -1334,17 +1347,18 @@ SYSCALL_DEFINE4(socketpair, int, family, int, type, int, protocol,
 	if (!err)
 		err = put_user(fd2, &usockvec[1]);
 	if (!err)
-		return 0;
+		goto out;
 
 	sys_close(fd2);
 	sys_close(fd1);
-	return err;
+	goto out;
 
 out_release_both:
 	sock_release(sock2);
 out_release_1:
 	sock_release(sock1);
 out:
+	trace_socket_socketpair(family, type, protocol, usockvec, err);
 	return err;
 
 out_fd2:
@@ -1386,6 +1400,7 @@ SYSCALL_DEFINE3(bind, int, fd, struct sockaddr __user *, umyaddr, int, addrlen)
 		}
 		fput_light(sock->file, fput_needed);
 	}
+	trace_socket_bind(fd, umyaddr, addrlen, err);
 	return err;
 }
 
@@ -1413,6 +1428,7 @@ SYSCALL_DEFINE2(listen, int, fd, int, backlog)
 
 		fput_light(sock->file, fput_needed);
 	}
+	trace_socket_listen(fd, backlog, err);
 	return err;
 }
 
@@ -1436,8 +1452,10 @@ SYSCALL_DEFINE4(accept4, int, fd, struct sockaddr __user *, upeer_sockaddr,
 	int err, len, newfd, fput_needed;
 	struct sockaddr_storage address;
 
-	if (flags & ~(SOCK_CLOEXEC | SOCK_NONBLOCK))
-		return -EINVAL;
+	if (flags & ~(SOCK_CLOEXEC | SOCK_NONBLOCK)) {
+		err = -EINVAL;
+		goto out;
+	}
 
 	if (SOCK_NONBLOCK != O_NONBLOCK && (flags & SOCK_NONBLOCK))
 		flags = (flags & ~SOCK_NONBLOCK) | O_NONBLOCK;
@@ -1500,6 +1518,7 @@ SYSCALL_DEFINE4(accept4, int, fd, struct sockaddr __user *, upeer_sockaddr,
 out_put:
 	fput_light(sock->file, fput_needed);
 out:
+	trace_socket_accept(fd, upeer_sockaddr, upeer_addrlen, flags, err);
 	return err;
 out_fd_simple:
 	sock_release(newsock);
@@ -1554,6 +1573,7 @@ SYSCALL_DEFINE3(connect, int, fd, struct sockaddr __user *, uservaddr,
 out_put:
 	fput_light(sock->file, fput_needed);
 out:
+	trace_socket_connect(fd, uservaddr, addrlen, err);
 	return err;
 }
 
@@ -1585,6 +1605,7 @@ SYSCALL_DEFINE3(getsockname, int, fd, struct sockaddr __user *, usockaddr,
 out_put:
 	fput_light(sock->file, fput_needed);
 out:
+	trace_socket_getsockname(fd, usockaddr, usockaddr_len, err);
 	return err;
 }
 
@@ -1605,7 +1626,7 @@ SYSCALL_DEFINE3(getpeername, int, fd, struct sockaddr __user *, usockaddr,
 		err = security_socket_getpeername(sock);
 		if (err) {
 			fput_light(sock->file, fput_needed);
-			return err;
+			goto out;
 		}
 
 		err =
@@ -1616,6 +1637,8 @@ SYSCALL_DEFINE3(getpeername, int, fd, struct sockaddr __user *, usockaddr,
 						usockaddr_len);
 		fput_light(sock->file, fput_needed);
 	}
+out:
+	trace_socket_getpeername(fd, usockaddr, usockaddr_len, err);
 	return err;
 }
 
@@ -1742,8 +1765,10 @@ SYSCALL_DEFINE5(setsockopt, int, fd, int, level, int, optname,
 	int err, fput_needed;
 	struct socket *sock;
 
-	if (optlen < 0)
-		return -EINVAL;
+	if (optlen < 0) {
+		err = -EINVAL;
+		goto out;
+	}
 
 	sock = sockfd_lookup_light(fd, &err, &fput_needed);
 	if (sock != NULL) {
@@ -1762,6 +1787,8 @@ SYSCALL_DEFINE5(setsockopt, int, fd, int, level, int, optname,
 out_put:
 		fput_light(sock->file, fput_needed);
 	}
+out:
+	trace_socket_setsockopt(fd, level, optname, optval, optlen, err);
 	return err;
 }
 
@@ -1793,6 +1820,7 @@ SYSCALL_DEFINE5(getsockopt, int, fd, int, level, int, optname,
 out_put:
 		fput_light(sock->file, fput_needed);
 	}
+	trace_socket_getsockopt(fd, level, optname, optval, optlen, err);
 	return err;
 }
 
@@ -1812,6 +1840,7 @@ SYSCALL_DEFINE2(shutdown, int, fd, int, how)
 			err = sock->ops->shutdown(sock, how);
 		fput_light(sock->file, fput_needed);
 	}
+	trace_socket_shutdown(fd, how, err);
 	return err;
 }
 
-- 
1.5.5.3






^ permalink raw reply	[flat|nested] 14+ messages in thread

* [ltt-dev] [PATCH v2 2/2] Make ltt support separate socketcall tracepoint.
  2009-02-10 11:28     ` KOSAKI Motohiro
  2009-02-10 11:43       ` [ltt-dev] [PATCH 0/2] " Zhaolei
  2009-02-10 11:45       ` [ltt-dev] [PATCH v2] " Zhaolei
@ 2009-02-10 11:46       ` Zhaolei
  2009-02-11  5:26         ` Mathieu Desnoyers
  2009-02-10 11:47       ` [ltt-dev] [PATCH v2 1/2] Separate " Zhaolei
  2009-02-10 11:47       ` [ltt-dev] [PATCH v2 0/2] " Zhaolei
  4 siblings, 1 reply; 14+ messages in thread
From: Zhaolei @ 2009-02-10 11:46 UTC (permalink / raw)


So ltt can trace these socket syscalls.

Signed-off-by: Zhao Lei <zhaolei at cn.fujitsu.com>
---
 ltt/probes/net-trace.c |  112 +++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 97 insertions(+), 15 deletions(-)

diff --git a/ltt/probes/net-trace.c b/ltt/probes/net-trace.c
index a30530d..83cf33a 100644
--- a/ltt/probes/net-trace.c
+++ b/ltt/probes/net-trace.c
@@ -75,30 +75,112 @@ void probe_ipv6_addr_del(struct inet6_ifaddr *ifa)
 		addr[3], addr[2], addr[1], addr[0]);
 }
 
-void probe_socket_sendmsg(struct socket *sock, struct msghdr *msg,
-		size_t size, int ret)
+void probe_socket_create(int family, int type, int protocol,
+	struct socket *sock, int ret)
+{
+	trace_mark_tp(net, socket_create, socket_create, probe_socket_create,
+		"family %d type %d protocol %d sock %p ret %d",
+		family, type, protocol, sock, ret);
+}
+
+void probe_socket_bind(int fd, struct sockaddr __user *umyaddr, int addrlen,
+	int ret)
+{
+	trace_mark_tp(net, socket_bind, socket_bind, probe_socket_bind,
+		"fd %d umyaddr %p addrlen %d ret %d",
+		fd, umyaddr, addrlen, ret);
+}
+
+void probe_socket_connect(int fd, struct sockaddr __user *uservaddr,
+	int addrlen, int ret)
+{
+	trace_mark_tp(net, socket_connect, socket_connect, probe_socket_connect,
+		"fd %d uservaddr %p addrlen %d ret %d",
+		fd, uservaddr, addrlen, ret);
+}
+
+void probe_socket_listen(int fd, int backlog, int ret)
+{
+	trace_mark_tp(net, socket_listen, socket_listen, probe_socket_listen,
+		"fd %d backlog %d ret %d",
+		fd, backlog, ret);
+}
+
+void probe_socket_accept(int fd, struct sockaddr __user *upeer_sockaddr,
+	int __user *upeer_addrlen, int flags, int ret)
+{
+	trace_mark_tp(net, socket_accept, socket_accept, probe_socket_accept,
+		"fd %d upeer_sockaddr %p upeer_addrlen %p flags %d ret %d",
+		fd, upeer_sockaddr, upeer_addrlen, flags, ret);
+}
+
+void probe_socket_getsockname(int fd, struct sockaddr __user *usockaddr,
+	int __user *usockaddr_len, int ret)
+{
+	trace_mark_tp(net, socket_getsockname, socket_getsockname,
+		probe_socket_getsockname,
+		"fd %d usockaddr %p usockaddr_len %p ret %d",
+		fd, usockaddr, usockaddr_len, ret);
+}
+
+void probe_socket_getpeername(int fd, struct sockaddr __user *usockaddr,
+	int __user *usockaddr_len, int ret)
+{
+	trace_mark_tp(net, socket_getpeername, socket_getpeername,
+		probe_socket_getpeername,
+		"fd %d usockaddr %p usockaddr_len %p ret %d",
+		fd, usockaddr, usockaddr_len, ret);
+}
+
+void probe_socket_socketpair(int family, int type, int protocol,
+	int __user *usockvec, int ret)
+{
+	trace_mark_tp(net, socket_socketpair, socket_socketpair,
+		probe_socket_socketpair,
+		"family %d type %d protocol %d usockvec %p ret %d",
+		family, type, protocol, usockvec, ret);
+}
+
+void probe_socket_sendmsg(struct socket *sock, struct msghdr *msg, size_t size,
+	int ret)
 {
 	trace_mark_tp(net, socket_sendmsg, socket_sendmsg, probe_socket_sendmsg,
-		"sock %p family %d type %d protocol %d size %zu",
-		sock, sock->sk->sk_family, sock->sk->sk_type,
-		sock->sk->sk_protocol, size);
+		"sock %p msg %p size %zu ret %d",
+		sock, msg, size, ret);
 }
 
-void probe_socket_recvmsg(struct socket *sock, struct msghdr *msg,
-		size_t size, int flags, int ret)
+void probe_socket_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
+	int flags, int ret)
 {
 	trace_mark_tp(net, socket_recvmsg, socket_recvmsg, probe_socket_recvmsg,
-		"sock %p family %d type %d protocol %d size %zu",
-		sock, sock->sk->sk_family, sock->sk->sk_type,
-		sock->sk->sk_protocol, size);
+		"sock %p msg %p size %zu flags %d ret %d",
+		sock, msg, size, flags, ret);
 }
 
-void probe_socket_create(struct socket *sock, int fd)
+void probe_socket_setsockopt(int fd, int level, int optname,
+	char __user *optval, int optlen, int ret)
 {
-	trace_mark_tp(net, socket_create, socket_create, probe_socket_create,
-		"sock %p family %d type %d protocol %d fd %d",
-		sock, sock->sk->sk_family, sock->sk->sk_type,
-		sock->sk->sk_protocol, fd);
+	trace_mark_tp(net, socket_setsockopt, socket_setsockopt,
+		probe_socket_setsockopt,
+		"fd %d level %d optname %d optval %p optlen %d ret %d",
+		fd, level, optname, optval, optlen, ret);
+}
+
+void probe_socket_getsockopt(int fd, int level, int optname,
+	char __user *optval, int __user *optlen, int ret)
+{
+	trace_mark_tp(net, socket_getsockopt, socket_getsockopt,
+		probe_socket_getsockopt,
+		"fd %d level %d optname %d optval %p optlen %p ret %d",
+		fd, level, optname, optval, optlen, ret);
+}
+
+void probe_socket_shutdown(int fd, int how, int ret)
+{
+	trace_mark_tp(net, socket_shutdown, socket_shutdown,
+		probe_socket_shutdown,
+		"fd %d how %d ret %d",
+		fd, how, ret);
 }
 
 void probe_socket_call(int call, unsigned long a0)
-- 
1.5.5.3






^ permalink raw reply	[flat|nested] 14+ messages in thread

* [ltt-dev] [PATCH v2 1/2] Separate socketcall tracepoint.
  2009-02-10 11:28     ` KOSAKI Motohiro
                         ` (2 preceding siblings ...)
  2009-02-10 11:46       ` [ltt-dev] [PATCH v2 2/2] Make ltt support separate " Zhaolei
@ 2009-02-10 11:47       ` Zhaolei
  2009-02-11  5:22         ` Mathieu Desnoyers
  2009-02-10 11:47       ` [ltt-dev] [PATCH v2 0/2] " Zhaolei
  4 siblings, 1 reply; 14+ messages in thread
From: Zhaolei @ 2009-02-10 11:47 UTC (permalink / raw)


Now lttng trace only sys_socket_call for sys_socket, sys_bind and others.
But on some arch(for ex, ia64) which lacks of sys_socket_call, we can't get
those syscall traced.

This patch add separate socketcall tracers to sys_socket, sys_bind, etc.
So people who using ia64(and other arch without sys_socket_call) can trace
each socket calls.

Another benefit is that we can get detail information for those socket calls
now.(we can see only arg1 before this patch)

Signed-off-by: Zhao Lei <zhaolei at cn.fujitsu.com>
---
 include/trace/socket.h |   65 ++++++++++++++++++++++++++++++++++++++++++-----
 net/socket.c           |   63 ++++++++++++++++++++++++++++++++++------------
 2 files changed, 104 insertions(+), 24 deletions(-)

diff --git a/include/trace/socket.h b/include/trace/socket.h
index 60f216c..af7e557 100644
--- a/include/trace/socket.h
+++ b/include/trace/socket.h
@@ -4,21 +4,72 @@
 #include <net/sock.h>
 #include <linux/tracepoint.h>
 
+DECLARE_TRACE(socket_create,
+	TPPROTO(int family, int type, int protocol, struct socket *sock,
+	int ret),
+	TPARGS(family, type, protocol, sock, ret));
+
+DECLARE_TRACE(socket_bind,
+	TPPROTO(int fd, struct sockaddr __user *umyaddr, int addrlen, int ret),
+	TPARGS(fd, umyaddr, addrlen, ret));
+
+DECLARE_TRACE(socket_connect,
+	TPPROTO(int fd, struct sockaddr __user *uservaddr, int addrlen,
+	int ret),
+	TPARGS(fd, uservaddr, addrlen, ret));
+
+DECLARE_TRACE(socket_listen,
+	TPPROTO(int fd, int backlog, int ret),
+	TPARGS(fd, backlog, ret));
+
+DECLARE_TRACE(socket_accept,
+	TPPROTO(int fd, struct sockaddr __user *upeer_sockaddr,
+	int __user *upeer_addrlen, int flags, int ret),
+	TPARGS(fd, upeer_sockaddr, upeer_addrlen, flags, ret));
+
+DECLARE_TRACE(socket_getsockname,
+	TPPROTO(int fd, struct sockaddr __user *usockaddr,
+	int __user *usockaddr_len, int ret),
+	TPARGS(fd, usockaddr, usockaddr_len, ret));
+
+DECLARE_TRACE(socket_getpeername,
+	TPPROTO(int fd, struct sockaddr __user *usockaddr,
+	int __user *usockaddr_len, int ret),
+	TPARGS(fd, usockaddr, usockaddr_len, ret));
+
+DECLARE_TRACE(socket_socketpair,
+	TPPROTO(int family, int type, int protocol, int __user *usockvec,
+	int ret),
+	TPARGS(family, type, protocol, usockvec, ret));
+
 DECLARE_TRACE(socket_sendmsg,
 	TPPROTO(struct socket *sock, struct msghdr *msg, size_t size, int ret),
 	TPARGS(sock, msg, size, ret));
+
 DECLARE_TRACE(socket_recvmsg,
-	TPPROTO(struct socket *sock, struct msghdr *msg, size_t size, int flags,
-		int ret),
+	TPPROTO(struct socket *sock, struct msghdr *msg, size_t size,
+	int flags, int ret),
 	TPARGS(sock, msg, size, flags, ret));
-DECLARE_TRACE(socket_create,
-	TPPROTO(struct socket *sock, int fd),
-	TPARGS(sock, fd));
+
+DECLARE_TRACE(socket_setsockopt,
+	TPPROTO(int fd, int level, int optname, char __user *optval,
+	int optlen, int ret),
+	TPARGS(fd, level, optname, optval, optlen, ret));
+
+DECLARE_TRACE(socket_getsockopt,
+	TPPROTO(int fd, int level, int optname, char __user *optval,
+	int __user *optlen, int ret),
+	TPARGS(fd, level, optname, optval, optlen, ret));
+
+DECLARE_TRACE(socket_shutdown,
+	TPPROTO(int fd, int how, int ret),
+	TPARGS(fd, how, ret));
+
 /*
  * socket_call
  *
- * TODO : This tracepoint should be expanded to cover each element of the
- * switch in sys_socketcall().
+ * We also trace socket_call so we can know which syscall is used by user
+ * (socket_call or sock_send...)
  */
 DECLARE_TRACE(socket_call,
 	TPPROTO(int call, unsigned long a0),
diff --git a/net/socket.c b/net/socket.c
index 6cf37f8..f8f1ac9 100644
--- a/net/socket.c
+++ b/net/socket.c
@@ -156,9 +156,19 @@ static const struct net_proto_family *net_families[NPROTO] __read_mostly;
 
 static DEFINE_PER_CPU(int, sockets_in_use) = 0;
 
+DEFINE_TRACE(socket_create);
+DEFINE_TRACE(socket_bind);
+DEFINE_TRACE(socket_connect);
+DEFINE_TRACE(socket_listen);
+DEFINE_TRACE(socket_accept);
+DEFINE_TRACE(socket_getsockname);
+DEFINE_TRACE(socket_getpeername);
+DEFINE_TRACE(socket_socketpair);
 DEFINE_TRACE(socket_sendmsg);
 DEFINE_TRACE(socket_recvmsg);
-DEFINE_TRACE(socket_create);
+DEFINE_TRACE(socket_setsockopt);
+DEFINE_TRACE(socket_getsockopt);
+DEFINE_TRACE(socket_shutdown);
 DEFINE_TRACE(socket_call);
 
 /*
@@ -1236,8 +1246,10 @@ SYSCALL_DEFINE3(socket, int, family, int, type, int, protocol)
 	BUILD_BUG_ON(SOCK_NONBLOCK & SOCK_TYPE_MASK);
 
 	flags = type & ~SOCK_TYPE_MASK;
-	if (flags & ~(SOCK_CLOEXEC | SOCK_NONBLOCK))
-		return -EINVAL;
+	if (flags & ~(SOCK_CLOEXEC | SOCK_NONBLOCK)) {
+		retval = -EINVAL;
+		goto out;
+	}
 	type &= SOCK_TYPE_MASK;
 
 	if (SOCK_NONBLOCK != O_NONBLOCK && (flags & SOCK_NONBLOCK))
@@ -1251,13 +1263,12 @@ SYSCALL_DEFINE3(socket, int, family, int, type, int, protocol)
 	if (retval < 0)
 		goto out_release;
 
-	trace_socket_create(sock, retval);
-out:
-	/* It may be already another descriptor 8) Not kernel problem. */
-	return retval;
-
+	goto out;
 out_release:
 	sock_release(sock);
+out:
+	trace_socket_create(family, type, protocol, sock, retval);
+	/* It may be already another descriptor 8) Not kernel problem. */
 	return retval;
 }
 
@@ -1274,8 +1285,10 @@ SYSCALL_DEFINE4(socketpair, int, family, int, type, int, protocol,
 	int flags;
 
 	flags = type & ~SOCK_TYPE_MASK;
-	if (flags & ~(SOCK_CLOEXEC | SOCK_NONBLOCK))
-		return -EINVAL;
+	if (flags & ~(SOCK_CLOEXEC | SOCK_NONBLOCK)) {
+		err = -EINVAL;
+		goto out;
+	}
 	type &= SOCK_TYPE_MASK;
 
 	if (SOCK_NONBLOCK != O_NONBLOCK && (flags & SOCK_NONBLOCK))
@@ -1334,17 +1347,18 @@ SYSCALL_DEFINE4(socketpair, int, family, int, type, int, protocol,
 	if (!err)
 		err = put_user(fd2, &usockvec[1]);
 	if (!err)
-		return 0;
+		goto out;
 
 	sys_close(fd2);
 	sys_close(fd1);
-	return err;
+	goto out;
 
 out_release_both:
 	sock_release(sock2);
 out_release_1:
 	sock_release(sock1);
 out:
+	trace_socket_socketpair(family, type, protocol, usockvec, err);
 	return err;
 
 out_fd2:
@@ -1386,6 +1400,7 @@ SYSCALL_DEFINE3(bind, int, fd, struct sockaddr __user *, umyaddr, int, addrlen)
 		}
 		fput_light(sock->file, fput_needed);
 	}
+	trace_socket_bind(fd, umyaddr, addrlen, err);
 	return err;
 }
 
@@ -1413,6 +1428,7 @@ SYSCALL_DEFINE2(listen, int, fd, int, backlog)
 
 		fput_light(sock->file, fput_needed);
 	}
+	trace_socket_listen(fd, backlog, err);
 	return err;
 }
 
@@ -1436,8 +1452,10 @@ SYSCALL_DEFINE4(accept4, int, fd, struct sockaddr __user *, upeer_sockaddr,
 	int err, len, newfd, fput_needed;
 	struct sockaddr_storage address;
 
-	if (flags & ~(SOCK_CLOEXEC | SOCK_NONBLOCK))
-		return -EINVAL;
+	if (flags & ~(SOCK_CLOEXEC | SOCK_NONBLOCK)) {
+		err = -EINVAL;
+		goto out;
+	}
 
 	if (SOCK_NONBLOCK != O_NONBLOCK && (flags & SOCK_NONBLOCK))
 		flags = (flags & ~SOCK_NONBLOCK) | O_NONBLOCK;
@@ -1500,6 +1518,7 @@ SYSCALL_DEFINE4(accept4, int, fd, struct sockaddr __user *, upeer_sockaddr,
 out_put:
 	fput_light(sock->file, fput_needed);
 out:
+	trace_socket_accept(fd, upeer_sockaddr, upeer_addrlen, flags, err);
 	return err;
 out_fd_simple:
 	sock_release(newsock);
@@ -1554,6 +1573,7 @@ SYSCALL_DEFINE3(connect, int, fd, struct sockaddr __user *, uservaddr,
 out_put:
 	fput_light(sock->file, fput_needed);
 out:
+	trace_socket_connect(fd, uservaddr, addrlen, err);
 	return err;
 }
 
@@ -1585,6 +1605,7 @@ SYSCALL_DEFINE3(getsockname, int, fd, struct sockaddr __user *, usockaddr,
 out_put:
 	fput_light(sock->file, fput_needed);
 out:
+	trace_socket_getsockname(fd, usockaddr, usockaddr_len, err);
 	return err;
 }
 
@@ -1605,7 +1626,7 @@ SYSCALL_DEFINE3(getpeername, int, fd, struct sockaddr __user *, usockaddr,
 		err = security_socket_getpeername(sock);
 		if (err) {
 			fput_light(sock->file, fput_needed);
-			return err;
+			goto out;
 		}
 
 		err =
@@ -1616,6 +1637,8 @@ SYSCALL_DEFINE3(getpeername, int, fd, struct sockaddr __user *, usockaddr,
 						usockaddr_len);
 		fput_light(sock->file, fput_needed);
 	}
+out:
+	trace_socket_getpeername(fd, usockaddr, usockaddr_len, err);
 	return err;
 }
 
@@ -1742,8 +1765,10 @@ SYSCALL_DEFINE5(setsockopt, int, fd, int, level, int, optname,
 	int err, fput_needed;
 	struct socket *sock;
 
-	if (optlen < 0)
-		return -EINVAL;
+	if (optlen < 0) {
+		err = -EINVAL;
+		goto out;
+	}
 
 	sock = sockfd_lookup_light(fd, &err, &fput_needed);
 	if (sock != NULL) {
@@ -1762,6 +1787,8 @@ SYSCALL_DEFINE5(setsockopt, int, fd, int, level, int, optname,
 out_put:
 		fput_light(sock->file, fput_needed);
 	}
+out:
+	trace_socket_setsockopt(fd, level, optname, optval, optlen, err);
 	return err;
 }
 
@@ -1793,6 +1820,7 @@ SYSCALL_DEFINE5(getsockopt, int, fd, int, level, int, optname,
 out_put:
 		fput_light(sock->file, fput_needed);
 	}
+	trace_socket_getsockopt(fd, level, optname, optval, optlen, err);
 	return err;
 }
 
@@ -1812,6 +1840,7 @@ SYSCALL_DEFINE2(shutdown, int, fd, int, how)
 			err = sock->ops->shutdown(sock, how);
 		fput_light(sock->file, fput_needed);
 	}
+	trace_socket_shutdown(fd, how, err);
 	return err;
 }
 
-- 
1.5.5.3






^ permalink raw reply	[flat|nested] 14+ messages in thread

* [ltt-dev] [PATCH v2 0/2] Separate socketcall tracepoint.
  2009-02-10 11:28     ` KOSAKI Motohiro
                         ` (3 preceding siblings ...)
  2009-02-10 11:47       ` [ltt-dev] [PATCH v2 1/2] Separate " Zhaolei
@ 2009-02-10 11:47       ` Zhaolei
  4 siblings, 0 replies; 14+ messages in thread
From: Zhaolei @ 2009-02-10 11:47 UTC (permalink / raw)


Hello,

Thanks for kosaki-san's comment for this patch.
I resend v2 patch to add detail description now.

Regards
Zhaolei






^ permalink raw reply	[flat|nested] 14+ messages in thread

* [ltt-dev] [PATCH 0/2] Separate socketcall tracepoint
  2009-02-10 11:43       ` [ltt-dev] [PATCH 0/2] " Zhaolei
@ 2009-02-10 11:51         ` Zhaolei
  2009-02-10 17:32           ` Mathieu Desnoyers
  0 siblings, 1 reply; 14+ messages in thread
From: Zhaolei @ 2009-02-10 11:51 UTC (permalink / raw)


* Zhaolei wrote:
> Hello,
> 
> Thanks for kosaki-san's comment for this patch.
> I resend v2 patch to add detail description now.
> 
> Regards
> Zhaolei
> 
Hello, 

Sorry for my wrong title of v2 patch.

Please ignore mail with following title:
  [PATCH v2] Separate socketcall tracepoint
  [PATCH 0/2] Separate socketcall tracepoint

V2 patch is made up of following mail:
  [PATCH v2 2/2] Make ltt support separate socketcalltracepoint.
  [PATCH v2 1/2] Separate socketcall tracepoint.
  [PATCH v2 0/2] Separate socketcall tracepoint.

Regards
Zhaolei





^ permalink raw reply	[flat|nested] 14+ messages in thread

* [ltt-dev] [PATCH 0/2] Separate socketcall tracepoint
  2009-02-10 11:51         ` Zhaolei
@ 2009-02-10 17:32           ` Mathieu Desnoyers
  0 siblings, 0 replies; 14+ messages in thread
From: Mathieu Desnoyers @ 2009-02-10 17:32 UTC (permalink / raw)


* Zhaolei (zhaolei at cn.fujitsu.com) wrote:
> * Zhaolei wrote:
> > Hello,
> > 
> > Thanks for kosaki-san's comment for this patch.
> > I resend v2 patch to add detail description now.
> > 
> > Regards
> > Zhaolei
> > 
> Hello, 
> 
> Sorry for my wrong title of v2 patch.
> 
> Please ignore mail with following title:
>   [PATCH v2] Separate socketcall tracepoint
>   [PATCH 0/2] Separate socketcall tracepoint
> 
> V2 patch is made up of following mail:
>   [PATCH v2 2/2] Make ltt support separate socketcalltracepoint.
>   [PATCH v2 1/2] Separate socketcall tracepoint.
>   [PATCH v2 0/2] Separate socketcall tracepoint.
> 

OK, I'll review this soon. Thanks for the good work, that was indeed
needed.

Mathieu

> Regards
> Zhaolei
> 
> 
> _______________________________________________
> ltt-dev mailing list
> ltt-dev at lists.casi.polymtl.ca
> http://lists.casi.polymtl.ca/cgi-bin/mailman/listinfo/ltt-dev
> 

-- 
Mathieu Desnoyers
OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F  BA06 3F25 A8FE 3BAE 9A68




^ permalink raw reply	[flat|nested] 14+ messages in thread

* [ltt-dev] [PATCH v2 1/2] Separate socketcall tracepoint.
  2009-02-10 11:47       ` [ltt-dev] [PATCH v2 1/2] Separate " Zhaolei
@ 2009-02-11  5:22         ` Mathieu Desnoyers
  0 siblings, 0 replies; 14+ messages in thread
From: Mathieu Desnoyers @ 2009-02-11  5:22 UTC (permalink / raw)


* Zhaolei (zhaolei at cn.fujitsu.com) wrote:
> Now lttng trace only sys_socket_call for sys_socket, sys_bind and others.
> But on some arch(for ex, ia64) which lacks of sys_socket_call, we can't get
> those syscall traced.
> 
> This patch add separate socketcall tracers to sys_socket, sys_bind, etc.
> So people who using ia64(and other arch without sys_socket_call) can trace
> each socket calls.
> 
> Another benefit is that we can get detail information for those socket calls
> now.(we can see only arg1 before this patch)
> 
> Signed-off-by: Zhao Lei <zhaolei at cn.fujitsu.com>
> ---
>  include/trace/socket.h |   65 ++++++++++++++++++++++++++++++++++++++++++-----
>  net/socket.c           |   63 ++++++++++++++++++++++++++++++++++------------
>  2 files changed, 104 insertions(+), 24 deletions(-)
> 
> diff --git a/include/trace/socket.h b/include/trace/socket.h
> index 60f216c..af7e557 100644
> --- a/include/trace/socket.h
> +++ b/include/trace/socket.h
> @@ -4,21 +4,72 @@
>  #include <net/sock.h>
>  #include <linux/tracepoint.h>
>  
> +DECLARE_TRACE(socket_create,
> +	TPPROTO(int family, int type, int protocol, struct socket *sock,
> +	int ret),
> +	TPARGS(family, type, protocol, sock, ret));
> +
> +DECLARE_TRACE(socket_bind,
> +	TPPROTO(int fd, struct sockaddr __user *umyaddr, int addrlen, int ret),
> +	TPARGS(fd, umyaddr, addrlen, ret));
> +
> +DECLARE_TRACE(socket_connect,
> +	TPPROTO(int fd, struct sockaddr __user *uservaddr, int addrlen,
> +	int ret),
> +	TPARGS(fd, uservaddr, addrlen, ret));
> +
> +DECLARE_TRACE(socket_listen,
> +	TPPROTO(int fd, int backlog, int ret),
> +	TPARGS(fd, backlog, ret));
> +
> +DECLARE_TRACE(socket_accept,
> +	TPPROTO(int fd, struct sockaddr __user *upeer_sockaddr,
> +	int __user *upeer_addrlen, int flags, int ret),
> +	TPARGS(fd, upeer_sockaddr, upeer_addrlen, flags, ret));
> +
> +DECLARE_TRACE(socket_getsockname,
> +	TPPROTO(int fd, struct sockaddr __user *usockaddr,
> +	int __user *usockaddr_len, int ret),
> +	TPARGS(fd, usockaddr, usockaddr_len, ret));
> +
> +DECLARE_TRACE(socket_getpeername,
> +	TPPROTO(int fd, struct sockaddr __user *usockaddr,
> +	int __user *usockaddr_len, int ret),
> +	TPARGS(fd, usockaddr, usockaddr_len, ret));
> +
> +DECLARE_TRACE(socket_socketpair,
> +	TPPROTO(int family, int type, int protocol, int __user *usockvec,
> +	int ret),
> +	TPARGS(family, type, protocol, usockvec, ret));
> +
>  DECLARE_TRACE(socket_sendmsg,
>  	TPPROTO(struct socket *sock, struct msghdr *msg, size_t size, int ret),
>  	TPARGS(sock, msg, size, ret));
> +
>  DECLARE_TRACE(socket_recvmsg,
> -	TPPROTO(struct socket *sock, struct msghdr *msg, size_t size, int flags,
> -		int ret),
> +	TPPROTO(struct socket *sock, struct msghdr *msg, size_t size,
> +	int flags, int ret),

Fixed the coding style here. Merged in 2.6.29-rc4.

Thanks !

Mathieu

>  	TPARGS(sock, msg, size, flags, ret));
> -DECLARE_TRACE(socket_create,
> -	TPPROTO(struct socket *sock, int fd),
> -	TPARGS(sock, fd));
> +
> +DECLARE_TRACE(socket_setsockopt,
> +	TPPROTO(int fd, int level, int optname, char __user *optval,
> +	int optlen, int ret),
> +	TPARGS(fd, level, optname, optval, optlen, ret));
> +
> +DECLARE_TRACE(socket_getsockopt,
> +	TPPROTO(int fd, int level, int optname, char __user *optval,
> +	int __user *optlen, int ret),
> +	TPARGS(fd, level, optname, optval, optlen, ret));
> +
> +DECLARE_TRACE(socket_shutdown,
> +	TPPROTO(int fd, int how, int ret),
> +	TPARGS(fd, how, ret));
> +
>  /*
>   * socket_call
>   *
> - * TODO : This tracepoint should be expanded to cover each element of the
> - * switch in sys_socketcall().
> + * We also trace socket_call so we can know which syscall is used by user
> + * (socket_call or sock_send...)
>   */
>  DECLARE_TRACE(socket_call,
>  	TPPROTO(int call, unsigned long a0),
> diff --git a/net/socket.c b/net/socket.c
> index 6cf37f8..f8f1ac9 100644
> --- a/net/socket.c
> +++ b/net/socket.c
> @@ -156,9 +156,19 @@ static const struct net_proto_family *net_families[NPROTO] __read_mostly;
>  
>  static DEFINE_PER_CPU(int, sockets_in_use) = 0;
>  
> +DEFINE_TRACE(socket_create);
> +DEFINE_TRACE(socket_bind);
> +DEFINE_TRACE(socket_connect);
> +DEFINE_TRACE(socket_listen);
> +DEFINE_TRACE(socket_accept);
> +DEFINE_TRACE(socket_getsockname);
> +DEFINE_TRACE(socket_getpeername);
> +DEFINE_TRACE(socket_socketpair);
>  DEFINE_TRACE(socket_sendmsg);
>  DEFINE_TRACE(socket_recvmsg);
> -DEFINE_TRACE(socket_create);
> +DEFINE_TRACE(socket_setsockopt);
> +DEFINE_TRACE(socket_getsockopt);
> +DEFINE_TRACE(socket_shutdown);
>  DEFINE_TRACE(socket_call);
>  
>  /*
> @@ -1236,8 +1246,10 @@ SYSCALL_DEFINE3(socket, int, family, int, type, int, protocol)
>  	BUILD_BUG_ON(SOCK_NONBLOCK & SOCK_TYPE_MASK);
>  
>  	flags = type & ~SOCK_TYPE_MASK;
> -	if (flags & ~(SOCK_CLOEXEC | SOCK_NONBLOCK))
> -		return -EINVAL;
> +	if (flags & ~(SOCK_CLOEXEC | SOCK_NONBLOCK)) {
> +		retval = -EINVAL;
> +		goto out;
> +	}
>  	type &= SOCK_TYPE_MASK;
>  
>  	if (SOCK_NONBLOCK != O_NONBLOCK && (flags & SOCK_NONBLOCK))
> @@ -1251,13 +1263,12 @@ SYSCALL_DEFINE3(socket, int, family, int, type, int, protocol)
>  	if (retval < 0)
>  		goto out_release;
>  
> -	trace_socket_create(sock, retval);
> -out:
> -	/* It may be already another descriptor 8) Not kernel problem. */
> -	return retval;
> -
> +	goto out;
>  out_release:
>  	sock_release(sock);
> +out:
> +	trace_socket_create(family, type, protocol, sock, retval);
> +	/* It may be already another descriptor 8) Not kernel problem. */
>  	return retval;
>  }
>  
> @@ -1274,8 +1285,10 @@ SYSCALL_DEFINE4(socketpair, int, family, int, type, int, protocol,
>  	int flags;
>  
>  	flags = type & ~SOCK_TYPE_MASK;
> -	if (flags & ~(SOCK_CLOEXEC | SOCK_NONBLOCK))
> -		return -EINVAL;
> +	if (flags & ~(SOCK_CLOEXEC | SOCK_NONBLOCK)) {
> +		err = -EINVAL;
> +		goto out;
> +	}
>  	type &= SOCK_TYPE_MASK;
>  
>  	if (SOCK_NONBLOCK != O_NONBLOCK && (flags & SOCK_NONBLOCK))
> @@ -1334,17 +1347,18 @@ SYSCALL_DEFINE4(socketpair, int, family, int, type, int, protocol,
>  	if (!err)
>  		err = put_user(fd2, &usockvec[1]);
>  	if (!err)
> -		return 0;
> +		goto out;
>  
>  	sys_close(fd2);
>  	sys_close(fd1);
> -	return err;
> +	goto out;
>  
>  out_release_both:
>  	sock_release(sock2);
>  out_release_1:
>  	sock_release(sock1);
>  out:
> +	trace_socket_socketpair(family, type, protocol, usockvec, err);
>  	return err;
>  
>  out_fd2:
> @@ -1386,6 +1400,7 @@ SYSCALL_DEFINE3(bind, int, fd, struct sockaddr __user *, umyaddr, int, addrlen)
>  		}
>  		fput_light(sock->file, fput_needed);
>  	}
> +	trace_socket_bind(fd, umyaddr, addrlen, err);
>  	return err;
>  }
>  
> @@ -1413,6 +1428,7 @@ SYSCALL_DEFINE2(listen, int, fd, int, backlog)
>  
>  		fput_light(sock->file, fput_needed);
>  	}
> +	trace_socket_listen(fd, backlog, err);
>  	return err;
>  }
>  
> @@ -1436,8 +1452,10 @@ SYSCALL_DEFINE4(accept4, int, fd, struct sockaddr __user *, upeer_sockaddr,
>  	int err, len, newfd, fput_needed;
>  	struct sockaddr_storage address;
>  
> -	if (flags & ~(SOCK_CLOEXEC | SOCK_NONBLOCK))
> -		return -EINVAL;
> +	if (flags & ~(SOCK_CLOEXEC | SOCK_NONBLOCK)) {
> +		err = -EINVAL;
> +		goto out;
> +	}
>  
>  	if (SOCK_NONBLOCK != O_NONBLOCK && (flags & SOCK_NONBLOCK))
>  		flags = (flags & ~SOCK_NONBLOCK) | O_NONBLOCK;
> @@ -1500,6 +1518,7 @@ SYSCALL_DEFINE4(accept4, int, fd, struct sockaddr __user *, upeer_sockaddr,
>  out_put:
>  	fput_light(sock->file, fput_needed);
>  out:
> +	trace_socket_accept(fd, upeer_sockaddr, upeer_addrlen, flags, err);
>  	return err;
>  out_fd_simple:
>  	sock_release(newsock);
> @@ -1554,6 +1573,7 @@ SYSCALL_DEFINE3(connect, int, fd, struct sockaddr __user *, uservaddr,
>  out_put:
>  	fput_light(sock->file, fput_needed);
>  out:
> +	trace_socket_connect(fd, uservaddr, addrlen, err);
>  	return err;
>  }
>  
> @@ -1585,6 +1605,7 @@ SYSCALL_DEFINE3(getsockname, int, fd, struct sockaddr __user *, usockaddr,
>  out_put:
>  	fput_light(sock->file, fput_needed);
>  out:
> +	trace_socket_getsockname(fd, usockaddr, usockaddr_len, err);
>  	return err;
>  }
>  
> @@ -1605,7 +1626,7 @@ SYSCALL_DEFINE3(getpeername, int, fd, struct sockaddr __user *, usockaddr,
>  		err = security_socket_getpeername(sock);
>  		if (err) {
>  			fput_light(sock->file, fput_needed);
> -			return err;
> +			goto out;
>  		}
>  
>  		err =
> @@ -1616,6 +1637,8 @@ SYSCALL_DEFINE3(getpeername, int, fd, struct sockaddr __user *, usockaddr,
>  						usockaddr_len);
>  		fput_light(sock->file, fput_needed);
>  	}
> +out:
> +	trace_socket_getpeername(fd, usockaddr, usockaddr_len, err);
>  	return err;
>  }
>  
> @@ -1742,8 +1765,10 @@ SYSCALL_DEFINE5(setsockopt, int, fd, int, level, int, optname,
>  	int err, fput_needed;
>  	struct socket *sock;
>  
> -	if (optlen < 0)
> -		return -EINVAL;
> +	if (optlen < 0) {
> +		err = -EINVAL;
> +		goto out;
> +	}
>  
>  	sock = sockfd_lookup_light(fd, &err, &fput_needed);
>  	if (sock != NULL) {
> @@ -1762,6 +1787,8 @@ SYSCALL_DEFINE5(setsockopt, int, fd, int, level, int, optname,
>  out_put:
>  		fput_light(sock->file, fput_needed);
>  	}
> +out:
> +	trace_socket_setsockopt(fd, level, optname, optval, optlen, err);
>  	return err;
>  }
>  
> @@ -1793,6 +1820,7 @@ SYSCALL_DEFINE5(getsockopt, int, fd, int, level, int, optname,
>  out_put:
>  		fput_light(sock->file, fput_needed);
>  	}
> +	trace_socket_getsockopt(fd, level, optname, optval, optlen, err);
>  	return err;
>  }
>  
> @@ -1812,6 +1840,7 @@ SYSCALL_DEFINE2(shutdown, int, fd, int, how)
>  			err = sock->ops->shutdown(sock, how);
>  		fput_light(sock->file, fput_needed);
>  	}
> +	trace_socket_shutdown(fd, how, err);
>  	return err;
>  }
>  
> -- 
> 1.5.5.3
> 
> 
> 
> _______________________________________________
> ltt-dev mailing list
> ltt-dev at lists.casi.polymtl.ca
> http://lists.casi.polymtl.ca/cgi-bin/mailman/listinfo/ltt-dev
> 

-- 
Mathieu Desnoyers
OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F  BA06 3F25 A8FE 3BAE 9A68




^ permalink raw reply	[flat|nested] 14+ messages in thread

* [ltt-dev] [PATCH v2 2/2] Make ltt support separate socketcall tracepoint.
  2009-02-10 11:46       ` [ltt-dev] [PATCH v2 2/2] Make ltt support separate " Zhaolei
@ 2009-02-11  5:26         ` Mathieu Desnoyers
  0 siblings, 0 replies; 14+ messages in thread
From: Mathieu Desnoyers @ 2009-02-11  5:26 UTC (permalink / raw)


* Zhaolei (zhaolei at cn.fujitsu.com) wrote:
> So ltt can trace these socket syscalls.
> 

Merged for 2.6.29-rc4. Thanks !

Mathieu

> Signed-off-by: Zhao Lei <zhaolei at cn.fujitsu.com>
> ---
>  ltt/probes/net-trace.c |  112 +++++++++++++++++++++++++++++++++++++++++------
>  1 files changed, 97 insertions(+), 15 deletions(-)
> 
> diff --git a/ltt/probes/net-trace.c b/ltt/probes/net-trace.c
> index a30530d..83cf33a 100644
> --- a/ltt/probes/net-trace.c
> +++ b/ltt/probes/net-trace.c
> @@ -75,30 +75,112 @@ void probe_ipv6_addr_del(struct inet6_ifaddr *ifa)
>  		addr[3], addr[2], addr[1], addr[0]);
>  }
>  
> -void probe_socket_sendmsg(struct socket *sock, struct msghdr *msg,
> -		size_t size, int ret)
> +void probe_socket_create(int family, int type, int protocol,
> +	struct socket *sock, int ret)
> +{
> +	trace_mark_tp(net, socket_create, socket_create, probe_socket_create,
> +		"family %d type %d protocol %d sock %p ret %d",
> +		family, type, protocol, sock, ret);
> +}
> +
> +void probe_socket_bind(int fd, struct sockaddr __user *umyaddr, int addrlen,
> +	int ret)
> +{
> +	trace_mark_tp(net, socket_bind, socket_bind, probe_socket_bind,
> +		"fd %d umyaddr %p addrlen %d ret %d",
> +		fd, umyaddr, addrlen, ret);
> +}
> +
> +void probe_socket_connect(int fd, struct sockaddr __user *uservaddr,
> +	int addrlen, int ret)
> +{
> +	trace_mark_tp(net, socket_connect, socket_connect, probe_socket_connect,
> +		"fd %d uservaddr %p addrlen %d ret %d",
> +		fd, uservaddr, addrlen, ret);
> +}
> +
> +void probe_socket_listen(int fd, int backlog, int ret)
> +{
> +	trace_mark_tp(net, socket_listen, socket_listen, probe_socket_listen,
> +		"fd %d backlog %d ret %d",
> +		fd, backlog, ret);
> +}
> +
> +void probe_socket_accept(int fd, struct sockaddr __user *upeer_sockaddr,
> +	int __user *upeer_addrlen, int flags, int ret)
> +{
> +	trace_mark_tp(net, socket_accept, socket_accept, probe_socket_accept,
> +		"fd %d upeer_sockaddr %p upeer_addrlen %p flags %d ret %d",
> +		fd, upeer_sockaddr, upeer_addrlen, flags, ret);
> +}
> +
> +void probe_socket_getsockname(int fd, struct sockaddr __user *usockaddr,
> +	int __user *usockaddr_len, int ret)
> +{
> +	trace_mark_tp(net, socket_getsockname, socket_getsockname,
> +		probe_socket_getsockname,
> +		"fd %d usockaddr %p usockaddr_len %p ret %d",
> +		fd, usockaddr, usockaddr_len, ret);
> +}
> +
> +void probe_socket_getpeername(int fd, struct sockaddr __user *usockaddr,
> +	int __user *usockaddr_len, int ret)
> +{
> +	trace_mark_tp(net, socket_getpeername, socket_getpeername,
> +		probe_socket_getpeername,
> +		"fd %d usockaddr %p usockaddr_len %p ret %d",
> +		fd, usockaddr, usockaddr_len, ret);
> +}
> +
> +void probe_socket_socketpair(int family, int type, int protocol,
> +	int __user *usockvec, int ret)
> +{
> +	trace_mark_tp(net, socket_socketpair, socket_socketpair,
> +		probe_socket_socketpair,
> +		"family %d type %d protocol %d usockvec %p ret %d",
> +		family, type, protocol, usockvec, ret);
> +}
> +
> +void probe_socket_sendmsg(struct socket *sock, struct msghdr *msg, size_t size,
> +	int ret)
>  {
>  	trace_mark_tp(net, socket_sendmsg, socket_sendmsg, probe_socket_sendmsg,
> -		"sock %p family %d type %d protocol %d size %zu",
> -		sock, sock->sk->sk_family, sock->sk->sk_type,
> -		sock->sk->sk_protocol, size);
> +		"sock %p msg %p size %zu ret %d",
> +		sock, msg, size, ret);
>  }
>  
> -void probe_socket_recvmsg(struct socket *sock, struct msghdr *msg,
> -		size_t size, int flags, int ret)
> +void probe_socket_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
> +	int flags, int ret)
>  {
>  	trace_mark_tp(net, socket_recvmsg, socket_recvmsg, probe_socket_recvmsg,
> -		"sock %p family %d type %d protocol %d size %zu",
> -		sock, sock->sk->sk_family, sock->sk->sk_type,
> -		sock->sk->sk_protocol, size);
> +		"sock %p msg %p size %zu flags %d ret %d",
> +		sock, msg, size, flags, ret);
>  }
>  
> -void probe_socket_create(struct socket *sock, int fd)
> +void probe_socket_setsockopt(int fd, int level, int optname,
> +	char __user *optval, int optlen, int ret)
>  {
> -	trace_mark_tp(net, socket_create, socket_create, probe_socket_create,
> -		"sock %p family %d type %d protocol %d fd %d",
> -		sock, sock->sk->sk_family, sock->sk->sk_type,
> -		sock->sk->sk_protocol, fd);
> +	trace_mark_tp(net, socket_setsockopt, socket_setsockopt,
> +		probe_socket_setsockopt,
> +		"fd %d level %d optname %d optval %p optlen %d ret %d",
> +		fd, level, optname, optval, optlen, ret);
> +}
> +
> +void probe_socket_getsockopt(int fd, int level, int optname,
> +	char __user *optval, int __user *optlen, int ret)
> +{
> +	trace_mark_tp(net, socket_getsockopt, socket_getsockopt,
> +		probe_socket_getsockopt,
> +		"fd %d level %d optname %d optval %p optlen %p ret %d",
> +		fd, level, optname, optval, optlen, ret);
> +}
> +
> +void probe_socket_shutdown(int fd, int how, int ret)
> +{
> +	trace_mark_tp(net, socket_shutdown, socket_shutdown,
> +		probe_socket_shutdown,
> +		"fd %d how %d ret %d",
> +		fd, how, ret);
>  }
>  
>  void probe_socket_call(int call, unsigned long a0)
> -- 
> 1.5.5.3
> 
> 
> 
> _______________________________________________
> ltt-dev mailing list
> ltt-dev at lists.casi.polymtl.ca
> http://lists.casi.polymtl.ca/cgi-bin/mailman/listinfo/ltt-dev
> 

-- 
Mathieu Desnoyers
OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F  BA06 3F25 A8FE 3BAE 9A68




^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2009-02-11  5:26 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-02-09  4:00 [ltt-dev] [PATCH 1/2] Separate socketcall tracepoint Zhaolei
2009-02-09  4:01 ` [ltt-dev] [PATCH 2/2] Make ltt support separate " Zhaolei
2009-02-10 10:30 ` [ltt-dev] [PATCH 1/2] Separate " KOSAKI Motohiro
2009-02-10 11:18   ` Zhaolei
2009-02-10 11:28     ` KOSAKI Motohiro
2009-02-10 11:43       ` [ltt-dev] [PATCH 0/2] " Zhaolei
2009-02-10 11:51         ` Zhaolei
2009-02-10 17:32           ` Mathieu Desnoyers
2009-02-10 11:45       ` [ltt-dev] [PATCH v2] " Zhaolei
2009-02-10 11:46       ` [ltt-dev] [PATCH v2 2/2] Make ltt support separate " Zhaolei
2009-02-11  5:26         ` Mathieu Desnoyers
2009-02-10 11:47       ` [ltt-dev] [PATCH v2 1/2] Separate " Zhaolei
2009-02-11  5:22         ` Mathieu Desnoyers
2009-02-10 11:47       ` [ltt-dev] [PATCH v2 0/2] " Zhaolei

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox