diff options
author | Zhaolei <zhaolei@cn.fujitsu.com> | 2008-08-28 16:49:08 +0800 |
---|---|---|
committer | Zhaolei <zhaolei@cn.fujitsu.com> | 2008-08-28 16:49:08 +0800 |
commit | 8aae0f0da19a11bd8f3f699ac98460e62de3388e (patch) | |
tree | dcff7ab87720f8ffbeaa546e033a75089b77b483 | |
parent | 0a102c820c4ee8da300b4a834ef0f15fa13016d3 (diff) | |
download | systemtap-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/ChangeLog | 3 | ||||
-rw-r--r-- | tapset/socket.stp | 9 |
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 |