summaryrefslogtreecommitdiffstats
path: root/tapset/nfs.stp
diff options
context:
space:
mode:
Diffstat (limited to 'tapset/nfs.stp')
-rw-r--r--tapset/nfs.stp341
1 files changed, 152 insertions, 189 deletions
diff --git a/tapset/nfs.stp b/tapset/nfs.stp
index 39040c68..083688ca 100644
--- a/tapset/nfs.stp
+++ b/tapset/nfs.stp
@@ -2,282 +2,245 @@
#include <linux/kernel.h>
#include <linux/nfs_fs.h>
%}
-/*Get struct nfs_inode from struct inode*/
-%{
- struct nfs_inode * __nfs_i (struct inode *inode)
- {
- struct nfs_inode * nfsi = NFS_I(inode);
-
- return (nfsi);
- }
-%}
/*Get cache_validity flag from struct inode*/
function __nfsi_cache_valid:long(inode:long) %{ /* pure */
- struct inode * inode = (struct inode *)(THIS->inode);
- struct nfs_inode * nfsi;
+ struct inode * inode = (struct inode *)(long)(THIS->inode);
if(inode == NULL)
- {
THIS->__retvalue = -1;
- return;
+ else {
+ struct nfs_inode * nfsi = NFS_I(inode);
+ THIS->__retvalue = kread(&(nfsi->cache_validity));
}
- nfsi = __nfs_i(inode);
- THIS->__retvalue = nfsi->cache_validity;
+ CATCH_DEREF_FAULT();
%}
/*Get read_cache_jiffies from struct inode*/
function __nfsi_rcache_time :long (inode:long) %{ /* pure */
- struct inode * inode = (struct inode *)(THIS->inode);
- struct nfs_inode * nfsi ;
+ struct inode * inode = (struct inode *)(long)(THIS->inode);
if(inode == NULL)
- {
THIS->__retvalue = -1;
- return;
+ else {
+ struct nfs_inode * nfsi = NFS_I(inode);
+ THIS->__retvalue = kread(&(nfsi->read_cache_jiffies));
}
-
- nfsi = (struct nfs_inode *) __nfs_i(inode);
-
- THIS->__retvalue = nfsi->read_cache_jiffies;
+ CATCH_DEREF_FAULT();
%}
/*Get attrtimeo from struct inode*/
function __nfsi_attr_time :long (inode:long) %{ /* pure */
- struct inode * inode = (struct inode *)(THIS->inode);
- struct nfs_inode * nfsi ;
+ struct inode * inode = (struct inode *)(long)(THIS->inode);
if(inode == NULL)
- {
THIS->__retvalue = -1;
- return;
+ else {
+ struct nfs_inode * nfsi = NFS_I(inode);
+ THIS->__retvalue = kread(&(nfsi->attrtimeo));
}
- nfsi= (struct nfs_inode *) __nfs_i(inode);
-
- THIS->__retvalue = nfsi->attrtimeo;
+ CATCH_DEREF_FAULT();
%}
/*Get ndirty from struct inode*/
function __nfsi_ndirty:long (inode:long) %{ /* pure */
- struct inode *inode = (struct inode *)((long)THIS->inode);
- struct nfs_inode *nfsi ;
-
- if(inode == NULL)
- {
- THIS->__retvalue = -1;
- return;
- }
- nfsi = NFS_I(inode);
-
- THIS->__retvalue = nfsi->ndirty;
+ struct inode * inode = (struct inode *)(long)(THIS->inode);
+
+ if(inode == NULL)
+ THIS->__retvalue = -1;
+ else {
+ struct nfs_inode * nfsi = NFS_I(inode);
+ THIS->__retvalue = kread(&(nfsi->ndirty));
+ }
+ CATCH_DEREF_FAULT();
%}
/*Get rsize from struct inode*/
function __nfs_server_rsize:long (inode:long) %{ /* pure */
- struct inode * inode = (struct inode *)((long)THIS->inode);
-
- if(inode == NULL)
- {
- THIS->__retvalue = -1;
- return;
- }
- THIS->__retvalue = NFS_SERVER(inode)->rsize;
+ struct inode * inode = (struct inode *)(long)(THIS->inode);
+
+ if(inode == NULL)
+ THIS->__retvalue = -1;
+ else {
+ struct nfs_server * nfs_srv = NFS_SERVER(inode); /* FIXME: deref hazard! */
+ THIS->__retvalue = kread(&(nfs_srv->rsize));
+ }
+ CATCH_DEREF_FAULT();
%}
/*Get version from struct inode*/
function __nfs_version:long (inode:long) %{ /* pure */
- struct inode * inode = (struct inode *)((long)THIS->inode);
-
- if(inode == NULL)
- {
- THIS->__retvalue = -1;
- return;
- }
- THIS->__retvalue = NFS_PROTO(inode)->version;
+ struct inode * inode = (struct inode *)(long)(THIS->inode);
+
+ if(inode == NULL)
+ THIS->__retvalue = -1;
+ else {
+ const struct nfs_rpc_ops *rpc_ops = NFS_PROTO(inode); /* FIXME: deref hazard! */
+ THIS->__retvalue = kread(&(rpc_ops->version));
+ }
+ CATCH_DEREF_FAULT();
%}
/*Get wsize from struct inode*/
function __nfs_server_wsize:long (inode:long) %{ /* pure */
- struct inode * inode = (struct inode *)((long)THIS->inode);
-
- if(inode == NULL)
- {
- THIS->__retvalue = -1;
- return;
- }
- THIS->__retvalue = NFS_SERVER(inode)->wsize;
+ struct inode * inode = (struct inode *)(long)(THIS->inode);
+
+ if(inode == NULL)
+ THIS->__retvalue = -1;
+ else {
+ struct nfs_server * nfs_srv = NFS_SERVER(inode); /* FIXME: deref hazard! */
+ THIS->__retvalue = kread(&(nfs_srv->wsize));
+ }
+ CATCH_DEREF_FAULT();
%}
/*Get rpages from struct inode*/
function __nfs_rpages:long (inode:long) %{ /* pure */
- struct inode * inode = (struct inode *)((long)THIS->inode);
-
- if(inode == NULL)
- {
- THIS->__retvalue = -1;
- return;
- }
- THIS->__retvalue = NFS_SERVER(inode)->rpages;
+ struct inode * inode = (struct inode *)(long)(THIS->inode);
+
+ if(inode == NULL)
+ THIS->__retvalue = -1;
+ else {
+ struct nfs_server * nfs_srv = NFS_SERVER(inode); /* FIXME: deref hazard! */
+ THIS->__retvalue = kread(&(nfs_srv->rpages));
+ }
+ CATCH_DEREF_FAULT();
%}
/*Get wpages from struct inode*/
function __nfs_wpages:long(inode:long) %{ /* pure */
- struct inode *inode = (struct inode*)((long)THIS->inode);
- if(inode == NULL)
- {
- THIS->__retvalue = -1;
- return;
- }
- THIS->__retvalue = NFS_SERVER(inode)->wpages;
+ struct inode * inode = (struct inode *)(long)(THIS->inode);
+
+ if(inode == NULL)
+ THIS->__retvalue = -1;
+ else {
+ struct nfs_server * nfs_srv = NFS_SERVER(inode); /* FIXME: deref hazard! */
+ THIS->__retvalue = kread(&(nfs_srv->wpages));
+ }
+ CATCH_DEREF_FAULT();
%}
/*Get struct inode from struct page*/
function __p2i :long(page:long) %{ /* pure */
- struct page *page = (struct page *)((long)THIS->page);
-
- if ((page == NULL) || (page->mapping == NULL)) {
- THIS->__retvalue = 0;
- return;
- }
-
- THIS->__retvalue = deref(sizeof(page->mapping->host),
- &(page->mapping->host));
- if (0) {
-deref_fault:
- CONTEXT->last_error = "pointer dereference fault";
- }
+ struct page *page = (struct page *)((long)THIS->page);
+ struct address_space *mapping = page? kread(&(page->mapping)) : NULL;
+
+ if (mapping == NULL)
+ THIS->__retvalue = 0;
+ else
+ THIS->__retvalue = (long)kread(&(mapping->host));
+ CATCH_DEREF_FAULT();
%}
/*Get i_flags from struct page*/
function __p2i_flag : long (page:long) %{ /* pure */
- struct page *page = (struct page *) (THIS->page);
-
- if ((page == NULL) || (page->mapping == NULL) \
- ||(page->mapping->host == NULL)) {
- THIS->__retvalue = -1;
- return;
- }
+ 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;
- THIS->__retvalue = deref(sizeof(page->mapping->host->i_flags),
- &(page->mapping->host->i_flags));
- if (0) {
-deref_fault:
- CONTEXT->last_error = "pointer dereference fault";
- }
+ if (host == NULL)
+ THIS->__retvalue = -1;
+ else
+ THIS->__retvalue = kread(&(host->i_flags));
+ CATCH_DEREF_FAULT();
%}
/*Get i_state from struct page*/
function __p2i_state :long (page:long) %{ /* pure */
- struct page *page = (struct page *) (THIS->page);
-
- if ((page == NULL) || (page->mapping == NULL) \
- ||(page->mapping->host == NULL)) {
- THIS->__retvalue = -1;
- return;
- }
+ 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;
- THIS->__retvalue = deref(sizeof(page->mapping->host->i_state),
- &(page->mapping->host->i_state));
- if (0) {
-deref_fault:
- CONTEXT->last_error = "pointer dereference fault";
- }
+ if (host == NULL)
+ THIS->__retvalue = -1;
+ else
+ THIS->__retvalue = kread(&(host->i_state));
+ CATCH_DEREF_FAULT();
%}
/*Get i_size from struct page*/
function __p2i_size :long (page:long) %{ /* pure */
- struct page *page = (struct page *) (THIS->page);
-
- if ((page == NULL) || (page->mapping == NULL) \
- ||(page->mapping->host == NULL)) {
- THIS->__retvalue = -1;
- return;
- }
+ 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;
- THIS->__retvalue = deref(sizeof(page->mapping->host->i_size),
- &(page->mapping->host->i_size));
- if (0) {
-deref_fault:
- CONTEXT->last_error = "pointer dereference fault";
- }
+ if (host == NULL)
+ THIS->__retvalue = -1;
+ else
+ THIS->__retvalue = kread(&(host->i_size));
+ CATCH_DEREF_FAULT();
%}
/*Get s_flags from struct page*/
function __p2sb_flag:long (page:long) %{ /* pure */
- struct page *page = (struct page *)(THIS->page);
-
- if ((page == NULL) || (page->mapping == NULL) \
- ||(page->mapping->host == NULL)) {
- THIS->__retvalue = -1;
- return;
- }
+ 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;
- THIS->__retvalue = deref(sizeof(page->mapping->host->i_flags),
- &(page->mapping->host->i_flags));
- if (0) {
-deref_fault:
- CONTEXT->last_error = "pointer dereference fault";
- }
+ if (i_sb == NULL)
+ THIS->__retvalue = -1;
+ else
+ THIS->__retvalue = kread(&(i_sb->s_flags));
+ CATCH_DEREF_FAULT();
%}
function __d_loff_t :long (ppos :long) %{ /* pure */
- loff_t * ppos = (loff_t *) ((long)THIS->ppos);
-
- if (ppos == NULL)
- {
- THIS->__retvalue = -1;
- return;
- }
+ loff_t * ppos = (loff_t *) ((long)THIS->ppos);
- THIS->__retvalue = *ppos;
+ if (ppos == NULL)
+ THIS->__retvalue = -1;
+ else
+ THIS->__retvalue = kread(ppos);
+ CATCH_DEREF_FAULT();
%}
function __file_inode:long (file:long) %{ /* pure */
- struct file *file = (struct file *)(long)THIS->file;
- if ((file == NULL) || (file->f_dentry == NULL)) {
- THIS->__retvalue = 0;
- return;
- }
- THIS->__retvalue = deref(sizeof(file->f_dentry->d_inode),
- &(file->f_dentry->d_inode));
- if (0) {
-deref_fault:
- CONTEXT->last_error = "pointer dereference fault";
- }
+ struct file *file = (struct file *)(long)THIS->file;
+ struct dentry *f_dentry = file? kread(&(file->f_dentry)) : NULL;
+ if (f_dentry == NULL)
+ THIS->__retvalue = 0;
+ else
+ THIS->__retvalue = (long)kread(&(f_dentry->d_inode));
+ CATCH_DEREF_FAULT();
%}
function __file_id:long (file:long) %{ /* pure */
- struct file *file = (struct file *)(long)THIS->file;
- if ((file == NULL) || (file->f_dentry == NULL)) {
- THIS->__retvalue = 0;
- return;
- }
- THIS->__retvalue = (long)&(file->f_dentry->d_inode->i_sb->s_id);
+ struct file *file = (struct file *)(long)THIS->file;
+ struct dentry *f_dentry = file? kread(&(file->f_dentry)) : NULL;
+ if (f_dentry == NULL)
+ THIS->__retvalue = 0;
+ else {
+ struct inode *d_inode = kread(&(f_dentry->d_inode));
+ struct super_block *i_sb = kread(&(d_inode->i_sb));
+ THIS->__retvalue = (long)&(i_sb->s_id);
+ }
+ CATCH_DEREF_FAULT();
%}
function __file_mode:long (file:long) %{ /* pure */
- struct file *file = (struct file *)(long)THIS->file;
- if ((file == NULL) || (file->f_dentry == NULL)) {
- THIS->__retvalue = 0;
- return;
- }
- THIS->__retvalue = deref(sizeof(file->f_dentry->d_inode->i_mode),
- &(file->f_dentry->d_inode->i_mode));
- if (0) {
-deref_fault:
- CONTEXT->last_error = "pointer dereference fault";
- }
+ struct file *file = (struct file *)(long)THIS->file;
+ struct dentry *f_dentry = file? kread(&(file->f_dentry)) : NULL;
+ if (f_dentry == NULL)
+ THIS->__retvalue = 0;
+ else {
+ struct inode *d_inode = kread(&(f_dentry->d_inode));
+ THIS->__retvalue = kread(&(d_inode->i_mode));
+ }
+ CATCH_DEREF_FAULT();
%}
function __file_parentname:string (file:long) %{ /* pure */
- struct file *file = (struct file *)(long)THIS->file;
- if ((file == NULL)
- || (file->f_dentry == NULL)
- || (file->f_dentry->d_parent == NULL))
- strlcpy(THIS->__retvalue, "NULL", MAXSTRINGLEN);
- else {
- strlcpy(THIS->__retvalue, file->f_dentry->d_parent->d_name->name, MAXSTRINGLEN);
- }
+ struct file *file = (struct file *)(long)THIS->file;
+ struct dentry *f_dentry = file? kread(&(file->f_dentry)) : NULL;
+ struct dentry *d_parent = f_dentry? kread(&(f_dentry->d_parent)) : NULL;
+ if (d_parent == NULL)
+ strlcpy(THIS->__retvalue, "NULL", MAXSTRINGLEN);
+ else {
+ const unsigned char *name = kread(&(d_parent->d_name.name));
+ deref_string(THIS->__retvalue, name, MAXSTRINGLEN);
+ }
+ CATCH_DEREF_FAULT();
%}
probe nfs.fop.entries = nfs.fop.llseek,