summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZhaolei <zhaolei@cn.fujitsu.com>2008-08-28 16:49:08 +0800
committerZhaolei <zhaolei@cn.fujitsu.com>2008-08-28 16:49:08 +0800
commit8aae0f0da19a11bd8f3f699ac98460e62de3388e (patch)
treedcff7ab87720f8ffbeaa546e033a75089b77b483
parent0a102c820c4ee8da300b4a834ef0f15fa13016d3 (diff)
downloadsystemtap-steved-8aae0f0da19a11bd8f3f699ac98460e62de3388e.tar.gz
systemtap-steved-8aae0f0da19a11bd8f3f699ac98460e62de3388e.tar.xz
systemtap-steved-8aae0f0da19a11bd8f3f699ac98460e62de3388e.zip
Make _get_sock_addr return correct address in kernel before 2.6.16.
-rw-r--r--tapset/ChangeLog3
-rw-r--r--tapset/socket.stp9
2 files changed, 11 insertions, 1 deletions
diff --git a/tapset/ChangeLog b/tapset/ChangeLog
index b2592e1e..9e418e99 100644
--- a/tapset/ChangeLog
+++ b/tapset/ChangeLog
@@ -1,3 +1,6 @@
+2008-08-28 Zhaolei <zhaolei@cn.fujitsu.com>
+ * socket.stp: Make _get_sock_addr return correct address in kernel
+ before 2.6.16.
2008-08-04 Wenji Huang <wenji.huang@oracle.com>
diff --git a/tapset/socket.stp b/tapset/socket.stp
index 54a7c71f..3197a0e2 100644
--- a/tapset/socket.stp
+++ b/tapset/socket.stp
@@ -910,7 +910,14 @@ function _success_check(ret:long)
function _get_sock_addr:long (file:long)
%{ /* pure */
struct file *filep = (struct file *)(long)(THIS->file);
- struct socket *sockp = filep? kread(&(filep->private_data)) : NULL;
+ struct socket *sockp;
+ if (filep) {
+ struct dentry *dentry = kread(&(filep->f_dentry));
+ struct inode *inode = kread(&(dentry->d_inode));
+ sockp = &container_of(inode, struct socket_alloc, vfs_inode)->socket;
+ } else {
+ sockp = NULL;
+ }
if (sockp == NULL)
THIS->__retvalue = -1;
else