summaryrefslogtreecommitdiffstats
path: root/tapset/nfs.stp
diff options
context:
space:
mode:
authorWenji Huang <wenji.huang@oracle.com>2009-03-06 00:16:50 -0500
committerWenji Huang <wenji.huang@oracle.com>2009-03-06 00:16:50 -0500
commitfb3b52a7346202fea1905ed680a3256d372a7b03 (patch)
tree6ee3213ce8c7737377b0fe4291bb69a7fc4ac9a0 /tapset/nfs.stp
parent4a05792180ad1299f499b5dbd77d5d4e9c4970fb (diff)
downloadsystemtap-steved-fb3b52a7346202fea1905ed680a3256d372a7b03.tar.gz
systemtap-steved-fb3b52a7346202fea1905ed680a3256d372a7b03.tar.xz
systemtap-steved-fb3b52a7346202fea1905ed680a3256d372a7b03.zip
PR9871: use @cast in tapset
Rewrite some functions using type casting to get rid of embedded C code in nfs, scsi, signal, socket, rpc, task and vfs tapset. Signed-off-by: Wenji Huang <wenji.huang@oracle.com>
Diffstat (limited to 'tapset/nfs.stp')
-rw-r--r--tapset/nfs.stp165
1 files changed, 76 insertions, 89 deletions
diff --git a/tapset/nfs.stp b/tapset/nfs.stp
index 474b091f..fe25eff2 100644
--- a/tapset/nfs.stp
+++ b/tapset/nfs.stp
@@ -135,69 +135,55 @@ function __nfs_wpages:long(inode:long) %{ /* pure */
%}
/*Get struct inode from struct page*/
-function __p2i :long(page:long) %{ /* pure */
- struct page *page = (struct page *)((long)THIS->page);
- struct address_space *mapping = page? kread(&(page->mapping)) : NULL;
-
- if (mapping == NULL)
- THIS->__retvalue = 0;
+function __p2i :long(page:long)
+{
+ mapping = page? @cast(page, "page", "kernel")->mapping : 0
+ if (mapping == 0)
+ return 0
else
- THIS->__retvalue = (long)kread(&(mapping->host));
- CATCH_DEREF_FAULT();
-%}
+ return @cast(mapping, "address_space", "kernel")->host
+}
/*Get i_flags from struct page*/
-function __p2i_flag : long (page:long) %{ /* pure */
- struct page *page = (struct page *)((long)THIS->page);
- struct address_space *mapping = page? kread(&(page->mapping)) : NULL;
- struct inode *host = mapping? kread(&(mapping->host)) : NULL;
-
- if (host == NULL)
- THIS->__retvalue = -1;
+function __p2i_flag : long (page:long)
+{
+ host = __p2i(page)
+ if (host == 0)
+ return -1
else
- THIS->__retvalue = kread(&(host->i_flags));
- CATCH_DEREF_FAULT();
-%}
+ return @cast(host, "inode", "kernel")->i_flags
+}
/*Get i_state from struct page*/
-function __p2i_state :long (page:long) %{ /* pure */
- struct page *page = (struct page *)((long)THIS->page);
- struct address_space *mapping = page? kread(&(page->mapping)) : NULL;
- struct inode *host = mapping? kread(&(mapping->host)) : NULL;
-
- if (host == NULL)
- THIS->__retvalue = -1;
+function __p2i_state :long (page:long)
+{
+ host = __p2i(page)
+ if (host == 0)
+ return -1
else
- THIS->__retvalue = kread(&(host->i_state));
- CATCH_DEREF_FAULT();
-%}
+ return @cast(host, "inode", "kernel")->i_state
+}
/*Get i_size from struct page*/
-function __p2i_size :long (page:long) %{ /* pure */
- struct page *page = (struct page *)((long)THIS->page);
- struct address_space *mapping = page? kread(&(page->mapping)) : NULL;
- struct inode *host = mapping? kread(&(mapping->host)) : NULL;
-
- if (host == NULL)
- THIS->__retvalue = -1;
+function __p2i_size :long (page:long)
+{
+ host = __p2i(page)
+ if (host == 0)
+ return -1
else
- THIS->__retvalue = kread(&(host->i_size));
- CATCH_DEREF_FAULT();
-%}
+ return @cast(host, "inode", "kernel")->i_size
+}
/*Get s_flags from struct page*/
-function __p2sb_flag:long (page:long) %{ /* pure */
- struct page *page = (struct page *)((long)THIS->page);
- struct address_space *mapping = page? kread(&(page->mapping)) : NULL;
- struct inode *host = mapping? kread(&(mapping->host)) : NULL;
- struct super_block *i_sb = host? kread(&(host->i_sb)) : NULL;
-
- if (i_sb == NULL)
- THIS->__retvalue = -1;
+function __p2sb_flag:long (page:long)
+{
+ host = __p2i(page)
+ i_sb = host? @cast(host, "inode", "kernel")->i_sb : 0
+ if (i_sb == 0)
+ return -1
else
- THIS->__retvalue = kread(&(i_sb->s_flags));
- CATCH_DEREF_FAULT();
-%}
+ return @cast(i_sb, "super_block", "kernel")->s_flags
+}
function __d_loff_t :long (ppos :long) %{ /* pure */
loff_t * ppos = (loff_t *) ((long)THIS->ppos);
@@ -209,53 +195,54 @@ function __d_loff_t :long (ppos :long) %{ /* pure */
CATCH_DEREF_FAULT();
%}
-function __file_inode:long (file:long) %{ /* pure */
- struct file *file = (struct file *)(long)THIS->file;
- struct dentry *dentry = file? kread(&(file->f_dentry)) : NULL;
- if (dentry == NULL)
- THIS->__retvalue = 0;
+function __file_inode:long (file:long)
+{
+%( kernel_v >= "2.6.20" %?
+ dentry = file? @cast(file, "file", "kernel")->f_path->dentry : 0
+%:
+ dentry = file? @cast(file, "file", "kernel")->f_dentry : 0
+%)
+ if (dentry == 0)
+ return 0
else
- THIS->__retvalue = (long)kread(&(dentry->d_inode));
- CATCH_DEREF_FAULT();
-%}
+ return @cast(dentry, "dentry", "kernel")->d_inode
+}
-function __file_id:long (file:long) %{ /* pure */
- struct file *file = (struct file *)(long)THIS->file;
- struct dentry *dentry = file? kread(&(file->f_dentry)) : NULL;
- if (dentry == NULL)
- THIS->__retvalue = 0;
+function __file_id:long (file:long)
+{
+ d_inode = __file_inode(file)
+ if (d_inode == 0)
+ return 0
else {
- struct inode *d_inode = kread(&(dentry->d_inode));
- struct super_block *i_sb = kread(&(d_inode->i_sb));
- THIS->__retvalue = (long)&(i_sb->s_id);
+ i_sb = @cast(d_inode, "inode", "kernel")->i_sb
+ return @cast(i_sb, "super_block", "kernel")->s_id
}
- CATCH_DEREF_FAULT();
-%}
+}
-function __file_mode:long (file:long) %{ /* pure */
- struct file *file = (struct file *)(long)THIS->file;
- struct dentry *dentry = file? kread(&(file->f_dentry)) : NULL;
- if (dentry == NULL)
- THIS->__retvalue = 0;
- else {
- struct inode *d_inode = kread(&(dentry->d_inode));
- THIS->__retvalue = kread(&(d_inode->i_mode));
- }
- CATCH_DEREF_FAULT();
-%}
+function __file_mode:long (file:long)
+{
+ d_inode = __file_inode(file)
+ if (d_inode == 0)
+ return 0
+ else
+ return @cast(d_inode, "inode", "kernel")->i_mode
+}
-function __file_parentname:string (file:long) %{ /* pure */
- struct file *file = (struct file *)(long)THIS->file;
- struct dentry *dentry = file? kread(&(file->f_dentry)) : NULL;
- struct dentry *d_parent = dentry? kread(&(dentry->d_parent)) : NULL;
- if (d_parent == NULL)
- strlcpy(THIS->__retvalue, "NULL", MAXSTRINGLEN);
+function __file_parentname:string (file:long)
+{
+%( kernel_v >= "2.6.20" %?
+ dentry = file? @cast(file, "file", "kernel")->f_path->dentry : 0
+%:
+ dentry = file? @cast(file, "file", "kernel")->f_dentry : 0
+%)
+ d_parent = dentry? @cast(dentry, "dentry", "kernel")->d_parent : 0
+ if (d_parent == 0)
+ return "NULL"
else {
- const unsigned char *name = kread(&(d_parent->d_name.name));
- deref_string(THIS->__retvalue, name, MAXSTRINGLEN);
+ name = @cast(d_parent, "dentry", "kernel")->d_name->name
+ return kernel_string(name)
}
- CATCH_DEREF_FAULT();
-%}
+}
/*
* Combination of generic_segment_checks and iov_length functions