]> sourceware.org Git - systemtap.git/commitdiff
bugfix for 2.6.19 kernel
authorguanglei <guanglei>
Fri, 29 Dec 2006 08:02:07 +0000 (08:02 +0000)
committerguanglei <guanglei>
Fri, 29 Dec 2006 08:02:07 +0000 (08:02 +0000)
tapset/ChangeLog
tapset/LKET/Changelog
tapset/LKET/nfs.stp
tapset/ioscheduler.stp
tapset/nfs.stp
tapset/nfs_proc.stp
tapset/nfsd.stp
tapset/rpc.stp
tapset/vfs.stp

index 8ab95e7bb277475f6ab7df3059560f373ed53529..c73c5b6bdf14f45dee8447eb034799634e148e18 100644 (file)
@@ -1,3 +1,9 @@
+2006-12-29  Li Guanglei <guanglei@cn.ibm.com>
+
+       From Gui Jian <guij@cn.ibm.com>
+       * ioscheduler.stp, nfsd.stp, nfs.stp, nfs_proc.stp, 
+       rpc.stp, vfs.stp: patch for 2.6.19 kernel
+       
 2006-12-18  Frank Ch. Eigler  <fche@elastic.org>
 
        * vfs.stp (ppos_pos): Protect contents with deref(), though
index 68c6fd57c244490feab0bba365f0425897d24867..96bfadc067d9d1633a424dedecd44b43746d9248 100644 (file)
@@ -1,3 +1,8 @@
+2006-12-29  Li Guanglei <guanglei@cn.ibm.com>
+
+       From Gui Jian <guij@cn.ibm.com>
+       * nfs.stp: patch for 2.6.19 kernel
+       
 2006-12-23  Li Guanglei <guanglei@cn.ibm.com>
 
        From Gui Jian <guij@cn.ibm.com>
index eb2566b34d6133fac5cc02e0c287ad0f4d0d8f4b..3e4c1e5314d7e9dc1c8273838114774db6d7fe71 100755 (executable)
@@ -1,3 +1,15 @@
+/* Helper functions */
+function __file_fsname:string (file:long) %{ /* pure */
+       struct file *file = (struct file *)(long)THIS->file;
+       if ((file == NULL) 
+               || (file->f_dentry == NULL) 
+               || (file->f_dentry->d_inode == NULL))
+               strlcpy(THIS->__retvalue, "NULL", MAXSTRINGLEN);
+       else {
+               strlcpy(THIS->__retvalue, file->f_dentry->d_inode->i_sb->s_type->name, MAXSTRINGLEN);
+       }
+%}
+
 probe never
 {
        printf("%d",GROUP_NFS)
@@ -108,7 +120,7 @@ probe addevent.nfs.fop.read.entry
 probe _addevent.nfs.fop.read.entry
       = nfs.fop.read
 {
-       filesystem = kernel_string($filp->f_dentry->d_inode->i_sb->s_type->name)
+       filesystem = __file_fsname($filp)
 
        if(filesystem == "nfs")
                log_fop_rw(HOOKID_NFS_FOP_READ_ENTRY,s_id,fileid,buf,len,pos)
@@ -144,7 +156,7 @@ probe addevent.nfs.fop.write.entry
 probe _addevent.nfs.fop.write.entry
       = nfs.fop.write
 {
-       filesystem = kernel_string($filp->f_dentry->d_inode->i_sb->s_type->name)
+       filesystem = __file_fsname($filp)
 
        if(filesystem == "nfs")
                log_fop_rw(HOOKID_NFS_FOP_WRITE_ENTRY,s_id,fileid,buf,len,pos)
index 9c3714f442ec67459f9885c01c844ceaf8728377..ba732b65928a245ede8f79916783b63e62fa11c5 100644 (file)
@@ -32,7 +32,11 @@ probe ioscheduler.elv_next_request.return
                disk_minor = -1
        } else {
                req = $return
+%( kernel_v >= "2.6.19" %?
+               req_flags = $return->cmd_flags
+%:
                req_flags = $return->flags
+%)
                if($return->rq_disk == 0)  {
                        disk_major = -1
                        disk_minor = -1
@@ -66,7 +70,11 @@ probe ioscheduler.elv_add_request
        }
 
        req = $rq
+%( kernel_v >= "2.6.19" %?
+       req_flags = $rq->cmd_flags
+%:
        req_flags = $rq->flags
+%)
 }
 
 /* when a request is completed */
@@ -92,7 +100,11 @@ probe ioscheduler.elv_completed_request
        }
 
        req = $rq
+%( kernel_v >= "2.6.19" %?
+       req_flags = $rq->cmd_flags
+%:
        req_flags = $rq->flags
+%)
 }
 
 function disk_major_from_request:long(var_q:long)
