This is the mail archive of the systemtap@sourceware.org mailing list for the systemtap project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH 05/10] Updated nfsd.proc.create probes


commit cc4f657eadf2a483d0d7803987a7ba71a4e78480
Author: Steve Dickson <steved@redhat.com>
Date:   Tue Feb 23 11:48:57 2010 -0500

    Updated nfsd.proc.create probes
    
    Converted the nfsd.proc.create probes to used
    the @cast() mechanism.
    
    Created the nfsd.proc4.create probes
    
    Signed-off-by: Steve Dickson <steved@redhat.com>

diff --git a/tapset/nfsd.stp b/tapset/nfsd.stp
index b501773..41263fb 100644
--- a/tapset/nfsd.stp
+++ b/tapset/nfsd.stp
@@ -10,6 +10,9 @@
 
 
 %{
+#include <linux/nfs3.h>
+#include <linux/nfs4.h>
+
 #include <linux/sunrpc/svc.h>
 %}
 
@@ -54,6 +57,65 @@ function p_long:long(cnt:long) %{ /* pure */
 	THIS->__retvalue = kread(count);
 	CATCH_DEREF_FAULT();
 %}
+
+function nfs3_cmode:string(cmode:long) %{ /* pure */
+	
+	switch (THIS->cmode) {
+	case NFS3_CREATE_UNCHECKED:
+		snprintf(THIS->__retvalue, MAXSTRINGLEN, "UNCHECKED");
+		break;
+	case NFS3_CREATE_GUARDED:
+		snprintf(THIS->__retvalue, MAXSTRINGLEN, "GUARDED");
+		break;
+	case NFS3_CREATE_EXCLUSIVE:
+		snprintf(THIS->__retvalue, MAXSTRINGLEN, "EXCLUSIVE");
+		break;
+	default: 
+		snprintf(THIS->__retvalue, MAXSTRINGLEN, "Bad Value(%lld)", 
+			THIS->cmode);
+	}
+	CATCH_DEREF_FAULT();
+%}
+
+function nfs4_ctype:string(cmode:long) %{ /* pure */
+	
+	switch (THIS->cmode) {
+	case NF4BAD:
+		snprintf(THIS->__retvalue, MAXSTRINGLEN, "NF4BAD");
+		break;
+	case NF4REG:
+		snprintf(THIS->__retvalue, MAXSTRINGLEN, "NF4REG");
+		break;
+	case NF4DIR:
+		snprintf(THIS->__retvalue, MAXSTRINGLEN, "NF4DIR");
+		break;
+	case NF4BLK:
+		snprintf(THIS->__retvalue, MAXSTRINGLEN, "NF4BLK");
+		break;
+	case NF4CHR:
+		snprintf(THIS->__retvalue, MAXSTRINGLEN, "NF4CHR");
+		break;
+	case NF4LNK:
+		snprintf(THIS->__retvalue, MAXSTRINGLEN, "NF4LNK");
+		break;
+	case NF4SOCK:
+		snprintf(THIS->__retvalue, MAXSTRINGLEN, "NF4SOCK");
+		break;
+	case NF4FIFO:
+		snprintf(THIS->__retvalue, MAXSTRINGLEN, "NF4FIFO");
+		break;
+	case NF4ATTRDIR:
+		snprintf(THIS->__retvalue, MAXSTRINGLEN, "NF4ATTRDIR");
+		break;
+	case NF4NAMEDATTR:
+		snprintf(THIS->__retvalue, MAXSTRINGLEN, "NF4ATTRDIR");
+		break;
+	default: 
+		snprintf(THIS->__retvalue, MAXSTRINGLEN, 
+			"Bad Value(%lld)", THIS->cmode);
+	}
+	CATCH_DEREF_FAULT();
+%}
 /*
 *probe nfsd.dispatch
 *  Fires when server receives a NFS operation from client 
@@ -531,10 +593,12 @@ probe nfsd.proc4.write.commit = kernel.function("nfsd4_commit").return!,
 *  filelen : length of file name
 */
 probe nfsd.proc.create = nfsd.proc2.create,
-                         nfsd.proc3.create
+                         nfsd.proc3.create,
+                         nfsd.proc4.create
 {}
 probe nfsd.proc.create.return = nfsd.proc2.create.return,
-                                nfsd.proc3.create.return
+                                nfsd.proc3.create.return,
+                                nfsd.proc4.create.return
 {}
 
 probe nfsd.proc2.create = kernel.function("nfsd_proc_create")!,
@@ -543,7 +607,7 @@ probe nfsd.proc2.create = kernel.function("nfsd_proc_create")!,
 	client_ip =  addr_from_rqst($rqstp)
 	proto = $rqstp->rq_prot
         version = 2
-	fh = __get_fh($argp,8)
+	fh = & @cast($argp, "struct nfsd_createargs", "kernel:nfsd")->fh
 
 	filelen = $argp->len
 	filename  = kernel_string_n($argp->name, filelen)
@@ -557,7 +621,7 @@ probe nfsd.proc2.create.return =  kernel.function("nfsd_proc_create").return!,
 {
 	name = "nfsd.proc2.create.return"
 	version = 2
-	retstr = sprintf("%d",$return)
+	retstr = sprintf("%s", nfsderror($return))
 }
 
 probe nfsd.proc3.create = kernel.function("nfsd3_proc_create")!,
@@ -565,14 +629,15 @@ probe nfsd.proc3.create = kernel.function("nfsd3_proc_create")!,
 {
 	client_ip =  addr_from_rqst($rqstp)
 	proto = $rqstp->rq_prot
-        version = 3
-	fh = __get_fh($argp,9)
+	version = 3
+	fh = & @cast($argp, "struct nfsd_createargs", "kernel:nfsd")->fh
 
 	filelen = $argp->len
 	filename  = kernel_string_n($argp->name, filelen)
+	createmode = $argp->createmode
 	
 	name = "nfsd.proc3.create"
-	argstr = sprintf("%s",filename)
+	argstr = sprintf("%s (mode=%s)",filename, nfs3_cmode(createmode))
 }
 
 probe nfsd.proc3.create.return =  kernel.function("nfsd3_proc_create").return!,
@@ -580,7 +645,31 @@ probe nfsd.proc3.create.return =  kernel.function("nfsd3_proc_create").return!,
 {
 	name = "nfsd.proc3.create.return"
 	version = 3
-	retstr = sprintf("%d",$return)
+	retstr = sprintf("%s", nfsderror($return))
+}
+
+probe nfsd.proc4.create = kernel.function("nfsd4_create") !,
+                          module("nfsd").function("nfsd4_create") ?
+{
+	client_ip = addr_from_rqst($rqstp)
+	proto = $rqstp->rq_prot
+	version = 4
+	fh = & @cast($cstate, "nfsd4_compound_state", "kernel:nfsd")->current_fh
+	filelen = $create->cr_namelen
+	filename  = kernel_string_n($create->cr_name, filelen)
+	createmode = $create->cr_type
+
+	name = "nfsd.proc4.create"
+	argstr = sprintf("%s (type=%s)",filename, nfs4_ctype(createmode))
+
+} 
+
+probe nfsd.proc4.write.create = kernel.function("nfsd4_create").return!,
+                        module("nfsd").function("nfsd4_create").return?
+{
+	name = "nfsd.proc4.create.return"
+	version = 4
+	retstr = sprintf("%s", nfsderror($return))
 }
 
 /*


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]