diff options
| author | Steve Dickson <steved@redhat.com> | 2009-04-02 17:06:22 -0400 |
|---|---|---|
| committer | Steve Dickson <steved@redhat.com> | 2009-04-02 17:06:22 -0400 |
| commit | 22fed7bfcd58bb39862dbf7b8bc1d6c532d139c8 (patch) | |
| tree | 40310b5148439317458dce7acef10f3e94872888 | |
| parent | 7fc13f1a2640db17b06352c35ce0b99ed6582f9d (diff) | |
| download | systemtap-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.stp | 43 |
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") |
