summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteve Dickson <steved@redhat.com>2009-04-02 17:06:22 -0400
committerSteve Dickson <steved@redhat.com>2009-04-02 17:06:22 -0400
commit22fed7bfcd58bb39862dbf7b8bc1d6c532d139c8 (patch)
tree40310b5148439317458dce7acef10f3e94872888
parent7fc13f1a2640db17b06352c35ce0b99ed6582f9d (diff)
downloadsystemtap-22fed7bfcd58bb39862dbf7b8bc1d6c532d139c8.tar.gz
systemtap-22fed7bfcd58bb39862dbf7b8bc1d6c532d139c8.tar.xz
systemtap-22fed7bfcd58bb39862dbf7b8bc1d6c532d139c8.zip
Changed sunrpc-xprtsock to correctly display rpcbind status
Signed-off-by: Steve Dickson <steved@redhat.com>
-rw-r--r--sunrpc/sunrpc-xprtsock.stp43
1 files changed, 37 insertions, 6 deletions
diff --git a/sunrpc/sunrpc-xprtsock.stp b/sunrpc/sunrpc-xprtsock.stp
index 8d560df..b76a9b7 100644
--- a/sunrpc/sunrpc-xprtsock.stp
+++ b/sunrpc/sunrpc-xprtsock.stp
@@ -2,8 +2,31 @@
#include <linux/kernel.h>
#include <linux/sunrpc/clnt.h>
#include <linux/sunrpc/svc.h>
+
+struct rpcbind_args {
+ struct rpc_xprt * r_xprt;
+
+ u32 r_prog;
+ u32 r_vers;
+ u32 r_prot;
+ unsigned short r_port;
+ const char * r_netid;
+ const char * r_addr;
+ const char * r_owner;
+
+ int r_status;
+};
%}
+function rpcb_status:long(_rpc:long)
+%{
+ struct rpcbind_args *rpc =
+ (struct rpcbind_args *)(long) kread(&(THIS->_rpc));
+
+ THIS->__retvalue = rpc->r_status;
+
+ CATCH_DEREF_FAULT();
+%}
function task_status:long(_task:long)
%{
struct rpc_task *task = (struct rpc_task *)(long) kread(&(THIS->_task));
@@ -51,15 +74,23 @@ probe module("sunrpc").function("rpcb_getport_async")
}
probe module("sunrpc").function("rpcb_getport_async").return
{
- if (task_status(rpcb_task))
- printf("%s(%d): rpcb_getport_async: status %d\n",
- execname(), pid(), task_status(rpcb_task));
+ if (task_status(rpcb_task))
+ printf("%s(%d): rpcb_getport_async: status %d\n",
+ execname(), pid(), task_status(rpcb_task));
+}
+global rpc_args;
+probe module("sunrpc").function("rpcb_getport_done")
+{
+ if (task_status($child))
+ printf("%s(%d): rpcb_getport_done: task status %d\n",
+ execname(), pid(), task_status($child));
+ rpc_args = $data;
}
probe module("sunrpc").function("rpcb_getport_done").return
{
- if (task_status($child))
- printf("%s(%d): rpcb_getport_done: status %d\n",
- execname(), pid(), task_status(rpcb_task));
+ if (rpcb_status(rpc_args))
+ printf("%s(%d): rpcb_getport_done: rpcbind status %d\n",
+ execname(), pid(), rpcb_status(rpc_args));
}
global xstcp_task
probe module("sunrpc").function("xs_tcp_connect")