summaryrefslogtreecommitdiffstats
path: root/tapset/vfs.stp
diff options
context:
space:
mode:
authormmason <mmason>2007-09-26 19:03:54 +0000
committermmason <mmason>2007-09-26 19:03:54 +0000
commit11115992b51dfddba44781ed336d2831224e733e (patch)
tree3bb06e77d27d36a96f0dcf2a5850f87d4e57092e /tapset/vfs.stp
parent67535ee31664cd0003bfa8cb73578eeb4724c857 (diff)
downloadsystemtap-steved-11115992b51dfddba44781ed336d2831224e733e.tar.gz
systemtap-steved-11115992b51dfddba44781ed336d2831224e733e.tar.xz
systemtap-steved-11115992b51dfddba44781ed336d2831224e733e.zip
Specified explicit types for __find_bdevname() parameters and return value. The types could not be determined correctly when __find_bdevname() was used in nfs.stp
Added __page_index() to work around problem dereferencing unions in stap language. Made generic.fop.sendfile conditional on kernel <= 2.6.22. generic_file_sendfile() was removed in 2.6.23.
Diffstat (limited to 'tapset/vfs.stp')
-rw-r--r--tapset/vfs.stp34
1 files changed, 22 insertions, 12 deletions
diff --git a/tapset/vfs.stp b/tapset/vfs.stp
index f4217703..75b1b279 100644
--- a/tapset/vfs.stp
+++ b/tapset/vfs.stp
@@ -31,7 +31,7 @@ function __bdevname:string (bdev:long) %{ /* pure */
/* XXX: Is this hashing really that helpful? The call to bdevname()
* isn't very involved... */
global __devnames
-function __find_bdevname(dev, bdev)
+function __find_bdevname:string(dev:long, bdev:long)
{
# return ""
@@ -89,6 +89,12 @@ function __page_bdev:long (page:long) %{ /* pure */
CATCH_DEREF_FAULT();
%}
+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 __file_dev:long (file:long) %{ /* pure */
struct file *file = (struct file *)(long)THIS->file;
struct dentry *dentry = file? kread(&(file->f_dentry)) : NULL;
@@ -329,6 +335,7 @@ probe generic.fop.open.return = kernel.function ("generic_file_open").return
retstr = sprintf("%d", $return)
}
+%( kernel_v < "2.6.23" %?
probe generic.fop.sendfile = kernel.function ("generic_file_sendfile")
{
dev = __file_dev($in_file)
@@ -354,6 +361,7 @@ probe generic.fop.sendfile.return = kernel.function ("generic_file_sendfile").re
units = "bytes"
}
}
+%)
probe generic.fop.splice_read = kernel.function ("generic_file_splice_read") ?
{
@@ -538,7 +546,7 @@ probe vfs.block_sync_page = kernel.function ("block_sync_page")
devname = __find_bdevname(dev, __page_bdev(__page))
ino = __page_ino(__page)
- page_index = $page->index
+ page_index = __page_index(__page)
name = "block_sync_page"
argstr = sprintf("%d", page_index)
@@ -554,11 +562,12 @@ probe vfs.block_sync_page.return = kernel.function ("block_sync_page").return
probe vfs.buffer_migrate_page = kernel.function ("buffer_migrate_page")?
{
- dev = __page_dev($page)
- ino = __page_ino($page)
- devname = __find_bdevname(dev,__page_bdev($page))
+ __page = $page
+ dev = __page_dev(__page)
+ ino = __page_ino(__page)
+ devname = __find_bdevname(dev,__page_bdev(__page))
- page_index = $page->index
+ page_index = __page_index(__page)
name = "buffer_migrate_page"
argstr = sprintf("%d", page_index)
@@ -585,7 +594,7 @@ probe vfs.__set_page_dirty_buffers = kernel.function ("__set_page_dirty_buffers"
devname = __find_bdevname(dev, __page_bdev(__page))
ino = __page_ino(__page)
- index = $page->index
+ index = __page_index(__page)
name = "__set_page_dirty_buffers"
argstr = sprintf("%d", page_index)
@@ -616,7 +625,7 @@ probe vfs.do_mpage_readpage = kernel.function ("do_mpage_readpage")
devname = __find_bdevname(dev, __page_bdev(__page))
ino = __page_ino(__page)
- index = $page->index
+ index = __page_index(__page)
name = "do_mpage_readpage"
argstr = sprintf("%d", index)
@@ -658,11 +667,12 @@ probe vfs.add_to_page_cache.return = kernel.function ("add_to_page_cache").retur
probe vfs.remove_from_page_cache = kernel.function ("__remove_from_page_cache")
{
- dev = __page_dev($page)
- devname = __find_bdevname(dev, __page_bdev($page))
- ino = __page_ino($page)
+ __page = $page
+ dev = __page_dev(__page)
+ devname = __find_bdevname(dev, __page_bdev(__page))
+ ino = __page_ino(__page)
- index = $page->index
+ index = __page_index(__page)
name = "vfs.remove_from_page_cache"
argstr = sprintf("%d", ino)