summaryrefslogtreecommitdiffstats
path: root/tapset/LKET/nfs_proc.stp
diff options
context:
space:
mode:
authorguanglei <guanglei>2006-09-12 09:31:14 +0000
committerguanglei <guanglei>2006-09-12 09:31:14 +0000
commit4a6a795144366840a183f18956a28eefbd5519cc (patch)
tree33b66c1b15f911e162bbc25704fcd6f9b4709fd6 /tapset/LKET/nfs_proc.stp
parentcf2c2c24c04938193fa64684745eb0356f9b0848 (diff)
downloadsystemtap-steved-4a6a795144366840a183f18956a28eefbd5519cc.tar.gz
systemtap-steved-4a6a795144366840a183f18956a28eefbd5519cc.tar.xz
systemtap-steved-4a6a795144366840a183f18956a28eefbd5519cc.zip
src/lket.5.in:
document nfs trace hooks tapset/nfsd.stp, tapset/nfs_proc.stp, tapset/nfs.stp: Change NFS file identifier. Change NFS version data type from String to INT. Add version variable to nfs_open and nfs_release. LKET/iosyscall.stp: change log_iosyscall_sync() be sync with different timing methods. LKET/utils.stp: add reset_maxaction() since there are too many functions called inside "probe begin". LKET/nfsd.stp, LKET/nfs_proc.stp, LKET/nfs.stp: New trace hooks for NFS, including both NFS client and server side activities. LKET/register_event.stp: Add the register event calls for NFS trace hooks.
Diffstat (limited to 'tapset/LKET/nfs_proc.stp')
-rwxr-xr-xtapset/LKET/nfs_proc.stp611
1 files changed, 611 insertions, 0 deletions
diff --git a/tapset/LKET/nfs_proc.stp b/tapset/LKET/nfs_proc.stp
new file mode 100755
index 00000000..82623bc5
--- /dev/null
+++ b/tapset/LKET/nfs_proc.stp
@@ -0,0 +1,611 @@
+// nfs trace hooks
+// Copyright (C) 2006 IBM Corp.
+//
+// This file is part of systemtap, and is free software. You can
+// redistribute it and/or modify it under the terms of the GNU General
+// Public License (GPL); either version 2, or (at your option) any
+// later version.
+%{
+ #include <linux/nfs_fs.h>
+%}
+%{
+ void getdevice(char *sid,int * major,int* min)
+ {
+ char c;
+ char * minor, *p;
+ int i = 0;
+
+ c = ':';
+ minor = strchr(sid,c);
+ minor++;
+
+ p = sid;
+ c = *p;
+ p++;
+ while(c != ':')
+ {
+ if(c > '0' || c < '9')
+ i = i << 4 | (c - 48);
+ else if (c > 'a' || c < 'f')
+ i = i<< 4 | (c-87);
+ c = *p;
+ p++;
+ }
+ *major = i;
+
+ p = minor;
+ c = *minor;
+ p++;
+ while(c != 0)
+ {
+ if(c > '0' || c < '9')
+ i = i << 4 | (c - 48);
+ else if (c > 'a' || c < 'f')
+ i = i<< 4 | (c-87);
+ c = *p;
+ p++;
+ }
+ *min = i;
+ }
+%}
+
+probe never
+{
+ printf("%d",GROUP_NFS)
+}
+probe addevent.nfs.proc
+ = addevent.nfs.proc.entries,
+ addevent.nfs.proc.return
+{}
+
+probe addevent.nfs.proc.entries
+ = addevent.nfs.proc.lookup.entry,
+ addevent.nfs.proc.read.entry,
+ addevent.nfs.proc.write.entry,
+ addevent.nfs.proc.commit.entry,
+ addevent.nfs.proc.read_setup.entry,
+ addevent.nfs.proc.write_setup.entry,
+ addevent.nfs.proc.commit_setup.entry,
+ addevent.nfs.proc.read_done.entry,
+ addevent.nfs.proc.write_done.entry,
+ addevent.nfs.proc.commit_done.entry,
+ addevent.nfs.proc.open.entry,
+ addevent.nfs.proc.release.entry,
+ addevent.nfs.proc.create.entry,
+ addevent.nfs.proc.rename.entry,
+ addevent.nfs.proc.remove.entry
+{}
+
+probe addevent.nfs.proc.return
+ = addevent.nfs.proc.lookup.return,
+ addevent.nfs.proc.read.return,
+ addevent.nfs.proc.write.return,
+ addevent.nfs.proc.commit.return,
+ addevent.nfs.proc.read_done.return,
+ addevent.nfs.proc.write_done.return,
+ addevent.nfs.proc.commit_done.return,
+ addevent.nfs.proc.open.return,
+ addevent.nfs.proc.release.return,
+ addevent.nfs.proc.create.return,
+ addevent.nfs.proc.rename.return,
+ addevent.nfs.proc.remove.return
+{}
+
+probe addevent.nfs.proc.lookup.entry
+ += _addevent.nfs.proc.lookup.entry
+{
+ update_record()
+}
+
+probe _addevent.nfs.proc.lookup.entry
+ = nfs.proc.lookup
+{
+ log_proc_lookup(version,$dir,filename)
+}
+
+function log_proc_lookup(version:long,dir:long,filename:string)
+%{
+ struct inode * dir = (struct inode * )THIS->dir;
+ struct super_block * sb = dir->i_sb;
+ int major_device,minor_device;
+
+ getdevice(sb->s_id,&major_device,&minor_device);
+ _lket_trace(_GROUP_NFS,_HOOKID_NFS_PROC_LOOKUP_ENTRY,"%1b%1b%8b%1b%0s",(_FMT_)major_device,(_FMT_)minor_device,
+ NFS_FILEID(dir),THIS->version,THIS->filename);
+%}
+
+probe addevent.nfs.proc.lookup.return
+ += _addevent.nfs.proc.lookup.return
+{
+ update_record()
+}
+
+probe _addevent.nfs.proc.lookup.return
+ = nfs.proc.lookup.return
+{
+ log_nfs_return(HOOKID_NFS_PROC_LOOKUP_RETURN,$return)
+}
+
+probe addevent.nfs.proc.read.entry
+ += _addevent.nfs.proc.read.entry
+{
+ update_record()
+}
+
+probe _addevent.nfs.proc.read.entry
+ = nfs.proc.read
+{
+ log_proc_read(version,$rdata,count,offset)
+}
+
+function log_proc_read(version:long,rdata:long,count:long,offset:long)
+%{
+ struct nfs_read_data* rdata = (struct nfs_read_data* )THIS->rdata;
+ struct inode *inode = rdata->inode;
+ struct super_block * sb = inode->i_sb;
+ int major_device,minor_device;
+
+ getdevice(sb->s_id,&major_device,&minor_device);
+ _lket_trace(_GROUP_NFS,_HOOKID_NFS_PROC_READ_ENTRY,"%1b%1b%8b%1b%4b%8b",major_device,minor_device,
+ NFS_FILEID(inode),THIS->version,THIS->count,THIS->offset);
+%}
+
+probe addevent.nfs.proc.read.return
+ += _addevent.nfs.proc.read.return
+{
+ update_record()
+}
+
+probe _addevent.nfs.proc.read.return
+ = nfs.proc.read.return
+{
+ log_nfs_return(HOOKID_NFS_PROC_READ_RETURN,$return)
+}
+
+probe addevent.nfs.proc.write.entry
+ += _addevent.nfs.proc.write.entry
+{
+ update_record()
+}
+
+probe _addevent.nfs.proc.write.entry
+ = nfs.proc.write
+{
+ log_proc_write(version,$wdata,count,offset)
+}
+
+function log_proc_write(version:long,wdata:long,count:long,offset:long)
+%{
+ struct nfs_write_data* wdata = (struct nfs_write_data* )THIS->wdata;
+ struct inode *inode = wdata->inode;
+ struct super_block * sb = inode->i_sb;
+ int major_device,minor_device;
+
+ getdevice(sb->s_id,&major_device,&minor_device);
+ _lket_trace(_GROUP_NFS,_HOOKID_NFS_PROC_WRITE_ENTRY,"%1b%1b%8b%1b%4b%8b",(_FMT_)major_device,(_FMT_)minor_device,
+ NFS_FILEID(inode),THIS->version,THIS->count,THIS->offset);
+%}
+
+probe addevent.nfs.proc.write.return
+ += _addevent.nfs.proc.write.return
+{
+ update_record()
+}
+
+probe _addevent.nfs.proc.write.return
+ = nfs.proc.write.return
+{
+ log_nfs_return(HOOKID_NFS_PROC_WRITE_RETURN,$return)
+}
+
+probe addevent.nfs.proc.commit.entry
+ += _addevent.nfs.proc.commit.entry
+{
+ update_record()
+}
+
+probe _addevent.nfs.proc.commit.entry
+ = nfs.proc.commit
+{
+ log_proc_commit(version,$cdata,count,offset)
+}
+
+function log_proc_commit(version:long,cdata:long,count:long,offset:long)
+%{
+ struct nfs_write_data* cdata = (struct nfs_write_data* )THIS->cdata;
+ struct inode *inode = cdata->inode;
+ struct super_block * sb = inode->i_sb;
+ int major_device,minor_device;
+
+ getdevice(sb->s_id,&major_device,&minor_device);
+
+ _lket_trace(_GROUP_NFS,_HOOKID_NFS_PROC_COMMIT_ENTRY,"%1b%1b%8b%1b%4b%8b",(_FMT_)major_device,(_FMT_)minor_device,
+ NFS_FILEID(inode),THIS->version,THIS->count,THIS->offset);
+%}
+
+probe addevent.nfs.proc.commit.return
+ += _addevent.nfs.proc.commit.return
+{
+ update_record()
+}
+
+probe _addevent.nfs.proc.commit.return
+ = nfs.proc.commit.return
+{
+ log_nfs_return(HOOKID_NFS_PROC_COMMIT_RETURN,$return)
+}
+
+probe addevent.nfs.proc.read_setup.entry
+ += _addevent.nfs.proc.read_setup.entry
+{
+ update_record()
+}
+
+probe _addevent.nfs.proc.read_setup.entry
+ = nfs.proc.read_setup
+{
+ log_proc_read_setup(version,$data,count,offset)
+}
+
+function log_proc_read_setup(version:long,data:long,count:long,offset:long)
+%{
+ struct nfs_read_data* data = (struct nfs_read_data* )THIS->data;
+ struct inode *inode = data->inode;
+ struct super_block * sb = inode->i_sb;
+ int major_device,minor_device;
+
+ getdevice(sb->s_id,&major_device,&minor_device);
+
+ _lket_trace(_GROUP_NFS,_HOOKID_NFS_PROC_READSETUP_ENTRY,"%1b%1b%8b%1b%4b%8b",(_FMT_)major_device,(_FMT_)minor_device,
+ NFS_FILEID(inode),THIS->version,THIS->count,THIS->offset);
+%}
+
+probe addevent.nfs.proc.write_setup.entry
+ += _addevent.nfs.proc.write_setup.entry
+{
+ update_record()
+}
+
+probe _addevent.nfs.proc.write_setup.entry
+ = nfs.proc.write_setup
+{
+ log_proc_write_setup(version,$data,count,offset,how)
+}
+
+function log_proc_write_setup(version:long,data:long,count:long,offset:long,how:long)
+%{
+ struct nfs_write_data* data = (struct nfs_write_data* )THIS->data;
+ struct inode *inode = data->inode;
+ struct super_block * sb = inode->i_sb;
+ int major_device,minor_device;
+
+ getdevice(sb->s_id,&major_device,&minor_device);
+
+ _lket_trace(_GROUP_NFS,_HOOKID_NFS_PROC_WRITESETUP_ENTRY,"%1b%1b%8b%1b%1b%4b%8b",(_FMT_)major_device,(_FMT_)minor_device,
+ NFS_FILEID(inode),THIS->version,THIS->how,THIS->count,THIS->offset);
+%}
+
+
+probe addevent.nfs.proc.commit_setup.entry
+ += _addevent.nfs.proc.commit_setup.entry
+{
+ update_record()
+}
+
+probe _addevent.nfs.proc.commit_setup.entry
+ = nfs.proc.commit_setup
+{
+ log_proc_commit_setup(version,$data,count,offset)
+}
+
+function log_proc_commit_setup(version:long,data:long,count:long,offset:long)
+%{
+ struct nfs_write_data* data = (struct nfs_write_data* )THIS->data;
+ struct inode *inode = data->inode;
+ struct super_block * sb = inode->i_sb;
+ int major_device,minor_device;
+
+ getdevice(sb->s_id,&major_device,&minor_device);
+
+ _lket_trace(_GROUP_NFS,_HOOKID_NFS_PROC_COMMITSETUP_ENTRY,"%1b%1b%8b%1b%4b%8b",(_FMT_)major_device,(_FMT_)minor_device,
+ NFS_FILEID(inode),THIS->version,THIS->count,THIS->offset);
+%}
+
+
+probe addevent.nfs.proc.read_done.entry
+ += _addevent.nfs.proc.read_done.entry
+{
+ update_record()
+}
+
+probe _addevent.nfs.proc.read_done.entry
+ = nfs.proc.read_done
+{
+ log_proc_read_done(version,$data,count,status)
+}
+
+function log_proc_read_done(version:long,data:long,count:long,status:long)
+%{
+ struct nfs_read_data* data = (struct nfs_read_data* )THIS->data;
+ struct inode *inode = data->inode;
+ struct super_block * sb = inode->i_sb;
+ int major_device,minor_device;
+
+ getdevice(sb->s_id,&major_device,&minor_device);
+
+ _lket_trace(_GROUP_NFS,_HOOKID_NFS_PROC_READDONE_ENTRY,"%1b%1b%8b%1b%4b%4b",(_FMT_)major_device,(_FMT_)minor_device,
+ NFS_FILEID(inode),THIS->version,THIS->status,THIS->count);
+%}
+
+probe addevent.nfs.proc.read_done.return
+ += _addevent.nfs.proc.read_done.return
+{
+ update_record()
+}
+
+probe _addevent.nfs.proc.read_done.return
+ = nfs.proc.read_done.return
+{
+ log_nfs_return(HOOKID_NFS_PROC_READDONE_RETURN,$return)
+}
+
+probe addevent.nfs.proc.write_done.entry
+ += _addevent.nfs.proc.write_done.entry
+{
+ update_record()
+}
+
+probe _addevent.nfs.proc.write_done.entry
+ = nfs.proc.write_done
+{
+ log_proc_write_done(version,$data,count,status)
+}
+
+function log_proc_write_done(version:long,data:long,count:long,status:long)
+%{
+ struct nfs_write_data* data = (struct nfs_write_data* )THIS->data;
+ struct inode *inode = data->inode;
+ struct super_block * sb = inode->i_sb;
+ int major_device,minor_device;
+
+ getdevice(sb->s_id,&major_device,&minor_device);
+
+ _lket_trace(_GROUP_NFS,_HOOKID_NFS_PROC_WRITEDONE_ENTRY,"%1b%1b%8b%1b%4b%4b",(_FMT_)major_device,(_FMT_)minor_device,
+ NFS_FILEID(inode),THIS->version,THIS->status,THIS->count);
+%}
+
+probe addevent.nfs.proc.write_done.return
+ += _addevent.nfs.proc.write_done.return
+{
+ update_record()
+}
+
+probe _addevent.nfs.proc.write_done.return
+ = nfs.proc.write_done.return
+{
+ log_nfs_return(HOOKID_NFS_PROC_WRITEDONE_RETURN,$return)
+}
+
+probe addevent.nfs.proc.commit_done.entry
+ += _addevent.nfs.proc.commit_done.entry
+{
+ update_record()
+}
+
+probe _addevent.nfs.proc.commit_done.entry
+ = nfs.proc.commit_done
+{
+ log_proc_commit_done(version,$data,count,status)
+}
+
+function log_proc_commit_done(version:long,data:long,count:long,status:long)
+%{
+ struct nfs_write_data* data = (struct nfs_write_data* )THIS->data;
+ struct inode *inode = data->inode;
+ struct super_block * sb = inode->i_sb;
+ int major_device,minor_device;
+
+ getdevice(sb->s_id,&major_device,&minor_device);
+
+ _lket_trace(_GROUP_NFS,_HOOKID_NFS_PROC_COMMITDONE_ENTRY,"%1b%1b%8b%1b%4b%4b",(_FMT_)major_device,(_FMT_)minor_device,
+ NFS_FILEID(inode),THIS->version,THIS->status,THIS->count);
+%}
+
+probe addevent.nfs.proc.commit_done.return
+ += _addevent.nfs.proc.commit_done.return
+{
+ update_record()
+}
+
+probe _addevent.nfs.proc.commit_done.return
+ = nfs.proc.commit_done.return
+{
+ log_nfs_return(HOOKID_NFS_PROC_COMMITDONE_RETURN,$return)
+}
+
+probe addevent.nfs.proc.open.entry
+ += _addevent.nfs.proc.open.entry
+{
+ update_record()
+}
+
+probe _addevent.nfs.proc.open.entry
+ = nfs.proc.open
+{
+ log_proc_open(version,$inode,filename,flag,mode)
+}
+
+function log_proc_open(version:long,inode:long,
+ filename:string,flag:long,mode:long)
+%{
+ struct inode *inode = (struct inode *)THIS->inode;
+ struct super_block * sb = inode->i_sb;
+ int major_device,minor_device;
+
+ getdevice(sb->s_id,&major_device,&minor_device);
+
+ _lket_trace(_GROUP_NFS,_HOOKID_NFS_PROC_OPEN_ENTRY,"%1b%1b%8b%1b%0s%4b%4b",(_FMT_)major_device,(_FMT_)minor_device,
+ NFS_FILEID(inode),THIS->version,THIS->filename,THIS->flag,THIS->mode);
+%}
+
+probe addevent.nfs.proc.open.return
+ += _addevent.nfs.proc.open.return
+{
+ update_record()
+}
+
+probe _addevent.nfs.proc.open.return
+ = nfs.proc.open.return
+{
+ log_nfs_return(HOOKID_NFS_PROC_OPEN_RETURN,$return)
+}
+
+probe addevent.nfs.proc.release.entry
+ += _addevent.nfs.proc.release.entry
+{
+ update_record()
+}
+
+probe _addevent.nfs.proc.release.entry
+ = nfs.proc.release
+{
+ log_proc_release(version,$inode,filename,flag,mode)
+}
+
+function log_proc_release(version:long,inode:long,
+ filename:string,flag:long,mode:long)
+%{
+ struct inode *inode = (struct inode *)THIS->inode;
+ struct super_block * sb = inode->i_sb;
+ int major_device,minor_device;
+
+ getdevice(sb->s_id,&major_device,&minor_device);
+
+ _lket_trace(_GROUP_NFS,_HOOKID_NFS_PROC_RELEASE_ENTRY,"%1b%1b%8b%1b%0s%4b%4b",(_FMT_)major_device,(_FMT_)minor_device,
+ NFS_FILEID(inode),THIS->version,THIS->filename,THIS->flag,THIS->mode);
+%}
+
+probe addevent.nfs.proc.release.return
+ += _addevent.nfs.proc.release.return
+{
+ update_record()
+}
+
+probe _addevent.nfs.proc.release.return
+ = nfs.proc.release.return
+{
+ log_nfs_return(HOOKID_NFS_PROC_RELEASE_RETURN,$return)
+}
+
+probe addevent.nfs.proc.create.entry
+ += _addevent.nfs.proc.create.entry
+{
+ update_record()
+}
+
+probe _addevent.nfs.proc.create.entry
+ = nfs.proc.create
+{
+ log_proc_create(version,$dir,filename,mode)
+}
+
+function log_proc_create(version:long,inode:long,filename:string,mode:long)
+%{
+ struct inode *inode = (struct inode *)THIS->inode;
+ struct super_block * sb = inode->i_sb;
+ int major_device,minor_device;
+
+ getdevice(sb->s_id,&major_device,&minor_device);
+ _lket_trace(_GROUP_NFS,_HOOKID_NFS_PROC_CREATE_ENTRY,"%1b%1b%8b%1b%0s%4b",(_FMT_)major_device,(_FMT_)minor_device,
+ NFS_FILEID(inode),THIS->version,THIS->filename,THIS->mode);
+%}
+
+probe addevent.nfs.proc.create.return
+ += _addevent.nfs.proc.create.return
+{
+ update_record()
+}
+
+probe _addevent.nfs.proc.create.return
+ = nfs.proc.create.return
+{
+ log_nfs_return(HOOKID_NFS_PROC_CREATE_RETURN,$return)
+}
+
+probe addevent.nfs.proc.remove.entry
+ += _addevent.nfs.proc.remove.entry
+{
+ update_record()
+}
+
+probe _addevent.nfs.proc.remove.entry
+ = nfs.proc.remove
+{
+ log_proc_remove(version,$dir,filename)
+}
+
+function log_proc_remove(version:long,inode:long,
+ filename:string)
+%{
+ struct inode *inode = (struct inode *)THIS->inode;
+ struct super_block * sb = inode->i_sb;
+ int major_device,minor_device;
+
+ getdevice(sb->s_id,&major_device,&minor_device);
+ _lket_trace(_GROUP_NFS,_HOOKID_NFS_PROC_REMOVE_ENTRY,"%1b%1b%8b%1b%0s%4b",(_FMT_)major_device,(_FMT_)minor_device,
+ NFS_FILEID(inode),THIS->version,THIS->filename);
+%}
+
+probe addevent.nfs.proc.remove.return
+ += _addevent.nfs.proc.remove.return
+{
+ update_record()
+}
+
+probe _addevent.nfs.proc.remove.return
+ = nfs.proc.remove.return
+{
+ log_nfs_return(HOOKID_NFS_PROC_REMOVE_RETURN,$return)
+}
+
+probe addevent.nfs.proc.rename.entry
+ += _addevent.nfs.proc.rename.entry
+{
+ update_record()
+}
+
+probe _addevent.nfs.proc.rename.entry
+ = nfs.proc.rename
+{
+ log_proc_rename(version,$old_dir,old_name,$new_dir,new_name)
+}
+
+function log_proc_rename(version:long,old_dir:long,old_name:string,
+ new_dir:long,new_name:string)
+%{
+ struct inode *old_dir= (struct inode *)THIS->old_dir;
+ struct inode *new_dir= (struct inode *)THIS->new_dir;
+ struct super_block * old_sb = old_dir->i_sb;
+ struct super_block * new_sb = new_dir->i_sb;
+ int major_old,minor_old,major_new,minor_new;
+
+ getdevice(old_sb->s_id,&major_old,&minor_old);
+ getdevice(new_sb->s_id,&major_new,&minor_new);
+
+ _lket_trace(_GROUP_NFS,_HOOKID_NFS_PROC_RENAME_ENTRY,"%1b%1b%1b%8b%0s%1b%1b%8b%0s",THIS->version,
+ (_FMT_)major_old,(_FMT_)minor_old,NFS_FILEID(old_dir),THIS->old_name,
+ (_FMT_)major_new,(_FMT_)minor_new,NFS_FILEID(new_dir),THIS->new_name);
+%}
+
+probe addevent.nfs.proc.rename.return
+ += _addevent.nfs.proc.rename.return
+{
+ update_record()
+}
+
+probe _addevent.nfs.proc.rename.return
+ = nfs.proc.rename.return
+{
+ log_nfs_return(HOOKID_NFS_PROC_RENAME_RETURN,$return)
+}
+