index 2edf59cd0744db00cab99295962edfc95211eb30..39040c6868ebd52da41b1be32cdab08224343e41 100644 (file)
@@ -232,6 +232,54 @@ function __d_loff_t :long (ppos :long) %{ /* pure */
         THIS->__retvalue = *ppos;
 %}
 
+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";
+       }
+%}
+
+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);
+%}
+
+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";
+       }
+%}
+
+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);
+       }
+%}
+
 probe nfs.fop.entries = nfs.fop.llseek,
                         nfs.fop.read,
                         nfs.fop.write,
@@ -283,12 +331,12 @@ probe nfs.fop.return = nfs.fop.llseek.return,
 probe nfs.fop.llseek = kernel.function ("nfs_file_llseek") ?,
                        module("nfs").function("nfs_file_llseek") ?
 {
-        dev = $filp->f_dentry->d_inode->i_sb->s_dev
-        ino = $filp->f_dentry->d_inode->i_ino
-       s_id = $filp->f_dentry->d_inode->i_sb->s_id
+        dev = __file_dev($filp)
+        ino = __file_ino($filp)
+       s_id = __file_id($filp)
        devname = kernel_string(s_id)
 
-        maxbyte = $filp->f_dentry->d_inode->i_sb->s_maxbytes
+        maxbyte = __file_maxbytes($filp)
         offset = $offset
         origin = $origin
 
@@ -313,7 +361,7 @@ probe nfs.fop.llseek.return = kernel.function ("nfs_file_llseek").return ?,
 */
 probe nfs.fop.read = vfs.do_sync_read
 {
-       s_id = $filp->f_dentry->d_inode->i_sb->s_id
+       s_id = __file_id($filp)
        devname = kernel_string(s_id)
         name = "nfs.fop.read"
 }
@@ -335,7 +383,7 @@ probe nfs.fop.read.return = vfs.do_sync_read.return
 
 probe nfs.fop.write = vfs.do_sync_write
 {
-       s_id = $filp->f_dentry->d_inode->i_sb->s_id
+       s_id = __file_id($filp)
        devname = kernel_string(s_id)
         name = "nfs.fop.write"
 }
@@ -368,22 +416,27 @@ probe nfs.fop.write.return = vfs.do_sync_write.return
 probe nfs.fop.aio_read = kernel.function ("nfs_file_read") ?,
                        module("nfs").function("nfs_file_read") ?
 {
-        dev = $iocb->ki_filp->f_dentry->d_inode->i_sb->s_dev
-        ino = $iocb->ki_filp->f_dentry->d_inode->i_ino
-       s_id = $iocb->ki_filp->f_dentry->d_inode->i_sb->s_id
+        dev = __file_dev($iocb->ki_filp)
+        ino = __file_ino($iocb->ki_filp)
+       s_id = __file_id($iocb->ki_filp)
        devname = kernel_string(s_id)
 
         count = $count
         pos = $pos
+
+%( kernel_v >= "2.6.19" %?
+       buf = $iov->iov_base
+%:
         buf = $buf
+%)
 
-        parent_name = kernel_string($iocb->ki_filp->f_dentry->d_parent->d_name->name)
-        file_name = kernel_string($iocb->ki_filp->f_dentry->d_name->name)
+        parent_name = __file_parentname($iocb->ki_filp)
+        file_name = __file_filename($iocb->ki_filp)
 
 
-        cache_valid = __nfsi_cache_valid($iocb->ki_filp->f_dentry->d_inode)
-        cache_time  = __nfsi_rcache_time($iocb->ki_filp->f_dentry->d_inode)
-        attr_time   = __nfsi_attr_time($iocb->ki_filp->f_dentry->d_inode)
+        cache_valid = __nfsi_cache_valid(__file_inode($iocb->ki_filp))
+        cache_time  = __nfsi_rcache_time(__file_inode($iocb->ki_filp))
+        attr_time   = __nfsi_attr_time(__file_inode($iocb->ki_filp))
 
 
         name = "nfs.fop.aio_read"
@@ -423,17 +476,21 @@ probe nfs.fop.aio_read.return = kernel.function ("nfs_file_read").return ?,
 probe nfs.fop.aio_write = kernel.function("nfs_file_write") ?,
                           module("nfs").function("nfs_file_write") ?
 {
-        dev = $iocb->ki_filp->f_dentry->d_inode->i_sb->s_dev
-        ino = $iocb->ki_filp->f_dentry->d_inode->i_ino
-       s_id = $iocb->ki_filp->f_dentry->d_inode->i_sb->s_id
+        dev = __file_dev($iocb->ki_filp)
+        ino = __file_ino($iocb->ki_filp)
+       s_id = __file_id($iocb->ki_filp)
        devname = kernel_string(s_id)
 
         count = $count
         pos = $pos
+%( kernel_v >= "2.6.19" %?
+       buf = $iov->iov_base
+%:
         buf = $buf
+%)
                
-        parent_name = kernel_string($iocb->ki_filp->f_dentry->d_parent->d_name->name)
-        file_name = kernel_string($iocb->ki_filp->f_dentry->d_name->name)
+        parent_name = __file_parentname($iocb->ki_filp)
+        file_name = __file_filename($iocb->ki_filp)
 
         name = "nfs.fop.aio.write"
         argstr = sprintf("%p, %d, %d", buf, count, pos)
@@ -479,21 +536,21 @@ probe nfs.fop.aio_write.return =  kernel.function("nfs_file_write").return ?,
 probe nfs.fop.mmap = kernel.function("nfs_file_mmap") ?,
                      module("nfs").function("nfs_file_mmap") ?
 {
-        dev = $file->f_dentry->d_inode->i_sb->s_dev
-        ino = $file->f_dentry->d_inode->i_ino
-       s_id = $file->f_dentry->d_inode->i_sb->s_id
+        dev = __file_dev($file)
+        ino = __file_ino($file)
+       s_id = __file_id($file)
        devname = kernel_string(s_id)
 
         vm_start = $vma->vm_start
         vm_end = $vma->vm_end
         vm_flags = $vma->vm_flags
 
-        parent_name = kernel_string($file->f_dentry->d_parent->d_name->name)
-        file_name = kernel_string($file->f_dentry->d_name->name)
+        parent_name = __file_parentname($file)
+        file_name = __file_filename($file)
 
-        cache_valid = __nfsi_cache_valid($file->f_dentry->d_inode)
-        cache_time  = __nfsi_rcache_time($file->f_dentry->d_inode)
-        attr_time   = __nfsi_attr_time($file->f_dentry->d_inode)
+        cache_valid = __nfsi_cache_valid(__file_inode($file))
+        cache_time  = __nfsi_rcache_time(__file_inode($file))
+        attr_time   = __nfsi_attr_time(__file_inode($file))
 
         name = "nfs.fop.mmap"
         argstr = sprintf("0x%x, 0x%x, 0x%x", vm_start, vm_end, vm_flags)
@@ -521,12 +578,12 @@ probe nfs.fop.mmap.return = kernel.function("nfs_file_mmap").return ?,
 probe nfs.fop.open = kernel.function("nfs_file_open") ?,
                      module("nfs").function("nfs_file_open") ?
 {
-        dev = $filp->f_dentry->d_inode->i_sb->s_dev
+        dev = __file_dev($filp)
         ino = $inode->i_ino
        s_id = $inode->i_sb->s_id
        devname = kernel_string(s_id)
 
-        filename = kernel_string($filp->f_dentry->d_name->name)
+        filename = __file_filename($filp)
         flag = $filp->f_flags   
 
         i_size = $inode->i_size
@@ -556,13 +613,13 @@ probe nfs.fop.open.return = kernel.function("nfs_file_open").return ?,
 probe nfs.fop.flush = kernel.function("nfs_file_flush") ?,
                       module("nfs").function("nfs_file_flush") ?
 {
-        dev = $file->f_dentry->d_inode->i_sb->s_dev
-        ino = $file->f_dentry->d_inode->i_ino;
-       s_id = $file->f_dentry->d_inode->i_sb->s_id
+        dev = __file_dev($file)
+        ino = __file_ino($file)
+       s_id = __file_id($file)
        devname = kernel_string(s_id)
 
         mode = $file->f_mode
-        ndirty = __nfsi_ndirty($file->f_dentry->d_inode)
+        ndirty = __nfsi_ndirty(__file_inode($file))
 
         name = "nfs.fop.flush"
         argstr = sprintf("%d",ino)
@@ -588,7 +645,7 @@ probe nfs.fop.flush.return = kernel.function("nfs_file_flush").return ?,
 probe nfs.fop.release = kernel.function("nfs_file_release") ?,
                       module("nfs").function("nfs_file_release") ?
 {
-        dev = $filp->f_dentry->d_inode->i_sb->s_dev
+        dev = __file_dev($filp)
         ino = $inode->i_ino
        s_id = $inode->i_sb->s_id
        devname = kernel_string(s_id)
@@ -619,12 +676,12 @@ probe nfs.fop.release.return = kernel.function("nfs_file_release").return ?,
 probe nfs.fop.fsync = kernel.function("nfs_fsync") ?,
                       module("nfs").function("nfs_fsync") ?
 {
-        dev = $file->f_dentry->d_inode->i_sb->s_dev
-        ino = $file->f_dentry->d_inode->i_ino
-       s_id = $file->f_dentry->d_inode->i_sb->s_id
+        dev = __file_dev($file)
+        ino = __file_ino($file)
+       s_id = __file_id($file)
        devname = kernel_string(s_id)
 
-        ndirty = __nfsi_ndirty($file->f_dentry->d_inode)
+        ndirty = __nfsi_ndirty(__file_inode($file))
 
         name = "nfs.fop.fsync"
        argstr = sprintf("%d",ino)  
@@ -655,12 +712,12 @@ probe nfs.fop.fsync.return = kernel.function("nfs_fsync").return ?,
 probe nfs.fop.lock = kernel.function("nfs_lock") ?,
                      module("nfs").function("nfs_lock") ?
 {
-        dev = $filp->f_dentry->d_inode->i_sb->s_dev
-        ino = $filp->f_dentry->d_inode->i_ino
-       s_id = $filp->f_dentry->d_inode->i_sb->s_id
+        dev = __file_dev($filp)
+        ino = __file_ino($filp)
+       s_id = __file_id($filp)
        devname = kernel_string(s_id)
  
-        i_mode = $filp->f_dentry->d_inode->i_mode
+        i_mode = __file_mode($filp)
         cmd = $cmd
  
         fl_type = $fl->fl_type
@@ -702,18 +759,17 @@ probe nfs.fop.sendfile = kernel.function("nfs_file_sendfile") ?,
                               module("nfs").function("nfs_file_sendfile") ?
 {
 
-        dev = $filp->f_dentry->d_inode->i_sb->s_dev
-        ino = $filp->f_dentry->d_inode->i_ino
-       s_id = $filp->f_dentry->d_inode->i_sb->s_id
+        dev = __file_dev($filp)
+        ino = __file_ino($filp)
+       s_id = __file_id($filp)
        devname = kernel_string(s_id)
 
         count = $count
         ppos  = __d_loff_t($ppos)
 
-        cache_valid = __nfsi_cache_valid($filp->f_dentry->d_inode)
-        cache_time  = __nfsi_rcache_time($filp->f_dentry->d_inode)
-        attr_time   = __nfsi_attr_time($filp->f_dentry->d_inode)
-
+        cache_valid = __nfsi_cache_valid(__file_inode($filp))
+        cache_time  = __nfsi_rcache_time(__file_inode($filp))
+        attr_time   = __nfsi_attr_time(__file_inode($filp))
 
         name = "nfs.fop.sendfile"
         argstr = sprintf("%d,%d", count,ppos)
index 6284ce63ad69645e1b8f9734f0b07c20b23c0142..b82266302c00f4f4a2f5c5617f4d0ee964a10760 100644 (file)
      {
         struct rpc_clnt * tk_client;
         struct rpc_xprt * cl_xprt;
+        struct sockaddr_in *addr;
         tk_client = task->tk_client;
         cl_xprt= tk_client->cl_xprt;
-
-        return cl_xprt->addr.sin_addr.s_addr;
+        addr = (struct sockaddr_in *)&(cl_xprt->addr);
+        if (addr->sin_family != AF_INET)
+                /* Now consider ipv4 only */
+                return 0;
+        return addr->sin_addr.s_addr;
      }
      int get_prot(struct rpc_task * task)
      {
   1:get proto
 */
 function __i2n_ip_proto :long(dir:long,index:long) %{ /* pure */
-       int index = (int) (THIS->index);
-       struct inode * dir = (struct inode *)(THIS->dir);
+        int index = (int) (THIS->index);
+        struct inode * dir = (struct inode *)(THIS->dir);
         struct rpc_clnt * clnt = NFS_CLIENT(dir);
         struct rpc_xprt * cl_xprt = clnt->cl_xprt;
-        struct sockaddr_in * addr = &(cl_xprt->addr);
-
-        if(index == 0)
-               THIS->__retvalue = addr->sin_addr.s_addr;
-        else
-               THIS->__retvalue = cl_xprt->prot;
+        struct sockaddr_in * addr = (struct sockaddr_in *)&(cl_xprt->addr);
+
+        if(index == 0) {
+                if (addr->sin_family == AF_INET) {
+                        /* Now consider ipv4 only */
+                        THIS->__retvalue = addr->sin_addr.s_addr;
+                } else
+                        THIS->__retvalue = 0;
+        } else
+                THIS->__retvalue = cl_xprt->prot;
 %}
 
 /*
@@ -1220,7 +1228,7 @@ probe nfs.proc.open = kernel.function("nfs_open") ?,
        prot = __i2n_ip_proto($inode,1)         
        version = __nfs_version($inode)
 
-       filename = kernel_string($filp->f_dentry->d_name->name)
+       filename = __file_filename($filp)
        flag = $filp->f_flags
        mode = $filp->f_mode
 
@@ -1254,7 +1262,7 @@ probe nfs.proc.release= kernel.function("nfs_release") ?,
        prot = __i2n_ip_proto($inode,1)         
        version = __nfs_version($inode)
 
-       filename = kernel_string($filp->f_dentry->d_name->name)
+       filename = __file_filename($filp)
        flag = $filp->f_flags
        mode = $filp->f_mode
 
index aabdf51a461a4a033d1eea19d9144b945bbab4b0..8d8a09a08339ba62892fce93fb682543f60740c4 100644 (file)
@@ -297,7 +297,11 @@ probe nfsd.proc2.read = kernel.function("nfsd_proc_read")?,
 
        count = $argp->count 
        offset = $argp->offset 
+%( kernel_v >= "2.6.19" %?
+       vec = $rqstp->rq_vec
+%:
        vec = $argp->vec
+%)
        vlen = $argp->vlen
 
        name = "nfsd.proc2.read"
@@ -326,7 +330,11 @@ probe nfsd.proc3.read = kernel.function("nfsd3_proc_read")?,
 
        count = $argp->count 
        offset = $argp->offset 
+%( kernel_v >= "2.6.19" %?
+       vec = $rqstp->rq_vec
+%:
        vec = $argp->vec
+%)
        vlen = $argp->vlen
 
        name = "nfsd.proc3.read"
@@ -382,7 +390,11 @@ probe nfsd.proc2.write = kernel.function("nfsd_proc_write")?,
 
        count = $argp->len
        offset = $argp->offset 
+%( kernel_v >= "2.6.19" %?
+       vec = $rqstp->rq_vec
+%:
        vec = $argp->vec
+%)
        vlen = $argp->vlen
 
        name = "nfsd.proc2.write"
@@ -411,7 +423,11 @@ probe nfsd.proc3.write = kernel.function("nfsd3_proc_write")?,
 
        count = $argp->count 
        offset = $argp->offset 
+%( kernel_v >= "2.6.19" %?
+       vec = $rqstp->rq_vec
+%:
        vec = $argp->vec
+%)
        vlen = $argp->vlen
        stable = $argp->stable
 
@@ -778,7 +794,7 @@ probe nfsd.open.return = kernel.function("nfsd_open").return ?,
 probe nfsd.close = kernel.function("nfsd_close")?,
                    module("nfsd").function("nfsd_close")?
 {
-       filename = kernel_string($filp->f_dentry->d_name->name)
+       filename = __file_filename($filp)
 
        name = "nfsd.close"
        argstr = sprintf("%s",filename)
index 042f878f0c4610e493f12cec37684d8f83465402..ef001e9e462c65107f1eb90d339974d460edead6 100644 (file)
@@ -828,25 +828,41 @@ function xid_from_clnt:long(clnt:long)
 function prog_from_clnt:long(clnt:long)
 %{
        struct rpc_clnt *clnt = (struct rpc_clnt *)(long)THIS->clnt;
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19)
+       THIS->__retvalue = clnt ? clnt->cl_prog : 0;
+#else
        THIS->__retvalue = clnt ? clnt->cl_pmap->pm_prog : 0;
+#endif
 %}
 
 function vers_from_clnt:long(clnt:long)
 %{
        struct rpc_clnt *clnt = (struct rpc_clnt *)(long)THIS->clnt;
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19)
+       THIS->__retvalue = clnt ? clnt->cl_vers : 0;
+#else
        THIS->__retvalue = clnt ? clnt->cl_pmap->pm_vers : 0;
+#endif
 %}
 
 function prot_from_clnt:long(clnt:long)
 %{
        struct rpc_clnt *clnt = (struct rpc_clnt *)(long)THIS->clnt;
-       THIS->__retvalue = clnt ? clnt->cl_pmap->pm_prot : 0;
+       THIS->__retvalue = clnt ? clnt->cl_xprt->prot : 0;
 %}
 
 function port_from_clnt:long(clnt:long)
 %{
        struct rpc_clnt *clnt = (struct rpc_clnt *)(long)THIS->clnt;
-       THIS->__retvalue = clnt ? clnt->cl_pmap->pm_port : 0;
+       if(clnt != NULL) {
+               struct sockaddr_in *addr = (struct sockaddr_in *)&(clnt->cl_xprt->addr);
+               if(addr != NULL && addr->sin_family == AF_INET) {
+                       /* Now consider ipv4 only */
+                       THIS->__retvalue = ntohs(addr->sin_port);
+                       return;
+               }
+       }
+       THIS->__retvalue = 0;
 %}
 
 function clones_from_clnt:long(clnt:long)
index b121d5b90ae121f5433f82c2cd562a9bc682d578..eecc87f02bce73e6dda9953846752686a5d6e1b2 100644 (file)
@@ -88,15 +88,82 @@ deref_fault:
        }
 %}
 
+function __file_dev: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_sb->s_dev),
+               &(file->f_dentry->d_inode->i_sb->s_dev));
+       if (0) {
+deref_fault:
+               CONTEXT->last_error = "pointer dereference fault";
+       }
+%}
+
+function __file_bdev: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_sb->s_bdev),
+               &(file->f_dentry->d_inode->i_sb->s_bdev));
+       if (0) {
+deref_fault:
+               CONTEXT->last_error = "pointer dereference fault";
+       }
+%}
+
+function __file_ino: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_ino),
+               &(file->f_dentry->d_inode->i_ino));
+       if (0) {
+deref_fault:
+               CONTEXT->last_error = "pointer dereference fault";
+       }
+%}
+
+function __file_maxbytes: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_sb->s_maxbytes),
+               &(file->f_dentry->d_inode->i_sb->s_maxbytes));
+       if (0) {
+deref_fault:
+               CONTEXT->last_error = "pointer dereference fault";
+       }
+%}
+
+function __file_filename:string (file:long) %{ /* pure */
+       struct file *file = (struct file *)(long)THIS->file;
+       if ((file == NULL) 
+               || (file->f_dentry == NULL) 
+               || (file->f_dentry->d_name.name == NULL)) 
+               strlcpy(THIS->__retvalue, "NULL", MAXSTRINGLEN);
+       else {
+               strlcpy(THIS->__retvalue, file->f_dentry->d_name.name, MAXSTRINGLEN);
+       }
+%}
+
 probe generic.fop.llseek = kernel.function ("generic_file_llseek")
 {
-       dev = $file->f_dentry->d_inode->i_sb->s_dev
-       devname = __find_bdevname(dev, $file->f_dentry->d_inode->i_sb->s_bdev)
-       ino = $file->f_dentry->d_inode->i_ino
+       dev = __file_dev($file)
+       devname = __find_bdevname(dev, __file_bdev($file))
+       ino = __file_ino($file)
 
        offset = $offset
        origin = $origin
-        maxbyte = $file->f_dentry->d_inode->i_sb->s_maxbytes
+        maxbyte = __file_maxbytes($file)
 
        name = "generic_file_llseek"
        argstr = sprintf("%d, %d", offset, origin)
@@ -109,9 +176,9 @@ probe generic.fop.llseek.return = kernel.function ("generic_file_llseek").return
 
 probe generic.fop.aio_read = kernel.function ("generic_file_aio_read")
 {
-       dev = $iocb->ki_filp->f_dentry->d_inode->i_sb->s_dev
-       devname = __find_bdevname(dev, $iocb->ki_filp->f_dentry->d_inode->i_sb->s_bdev)
-       ino = $iocb->ki_filp->f_dentry->d_inode->i_ino
+       dev = __file_dev($iocb->ki_filp)
+       devname = __find_bdevname(dev, __file_bdev($iocb->ki_filp))
+       ino = __file_ino($iocb->ki_filp)
 
        count = $count
        pos = $pos
@@ -136,9 +203,9 @@ probe generic.fop.aio_read.return = kernel.function ("generic_file_aio_read").re
 
 probe generic.fop.aio_write = kernel.function ("generic_file_aio_write")
 {
-       dev = $iocb->ki_filp->f_dentry->d_inode->i_sb->s_dev
-       devname = __find_bdevname(dev, $iocb->ki_filp->f_dentry->d_inode->i_sb->s_bdev)
-       ino = $iocb->ki_filp->f_dentry->d_inode->i_ino
+       dev = __file_dev($iocb->ki_filp)
+       devname = __find_bdevname(dev, __file_bdev($iocb->ki_filp))
+       ino = __file_ino($iocb->ki_filp)
 
        count = $count
        pos = $pos
@@ -163,9 +230,9 @@ probe generic.fop.aio_write.return = kernel.function ("generic_file_aio_write").
 
 probe generic.fop.readv = kernel.function ("generic_file_readv")
 {
-       dev = $filp->f_dentry->d_inode->i_sb->s_dev
-       devname = __find_bdevname(dev, $filp->f_dentry->d_inode->i_sb->s_bdev)
-       ino = $filp->f_dentry->d_inode->i_ino
+       dev = __file_dev($filp)
+       devname = __find_bdevname(dev, __file_bdev($filp))
+       ino = __file_ino($filp)
 
        nr_segs = $nr_segs
        pos = ppos_pos($ppos)
@@ -190,9 +257,9 @@ probe generic.fop.readv.return = kernel.function ("generic_file_readv").return
 /* calls __generic_file_write_nolock */
 probe generic.fop.writev = kernel.function ("generic_file_writev")
 {
-       dev = $file->f_dentry->d_inode->i_sb->s_dev
-       devname = __find_bdevname(dev, $file->f_dentry->d_inode->i_sb->s_bdev)
-       ino = $file->f_dentry->d_inode->i_ino
+       dev = __file_dev($file)
+       devname = __find_bdevname(dev, __file_bdev($file))
+       ino = __file_ino($file)
 
        nr_segs = $nr_segs
        pos = ppos_pos($ppos)
@@ -219,9 +286,9 @@ probe generic.fop.writev.return = kernel.function ("generic_file_writev").return
    add filemap_nopage, filemap_populate */
 probe generic.fop.mmap = kernel.function ("generic_file_mmap")
 {
-       dev = $file->f_dentry->d_inode->i_sb->s_dev
-       devname = __find_bdevname(dev, $file->f_dentry->d_inode->i_sb->s_bdev)
-       ino = $file->f_dentry->d_inode->i_ino
+       dev = __file_dev($file)
+       devname = __find_bdevname(dev, __file_bdev($file))
+       ino = __file_ino($file)
 
        vm_start = $vma->vm_start
        vm_end = $vma->vm_end
@@ -238,11 +305,11 @@ probe generic.fop.mmap.return = kernel.function ("generic_file_mmap").return
 
 probe generic.fop.open = kernel.function ("generic_file_open")
 {
-       dev = $filp->f_dentry->d_inode->i_sb->s_dev
-       devname = __find_bdevname(dev, $filp->f_dentry->d_inode->i_sb->s_bdev)
+       dev = __file_dev($filp)
+       devname = __find_bdevname(dev, __file_bdev($filp))
        ino = $inode->i_ino
 
-       filename = kernel_string($filp->f_dentry->d_name->name)
+       filename = __file_filename($filp)
         flag = $filp->f_flags
         size = $inode->i_size
 
@@ -257,9 +324,9 @@ probe generic.fop.open.return = kernel.function ("generic_file_open").return
 
 probe generic.fop.sendfile = kernel.function ("generic_file_sendfile")
 {
-       dev = $in_file->f_dentry->d_inode->i_sb->s_dev
-       devname = __find_bdevname(dev, $in_file->f_dentry->d_inode->i_sb->s_bdev)
-       ino = $in_file->f_dentry->d_inode->i_ino
+       dev = __file_dev($in_file)
+       devname = __find_bdevname(dev, __file_bdev($in_file))
+       ino = __file_ino($in_file)
 
        count = $count
         ppos = $ppos
@@ -283,9 +350,9 @@ probe generic.fop.sendfile.return = kernel.function ("generic_file_sendfile").re
 
 probe generic.fop.splice_read = kernel.function ("generic_file_splice_read")
 {
-       dev = $in->f_dentry->d_inode->i_sb->s_dev
-       devname = __find_bdevname(dev, $in->f_dentry->d_inode->i_sb->s_bdev)
-       ino = $in->f_dentry->d_inode->i_ino
+       dev = __file_dev($in)
+       devname = __find_bdevname(dev, __file_bdev($in))
+       ino = __file_ino($in)
 
        len = $len
        flags = $flags
@@ -309,9 +376,9 @@ probe generic.fop.splice_read.return = kernel.function ("generic_file_splice_rea
 
 probe generic.fop.splice_write = kernel.function ("generic_file_splice_write")
 {
-       dev = $out->f_dentry->d_inode->i_sb->s_dev
-       devname = __find_bdevname(dev, $out->f_dentry->d_inode->i_sb->s_bdev)
-       ino = $out->f_dentry->d_inode->i_ino
+       dev = __file_dev($out)
+       devname = __find_bdevname(dev, __file_bdev($out))
+       ino = __file_ino($out)
 
        len = $len
        flags = $flags
@@ -335,9 +402,9 @@ probe generic.fop.splice_write.return = kernel.function ("generic_file_splice_wr
 
 probe generic.fop.read = kernel.function ("generic_file_read")
 {
-       dev = $filp->f_dentry->d_inode->i_sb->s_dev
-       devname = __find_bdevname(dev, $filp->f_dentry->d_inode->i_sb->s_bdev)
-       ino = $filp->f_dentry->d_inode->i_ino
+       dev = __file_dev($filp)
+       devname = __find_bdevname(dev, __file_bdev($filp))
+       ino = __file_ino($filp)
 
        count = $count
 
@@ -360,9 +427,9 @@ probe generic.fop.read.return = kernel.function ("generic_file_read").return
 
 probe generic.fop.write = kernel.function ("generic_file_write")
 {
-       dev = $file->f_dentry->d_inode->i_sb->s_dev
-       devname = __find_bdevname(dev, $file->f_dentry->d_inode->i_sb->s_bdev)
-       ino = $file->f_dentry->d_inode->i_ino
+       dev = __file_dev($file)
+       devname = __find_bdevname(dev, __file_bdev($file))
+       ino = __file_ino($file)
 
        count = $count
 
@@ -406,8 +473,8 @@ probe generic.aop.writepages.return = kernel.function ("mpage_writepages").retur
 
 probe vfs.do_sync_read = kernel.function ("do_sync_read")
 {
-       dev = $filp->f_dentry->d_inode->i_sb->s_dev
-       ino = $filp->f_dentry->d_inode->i_ino
+       dev = __file_dev($filp)
+       ino = __file_ino($filp)
 
        len = $len
        pos = ppos_pos($ppos)
@@ -432,9 +499,9 @@ probe vfs.do_sync_read.return = kernel.function ("do_sync_read").return
 
 probe vfs.do_sync_write = kernel.function ("do_sync_write")
 {
-       dev = $filp->f_dentry->d_inode->i_sb->s_dev
-       devname = __find_bdevname(dev, $filp->f_dentry->d_inode->i_sb->s_bdev)
-       ino = $filp->f_dentry->d_inode->i_ino
+       dev = __file_dev($filp)
+       devname = __find_bdevname(dev, __file_bdev($filp))
+       ino = __file_ino($filp)
 
        len = $len
        pos = ppos_pos($ppos)
This page took 0.062639 seconds and 5 git commands to generate.