summaryrefslogtreecommitdiffstats
path: root/tapset/vfs.stp
diff options
context:
space:
mode:
authorMark Wielaard <mjw@redhat.com>2009-03-17 16:58:35 +0100
committerMark Wielaard <mjw@redhat.com>2009-03-17 16:58:35 +0100
commitbf33ee46c8fff4d181b7f28521f12175bd32ec77 (patch)
tree5e0a9e1047af60389eee36da54182b52d3d53ee7 /tapset/vfs.stp
parent524c6f82b0a3c010d0fd6a67b1afcfbf55b789a6 (diff)
parent30cb532a560ed152b86506b80490e99195970271 (diff)
downloadsystemtap-steved-bf33ee46c8fff4d181b7f28521f12175bd32ec77.tar.gz
systemtap-steved-bf33ee46c8fff4d181b7f28521f12175bd32ec77.tar.xz
systemtap-steved-bf33ee46c8fff4d181b7f28521f12175bd32ec77.zip
Merge branch 'master' into pr6866
Resolved conflicts: runtime/task_finder.c: name vs path.
Diffstat (limited to 'tapset/vfs.stp')
-rw-r--r--tapset/vfs.stp198
1 files changed, 76 insertions, 122 deletions
diff --git a/tapset/vfs.stp b/tapset/vfs.stp
index 43603177..23d95098 100644
--- a/tapset/vfs.stp
+++ b/tapset/vfs.stp
@@ -51,139 +51,93 @@ function ppos_pos:long (ppos:long) %{ /* pure */
CATCH_DEREF_FAULT();
%}
-function __page_ino: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 = -1;
- } else {
- struct inode *host = kread(&(mapping->host));
- THIS->__retvalue = kread(&(host->i_ino));
- }
- CATCH_DEREF_FAULT();
-%}
-
-function __address_inode:long (page:long) %{ /* pure */
- struct page *page = (struct page *)(long)THIS->page;
- struct address_space *mapping = kread(&(page->mapping));
- if (mapping == NULL) {
- THIS->__retvalue = -1;
- } else {
- THIS->__retvalue = (long)kread(&(mapping->host));
- }
- CATCH_DEREF_FAULT();
-%}
+function __address_inode:long (page:long)
+{
+ mapping = page? @cast(page, "page", "kernel")->mapping : 0
+ if (mapping == 0)
+ return -1
+ else
+ return @cast(mapping, "address_space", "kernel")->host
+}
-function __page_dev: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 = -1;
- } else {
- struct inode *host = kread(&(mapping->host));
- struct super_block *i_sb = kread(&(host->i_sb));
- THIS->__retvalue = kread(&(i_sb->s_dev));
- }
- CATCH_DEREF_FAULT();
-%}
+function __page_ino:long (page:long)
+{
+ host = __address_inode(page)
+ if (host == -1)
+ return -1
+ else
+ return @cast(host, "inode", "kernel")->i_ino
+}
-function __page_bdev: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;
- } else {
- struct inode *host = kread(&(mapping->host));
- struct super_block *i_sb = kread(&(host->i_sb));
- THIS->__retvalue = (long)kread(&(i_sb->s_bdev));
- }
- CATCH_DEREF_FAULT();
-%}
+function __page_dev:long (page:long)
+{
+ host = __address_inode(page)
+ if (host == -1)
+ return -1
+ return @cast(host, "inode", "kernel")->i_sb->s_dev
+}
-function __page_index:long (page:long) %{ /* pure */
- struct page *page = (struct page *)(long)THIS->page;
- THIS->__retvalue = (long)kread(&(page->index));
- CATCH_DEREF_FAULT();
-%}
+function __page_bdev:long (page:long)
+{
+ host = __address_inode(page)
+ if (host == -1)
+ return 0
+ return @cast(host, "inode", "kernel")->i_sb->s_bdev
+}
-function __file_dev: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));
- struct super_block *i_sb = kread(&(d_inode->i_sb));
- THIS->__retvalue = kread(&(i_sb->s_dev));
- }
- CATCH_DEREF_FAULT();
-%}
+function __page_index:long (page:long)
+{
+ return @cast(page, "page", "kernel")->index
+}
-function __file_bdev: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));
- struct super_block *i_sb = kread(&(d_inode->i_sb));
- THIS->__retvalue = (long)kread(&(i_sb->s_bdev));
- }
- CATCH_DEREF_FAULT();
-%}
+function __file_dev:long (file:long)
+{
+ d_inode = __file_inode(file)
+ if (d_inode == 0)
+ return 0
+ return @cast(d_inode, "inode", "kernel")->i_sb->s_dev
+}
-function __file_ino: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_ino));
- }
- CATCH_DEREF_FAULT();
-%}
+function __file_bdev:long (file:long)
+{
+ d_inode = __file_inode(file)
+ if (d_inode == 0)
+ return 0
+ return @cast(d_inode, "inode", "kernel")->i_sb->s_bdev
+}
-function __file_maxbytes: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));
- struct super_block *i_sb = kread(&(d_inode->i_sb));
- THIS->__retvalue = kread(&(i_sb->s_maxbytes));
- }
- CATCH_DEREF_FAULT();
-%}
+function __file_ino:long (file:long)
+{
+ d_inode = __file_inode(file)
+ if (d_inode == 0)
+ return 0
+ return @cast(d_inode, "inode", "kernel")->i_ino
+}
-function __file_filename:string (file:long) %{ /* pure */
- struct file *file = (struct file *)(long)THIS->file;
- struct dentry *dentry = file? kread(&(file->f_dentry)) : NULL;
- const unsigned char *name = dentry? kread(&(dentry->d_name.name)) : NULL;
- if (name == NULL) {
- strlcpy(THIS->__retvalue, "NULL", MAXSTRINGLEN);
- } else {
- deref_string(THIS->__retvalue, name, MAXSTRINGLEN);
- }
- CATCH_DEREF_FAULT();
-%}
+function __file_maxbytes:long (file:long)
+{
+ d_inode = __file_inode(file)
+ if (d_inode == 0)
+ return 0
+ return @cast(d_inode, "inode", "kernel")->i_sb->s_maxbytes
+}
-function __inode_num:long(file:long)
-%{
- struct file *file = NULL;
- struct dentry *dentry = NULL;
- struct inode *inode = NULL;
-
- file = (struct file *)(long)THIS->file;
- dentry = file? kread(&(file->f_dentry)) : NULL;
- inode = dentry? kread(&(dentry->d_inode)) : NULL;
- THIS->__retvalue = inode? (long)(kread(&(inode->i_ino))) : 0;
- CATCH_DEREF_FAULT();
-%}
+function __file_filename: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
+%)
+ name = dentry? @cast(dentry, "dentry", "kernel")->d_name->name : 0
+ if (name == 0)
+ return "NULL"
+ else
+ return kernel_string(name)
+}
function _get_fopv_size:long (iov:long, nr_segs:long)
-%{
+%{ /* pure */
struct iovec *iovp = (struct iovec *)(long)THIS->iov;
if (iovp) {
int i;