From 11115992b51dfddba44781ed336d2831224e733e Mon Sep 17 00:00:00 2001 From: mmason Date: Wed, 26 Sep 2007 19:03:54 +0000 Subject: [PATCH] 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. --- tapset/vfs.stp | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/tapset/vfs.stp b/tapset/vfs.stp index f42177031..75b1b2794 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) -- 2.43.5