summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteve Dickson <steved@redhat.com>2011-03-18 09:47:12 -0400
committerSteve Dickson <steved@redhat.com>2011-03-18 09:47:12 -0400
commit78a3caac7b9026c824ecc33bb4fb73b84ecede42 (patch)
treec5a0bf9da23ec1571fd3fa4dd1dbbdf27581386e
parentfcdb3fb0a6ed486e996ec87c9a01b2e435bd9a43 (diff)
downloadsystemtap-78a3caac7b9026c824ecc33bb4fb73b84ecede42.tar.gz
systemtap-78a3caac7b9026c824ecc33bb4fb73b84ecede42.tar.xz
systemtap-78a3caac7b9026c824ecc33bb4fb73b84ecede42.zip
Added a couple more probs
Signed-off-by: Steve Dickson <steved@redhat.com>
-rw-r--r--net/tcp_connect.stp7
-rw-r--r--sunrpc/bz680329.stp182
2 files changed, 189 insertions, 0 deletions
diff --git a/net/tcp_connect.stp b/net/tcp_connect.stp
new file mode 100644
index 0000000..4763bb5
--- /dev/null
+++ b/net/tcp_connect.stp
@@ -0,0 +1,7 @@
+probe kernel.function("tcp_v4_connect").return {
+ if (isinstr(execname(), "rpc.nfsd"))
+ printf("%s: tcp_v4_connect: return %d (%s)\n",
+ $return, errno_str($return));
+}
+probe begin { log("starting tcp_v4_connect probe") }
+probe end { log("tcp_v4_connect inet_bind probe") }
diff --git a/sunrpc/bz680329.stp b/sunrpc/bz680329.stp
new file mode 100644
index 0000000..b464493
--- /dev/null
+++ b/sunrpc/bz680329.stp
@@ -0,0 +1,182 @@
+#!/usr/bin/stap -vg
+
+%{
+#include <linux/sunrpc/xprt.h>
+%}
+
+function xprt_connected:long(xprt:long) %{
+ struct rpc_xprt *_xprt = (struct rpc_xprt *)(long)THIS->xprt;
+ THIS->__retvalue = (long)xprt_connected(_xprt);
+%}
+
+function xprt_connecting:long(xprt:long) %{
+ struct rpc_xprt *_xprt = (struct rpc_xprt *)(long)THIS->xprt;
+ THIS->__retvalue = (long)xprt_connecting(_xprt);
+%}
+
+function sk_state:string(sk:long) {
+ state = @cast(sk, "sock_common")->skc_state
+ if (state == 1) {
+ return "ESTABLISHED"
+ } else if (state == 2) {
+ return "SYN_SENT"
+ } else if (state == 3) {
+ return "SYN_RECV"
+ } else if (state == 4) {
+ return "FIN_WAIT1"
+ } else if (state == 5) {
+ return "FIN_WAIT2"
+ } else if (state == 6) {
+ return "TIME_WAIT"
+ } else if (state == 7) {
+ return "CLOSE"
+ } else if (state == 8) {
+ return "CLOSE_WAIT"
+ } else if (state == 9) {
+ return "LAST_ACK"
+ } else if (state == 10) {
+ return "LISTEN"
+ } else if (state == 11) {
+ return "CLOSING"
+ }
+ return sprintf("%d", state)
+}
+
+function strerr:string(e:long) {
+ if (e == -99) {
+ return "-EADDRNOTAVAILE"
+ } else if (e == -111) {
+ return "-ECONNREFUSED"
+ } else if (e == -104) {
+ return "-ECONNRESET"
+ } else if (e == -101) {
+ return "-ENETUNREACH"
+ } else if (e == -115) {
+ return "-EINPROGRESS"
+ } else if (e == -114) {
+ return "-EALREADY"
+ } else if (e == -22) {
+ return "-EINVAL"
+ }
+ return sprintf("%d", e)
+}
+
+function addrfam:string(f:long) {
+ if (f == 0) {
+ return "AF_UNSPEC"
+ } else if (f == 2) {
+ return "AF_INET"
+ }
+ return sprintf("%u", f)
+}
+
+probe begin {
+ printf("%s Trace start\n", ctime(gettimeofday_s()))
+}
+
+probe module("sunrpc").function("xprt_connect") {
+ if ($task->tk_client->cl_xprt->prot == 6) {
+ printf("%s --> %s() tk_pid=%u xprt=%p (%s)\n",
+ ctime(gettimeofday_s()), probefunc(),
+ $task->tk_pid, $task->tk_client->cl_xprt,
+ xprt_connected($task->tk_client->cl_xprt) ?
+ "connected" : "not connected")
+ }
+}
+
+probe module("sunrpc").function("xprt_connect").return {
+ if ($task->tk_client->cl_xprt->prot == 6) {
+ printf("%s <-- %s() tk_pid=%u\n\n",
+ ctime(gettimeofday_s()), probefunc(),
+ $task->tk_pid)
+ }
+}
+
+probe module("sunrpc").function("xs_connect") {
+ if ($task->tk_client->cl_xprt->prot == 6) {
+ connecting = xprt_connecting($task->tk_client->cl_xprt)
+ if (connecting) {
+ printf("%s --> %s() tk_pid=%u socket=%p (connecting, do nothing)\n",
+ ctime(gettimeofday_s()), probefunc(),
+ $task->tk_pid, $task->tk_client->cl_xprt->sock)
+ }
+ else if ($task->tk_client->cl_xprt->sock == 0) {
+ printf("%s --> %s() tk_pid=%u socket=%p (not connecting, queue work)\n",
+ ctime(gettimeofday_s()), probefunc(),
+ $task->tk_pid, $task->tk_client->cl_xprt->sock)
+ }
+ else {
+ printf("%s --> %s() tk_pid=%u socket=%p (not connecting, queue delayed work) reestablish_timeout=%d\n",
+ ctime(gettimeofday_s()), probefunc(),
+ $task->tk_pid, $task->tk_client->cl_xprt->sock,
+ $task->tk_client->cl_xprt->reestablish_timeout)
+ }
+ }
+}
+
+probe module("sunrpc").function("xs_connect").return {
+ if ($task->tk_client->cl_xprt->prot == 6) {
+ printf("%s <-- %s() tk_pid=%u\n",
+ ctime(gettimeofday_s()), probefunc(),
+ $task->tk_pid)
+ }
+}
+
+probe module("sunrpc").function("xs_tcp_connect_worker") {
+ if (@cast($args, "rpc_xprt")->sock == 0) {
+ printf("%s --> %s() xprt=%p socket=%p\n",
+ ctime(gettimeofday_s()), probefunc(),
+ $args, @cast($args, "rpc_xprt")->sock)
+ }
+ else {
+ printf("%s --> %s() xprt=%p socket=%p sk_state=%s\n",
+ ctime(gettimeofday_s()), probefunc(),
+ $args, @cast($args, "rpc_xprt")->sock,
+ sk_state(@cast($args, "rpc_xprt")->sock->sk))
+ }
+}
+
+probe module("sunrpc").function("xs_tcp_connect_worker").return {
+ printf("%s <-- %s()\n\n",
+ ctime(gettimeofday_s()), probefunc())
+}
+
+probe module("sunrpc").function("xs_tcp_reuse_connection") {
+ printf("%s --> %s()\n",
+ ctime(gettimeofday_s()), probefunc())
+}
+
+probe kernel.function("kernel_connect") {
+ printf("%s --> %s() socket=%p sock=%p family=%s\n",
+ ctime(gettimeofday_s()), probefunc(),
+ $sock, $sock->sk, addrfam($addr->sa_family))
+}
+
+probe kernel.function("kernel_connect").return {
+ printf("%s <-- %s() return=%s\n",
+ ctime(gettimeofday_s()), probefunc(),
+ strerr($return))
+}
+
+probe module("sunrpc").function("xs_tcp_state_change") {
+ printf("%s --> %s() sock=%p sk_state=%s\n",
+ ctime(gettimeofday_s()), probefunc(),
+ $sk, sk_state($sk))
+}
+
+probe module("sunrpc").function("xs_tcp_state_change").return {
+ printf("%s <-- %s()\n\n",
+ ctime(gettimeofday_s()), probefunc())
+}
+
+probe module("sunrpc").function("__rpc_default_timer") {
+ printf("%s --> %s(): tk_pid=%u Timed out\n",
+ ctime(gettimeofday_s()), probefunc(),
+ $task->tk_pid)
+}
+
+probe module("sunrpc").function("__rpc_default_timer").return {
+ printf("%s <-- %s()\n\n",
+ ctime(gettimeofday_s()), probefunc())
+}
+