summaryrefslogtreecommitdiffstats
path: root/tapset/rpc.stp
diff options
context:
space:
mode:
authorfche <fche>2007-03-20 16:22:34 +0000
committerfche <fche>2007-03-20 16:22:34 +0000
commit9956e5fcfbe5a62cea97e542dfc828c3be09eeb4 (patch)
tree6ff8f8ec76898b288c00046cb0693218827fd3c4 /tapset/rpc.stp
parentab655cf8ec35ab47a38d95182dfe07a0e380681a (diff)
downloadsystemtap-steved-9956e5fcfbe5a62cea97e542dfc828c3be09eeb4.tar.gz
systemtap-steved-9956e5fcfbe5a62cea97e542dfc828c3be09eeb4.tar.xz
systemtap-steved-9956e5fcfbe5a62cea97e542dfc828c3be09eeb4.zip
* applying kernel drift patches
2007-03-09 Pierre Peiffer <pierre.peiffer@bull.net> * nfsd.stp (nfsd.dispatch): Change initialization of variable client_ip with a call to addr_from_rqst. * rpc.stp (addr_from_rqst): - update with changes in struct svc_rqst - __rpc_execute returns void now. struct rpc_xprt modified since kernel 2.6.19. * nfs.stp, vfs.stp: Local variables f_dentry renamed, because conflicting with a new #define in kernel header linux/fs.h in 2.6.20. 2007-03-09 Pierre Peiffer <pierre.peiffer@bull.net> * nfs.stp: Local variables f_dentry renamed, because conflicting with a new #define in kernel header linux/fs.h in 2.6.20. * rpc.stp (_addevent.sunrpc.sched.execute.return): update with __rpc_execute which returns void since kernel 2.6.21.
Diffstat (limited to 'tapset/rpc.stp')
-rw-r--r--tapset/rpc.stp35
1 files changed, 28 insertions, 7 deletions
diff --git a/tapset/rpc.stp b/tapset/rpc.stp
index 7a1c978d..d3b0606f 100644
--- a/tapset/rpc.stp
+++ b/tapset/rpc.stp
@@ -1,9 +1,11 @@
-# Copyright (C) 2006 IBM Corp.
-#
-# This file is part of systemtap, and is free software. You can
-# redistribute it and/or modify it under the terms of the GNU General
-# Public License (GPL); either version 2, or (at your option) any
-# later version.
+// rpc tapset
+// Copyright (C) 2006 IBM Corp.
+// Copyright (C) 2007 Bull S.A.S
+//
+// This file is part of systemtap, and is free software. You can
+// redistribute it and/or modify it under the terms of the GNU General
+// Public License (GPL); either version 2, or (at your option) any
+// later version.
%{
#include <linux/kernel.h>
@@ -777,7 +779,12 @@ probe sunrpc.sched.execute.return = kernel.function("__rpc_execute").return ?,
module("sunrpc").function("__rpc_execute").return ?
{
name = "sunrpc.sched.execute"
+
+%( kernel_v <= "2.6.20" %?
retstr = returnstr($return)
+%:
+ retstr = "N/A"
+%)
}
/*
@@ -879,9 +886,17 @@ function port_from_clnt:long(clnt:long)
%{
struct rpc_clnt *clnt = (struct rpc_clnt *)(long)THIS->clnt;
struct rpc_xprt *cl_xprt = clnt? kread(&(clnt->cl_xprt)) : NULL;
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19)
+ if (cl_xprt && kread(&(cl_xprt->addr.ss_family)) == AF_INET) {
+ /* Now consider ipv4 only */
+ struct sockaddr_in *sap = (struct sockaddr_in *) &cl_xprt->addr;
+
+ THIS->__retvalue = ntohs(kread(&(sap->sin_port)));
+#else
if (cl_xprt && kread(&(cl_xprt->addr.sin_family)) == AF_INET) {
/* Now consider ipv4 only */
THIS->__retvalue = ntohs(kread(&(cl_xprt->addr.sin_port)));
+#endif
} else
THIS->__retvalue = 0;
CATCH_DEREF_FAULT();
@@ -926,7 +941,13 @@ function vers_from_prog:long(program:long, vers:long)
function addr_from_rqst:long(rqstp:long)
%{
struct svc_rqst *rqstp = (struct svc_rqst *)(long)THIS->rqstp;
- THIS->__retvalue = rqstp ? kread(&(rqstp->rq_addr.sin_addr.s_addr)) : 0;
+
+ if (rqstp) {
+ struct sockaddr_in *sin = (struct sockaddr_in *) &rqstp->rq_addr;
+
+ THIS->__retvalue = kread(&sin->sin_addr.s_addr);
+ } else
+ THIS->__retvalue = 0;
CATCH_DEREF_FAULT();
%}