Blame SOURCES/rhbz1172781.patch

fab312
commit 1b438c71d1349dfcbcd17cbf95e6c609a7c5ccac
fab312
Author: David Smith <dsmith@redhat.com>
fab312
Date:   Fri Dec 12 13:06:14 2014 -0600
fab312
fab312
    Fix PR17690 by adding support for asynchronous NFS rename operations.
fab312
    
fab312
    * tapset/linux/nfs_proc.stp (nfs.proc.rename_setup): Added to support
fab312
      asynchronous NFS client rename operations.
fab312
      (nfs.proc2.rename_setup): Ditto.
fab312
      (nfs.proc3.rename_setup): Ditto.
fab312
      (nfs.proc4.rename_setup): Ditto.
fab312
      (nfs.proc.rename_done): Ditto.
fab312
      (nfs.proc2.rename_done): Ditto.
fab312
      (nfs.proc3.rename_done): Ditto.
fab312
      (nfs.proc4.rename_done): Ditto.
fab312
      (nfs.proc3.rename): Provide default values if the probe point doesn't
fab312
      exist.
fab312
      (nfs.proc4.rename): Ditto.
fab312
      (nfs.proc3.read_setup): Update to handle new argument names.
fab312
      (nfs.proc4.read_setup): Ditto.
fab312
      (nfs.proc3.read_done): Ditto.
fab312
      (nfs.proc4.read_done): Ditto.
fab312
      (nfs.proc3.write_setup): Ditto.
fab312
      (nfs.proc4.write_setup): Ditto.
fab312
      (nfs.proc3.write_done): Ditto.
fab312
      (nfs.proc4.write_done): Ditto.
fab312
    * testsuite/buildok/nfs_proc-detailed.stp: Update to handle new probe
fab312
      points.
fab312
fab312
diff --git a/tapset/linux/nfs_proc.stp b/tapset/linux/nfs_proc.stp
fab312
index 42c328d..1339aee 100644
fab312
--- a/tapset/linux/nfs_proc.stp
fab312
+++ b/tapset/linux/nfs_proc.stp
fab312
@@ -108,8 +108,9 @@ function __nfsv4_bitmask:long(dir:long, i:long)
fab312
 {
fab312
 %( CONFIG_NFS_V4 == "[ym]" %?
fab312
 	return @cast(NFS_SERVER(dir), "nfs_server", "kernel:nfs")->attr_bitmask[i]
fab312
-%)
fab312
+%:
fab312
 	return 0
fab312
+%)
fab312
 }
fab312
 
fab312
 %( systemtap_v < "2.3" %?
fab312
@@ -127,9 +128,11 @@ probe nfs.proc.entries = nfs.proc.lookup,
fab312
 			 nfs.proc.read_setup,
fab312
 			 nfs.proc.write_setup,
fab312
 			 nfs.proc.commit_setup,
fab312
+			 nfs.proc.rename_setup,
fab312
 			 nfs.proc.read_done,
fab312
 			 nfs.proc.write_done,
fab312
 			 nfs.proc.commit_done,
fab312
+			 nfs.proc.rename_done,
fab312
 			 nfs.proc.open,
fab312
 			 nfs.proc.create,
fab312
 			 nfs.proc.rename,
fab312
@@ -146,9 +149,11 @@ probe nfs.proc.return = nfs.proc.lookup.return,
fab312
 			nfs.proc.read_setup.return,
fab312
 			nfs.proc.write_setup.return,
fab312
 			nfs.proc.commit_setup.return,
fab312
+			nfs.proc.rename_setup.return,
fab312
 			nfs.proc.read_done.return,
fab312
 			nfs.proc.write_done.return,
fab312
 			nfs.proc.commit_done.return,
fab312
+			nfs.proc.rename_done.return,
fab312
 			nfs.proc.open.return,
fab312
 			nfs.proc.create.return,
fab312
 			nfs.proc.rename.return,
fab312
@@ -744,22 +749,24 @@ probe nfs.proc2.read_setup.return =
fab312
 {
fab312
 	version = 2
fab312
 	name = "nfs.proc2.read_setup.return"
fab312
-	retvalue = 0;
fab312
+	retvalue = 0
fab312
 }
fab312
 
fab312
 probe nfs.proc3.read_setup = kernel.function("nfs3_proc_read_setup") !,
fab312
 			     module("nfs").function("nfs3_proc_read_setup") ?,
fab312
 			     module("nfsv3").function("nfs3_proc_read_setup") ?
fab312
 {
fab312
-	inode = @defined($data->header) ? $data->header->inode : $data->inode
fab312
+	inode = @choose_defined($hdr->inode,
fab312
+				@choose_defined($data->header->inode,
fab312
+						$data->inode))
fab312
 	client = NFS_CLIENT(inode)
fab312
 	server_ip = get_ip_from_client(client)
fab312
 	prot = get_prot_from_client(client)
fab312
 	version = 3
fab312
-	fh = 
fab312
+	fh = 0
fab312
 
fab312
-	count = @_nfs_data_args_count($data)
fab312
-	offset = $data->args->offset
fab312
+	count = @_nfs_data_args_count(@choose_defined($hdr, $data))
fab312
+	offset = @choose_defined($hdr->args->offset, $data->args->offset)
fab312
 
fab312
 	name = "nfs.proc3.read_setup"
fab312
 	argstr = sprintf("%d,%d", count, offset)
fab312
@@ -775,21 +782,23 @@ probe nfs.proc3.read_setup.return =
fab312
 {
fab312
 	version = 3
fab312
 	name = "nfs.proc3.read_setup.return"
fab312
-	retvalue = 0;
fab312
+	retvalue = 0
fab312
 }
fab312
 
fab312
 probe nfs.proc4.read_setup = kernel.function("nfs4_proc_read_setup") !,
fab312
 			     module("nfs").function("nfs4_proc_read_setup") ?,
fab312
 			     module("nfsv4").function("nfs4_proc_read_setup") ?
fab312
 {
fab312
-	inode = @defined($data->header) ? $data->header->inode : $data->inode
fab312
+	inode = @choose_defined($hdr->inode,
fab312
+				@choose_defined($data->header->inode,
fab312
+						$data->inode))
fab312
 	client = NFS_CLIENT(inode)
fab312
 	server_ip = get_ip_from_client(client)
fab312
 	prot = get_prot_from_client(client)
fab312
 	version = 4
fab312
 
fab312
-	count = @_nfs_data_args_count($data)
fab312
-	offset = $data->args->offset
fab312
+	count = @_nfs_data_args_count(@choose_defined($hdr, $data))
fab312
+	offset = @choose_defined($hdr->args->offset, $data->args->offset)
fab312
 	//timestamp = $jiffies
fab312
 
fab312
 	name = "nfs.proc4.read_setup"
fab312
@@ -805,7 +814,7 @@ probe nfs.proc4.read_setup.return =
fab312
 {
fab312
 	version = 4
fab312
 	name = "nfs.proc4.read_setup.return"
fab312
-	retvalue = 0;
fab312
+	retvalue = 0
fab312
 }
fab312
 
fab312
 /**
fab312
@@ -880,10 +889,10 @@ probe nfs.proc3.read_done = kernel.function("nfs3_read_done") !,
fab312
 			    module("nfs").function("nfs3_read_done") ?,
fab312
 			    module("nfsv3").function("nfs3_read_done") ?
fab312
 {
fab312
-	if (@defined($data)) {		# kernels >= 2.6.10
fab312
-		server_ip = @_nfs_data_server_ip($data)
fab312
-		prot = @_nfs_data_prot($data)
fab312
-		count = @_nfs_data_res_count($data)
fab312
+	if (@defined($hdr) || @defined($data)) {	# kernels >= 2.6.10
fab312
+		server_ip = @_nfs_data_server_ip(@choose_defined($hdr, $data))
fab312
+		prot = @_nfs_data_prot(@choose_defined($hdr, $data))
fab312
+		count = @_nfs_data_res_count(@choose_defined($hdr, $data))
fab312
 	}
fab312
 	else {
fab312
 		server_ip = @_nfs_data_server_ip($task->tk_calldata)
fab312
@@ -914,11 +923,11 @@ probe nfs.proc4.read_done = kernel.function("nfs4_read_done") !,
fab312
 			    module("nfs").function("nfs4_read_done") ?,
fab312
 			    module("nfsv4").function("nfs4_read_done") ?
fab312
 {
fab312
-	if (@defined($data)) {		# kernels >= 2.6.10
fab312
-		server_ip = @_nfs_data_server_ip($data)
fab312
-		prot = @_nfs_data_prot($data)
fab312
-		count = @_nfs_data_res_count($data)
fab312
-		timestamp = @_nfs_data_timestamp($data)
fab312
+	if (@defined($hdr) || @defined($data)) {	# kernels >= 2.6.10
fab312
+		server_ip = @_nfs_data_server_ip(@choose_defined($hdr, $data))
fab312
+		prot = @_nfs_data_prot(@choose_defined($hdr, $data))
fab312
+		count = @_nfs_data_res_count(@choose_defined($hdr, $data))
fab312
+		timestamp = @_nfs_data_timestamp(@choose_defined($hdr, $data))
fab312
 	}
fab312
 	else {
fab312
 		server_ip = @_nfs_data_server_ip($task->tk_calldata)
fab312
@@ -1031,15 +1040,18 @@ probe nfs.proc3.write_setup =
fab312
 	module("nfs").function("nfs3_proc_write_setup") ?,
fab312
 	module("nfsv3").function("nfs3_proc_write_setup") ?
fab312
 {
fab312
-	inode = @defined($data->header) ? $data->header->inode : $data->inode
fab312
+	inode = @choose_defined($hdr->inode,
fab312
+				@choose_defined($data->header->inode,
fab312
+						$data->inode))
fab312
 	client = NFS_CLIENT(inode)
fab312
 	server_ip = get_ip_from_client(client)
fab312
 	prot = get_prot_from_client(client)
fab312
 	version = 3
fab312
 
fab312
-	count = @_nfs_data_args_count($data)
fab312
-	offset = $data->args->offset
fab312
-	how = @choose_defined($how, $data->args->stable)
fab312
+	count = @_nfs_data_args_count(@choose_defined($hdr, $data))
fab312
+	offset = @choose_defined($hdr->args->offset, $data->args->offset)
fab312
+	how = @choose_defined($hdr->args->stable,
fab312
+			      @choose_defined($how, $data->args->stable))
fab312
 	bitmask0 = 0
fab312
 	bitmask1 = 0
fab312
 
fab312
@@ -1064,15 +1076,18 @@ probe nfs.proc4.write_setup =
fab312
 	module("nfs").function("nfs4_proc_write_setup") ?,
fab312
 	module("nfsv4").function("nfs4_proc_write_setup") ?
fab312
 {
fab312
-	inode = @defined($data->header) ? $data->header->inode : $data->inode
fab312
+	inode = @choose_defined($hdr->inode,
fab312
+				@choose_defined($data->header->inode,
fab312
+						$data->inode))
fab312
 	client = NFS_CLIENT(inode)
fab312
 	server_ip = get_ip_from_client(client)
fab312
 	prot = get_prot_from_client(client)
fab312
 	version = 4
fab312
 
fab312
-	count = @_nfs_data_args_count($data)
fab312
-	offset = $data->args->offset
fab312
-	how = @choose_defined($how, $data->args->stable)
fab312
+	count = @_nfs_data_args_count(@choose_defined($hdr, $data))
fab312
+	offset = @choose_defined($hdr->args->offset, $data->args->offset)
fab312
+	how = @choose_defined($hdr->args->stable,
fab312
+			      @choose_defined($how, $data->args->stable))
fab312
 	bitmask0 = __nfsv4_bitmask(inode, 0)
fab312
 	bitmask1 = __nfsv4_bitmask(inode, 1)
fab312
 	//timestamp = $jiffies
fab312
@@ -1169,11 +1184,11 @@ probe nfs.proc3.write_done = kernel.function("nfs3_write_done") !,
fab312
 			     module("nfs").function("nfs3_write_done") ?,
fab312
 			     module("nfsv3").function("nfs3_write_done") ?
fab312
 {
fab312
-	if (@defined($data)) {		# kernels >= 2.6.10
fab312
-		server_ip = @_nfs_data_server_ip($data)
fab312
-		prot = @_nfs_data_prot($data)
fab312
-		count = @_nfs_data_res_count($data)
fab312
-		valid = @_nfs_data_valid($data)
fab312
+	if (@defined($hdr) || @defined($data)) {	# kernels >= 2.6.10
fab312
+		server_ip = @_nfs_data_server_ip(@choose_defined($hdr, $data))
fab312
+		prot = @_nfs_data_prot(@choose_defined($hdr, $data))
fab312
+		count = @_nfs_data_res_count(@choose_defined($hdr, $data))
fab312
+		valid = @_nfs_data_valid(@choose_defined($hdr, $data))
fab312
 	}
fab312
 	else {
fab312
 		server_ip = @_nfs_data_server_ip($task->tk_calldata)
fab312
@@ -1203,12 +1218,12 @@ probe nfs.proc4.write_done = kernel.function("nfs4_write_done") !,
fab312
 			     module("nfs").function("nfs4_write_done") ?,
fab312
 			     module("nfsv4").function("nfs4_write_done") ?
fab312
 {
fab312
-	if (@defined($data)) {		# kernels >= 2.6.10
fab312
-		server_ip = @_nfs_data_server_ip($data)
fab312
-		prot = @_nfs_data_prot($data)
fab312
-		count = @_nfs_data_res_count($data)
fab312
-		valid = @_nfs_data_valid($data)
fab312
-		timestamp = @_nfs_data_timestamp($data)
fab312
+	if (@defined($hdr) || @defined($data)) {	# kernels >= 2.6.10
fab312
+		server_ip = @_nfs_data_server_ip(@choose_defined($hdr, $data))
fab312
+		prot = @_nfs_data_prot(@choose_defined($hdr, $data))
fab312
+		count = @_nfs_data_res_count(@choose_defined($hdr, $data))
fab312
+		valid = @_nfs_data_valid(@choose_defined($hdr, $data))
fab312
+		timestamp = @_nfs_data_timestamp(@choose_defined($hdr, $data))
fab312
 	}
fab312
 	else {
fab312
 		server_ip = @_nfs_data_server_ip($task->tk_calldata)
fab312
@@ -1251,7 +1266,7 @@ probe nfs.proc4.write_done.return =
fab312
  *
fab312
  * The commit_setup function is used to setup a commit RPC task.
fab312
  * Is is not doing the actual commit operation.
fab312
- * It is does not exist in NFSv2.
fab312
+ * It does not exist in NFSv2.
fab312
  */
fab312
 
fab312
 probe nfs.proc.commit_setup = nfs.proc3.commit_setup,
fab312
@@ -1423,6 +1438,207 @@ probe nfs.proc4.commit_done.return =
fab312
 }
fab312
 
fab312
 /**
fab312
+ * probe nfs.proc.rename_setup - NFS client setting up a rename RPC task
fab312
+ *
fab312
+ * @server_ip: IP address of server
fab312
+ * @prot: transfer protocol
fab312
+ * @version: NFS version
fab312
+ * @fh: file handle of parent dir
fab312
+ *
fab312
+ * The rename_setup function is used to setup a rename RPC task.
fab312
+ * Is is not doing the actual rename operation.
fab312
+ */
fab312
+
fab312
+probe nfs.proc.rename_setup = nfs.proc2.rename_setup ?,
fab312
+			      nfs.proc3.rename_setup,
fab312
+			      nfs.proc4.rename_setup
fab312
+{}
fab312
+probe nfs.proc.rename_setup.return = nfs.proc2.rename_setup.return ?,
fab312
+				     nfs.proc3.rename_setup.return,
fab312
+				     nfs.proc4.rename_setup.return
fab312
+{}
fab312
+
fab312
+probe nfs.proc2.rename_setup =
fab312
+	kernel.function("nfs_proc_rename_setup") !,
fab312
+	module("nfs").function("nfs_proc_rename_setup") ?,
fab312
+	module("nfsv2").function("nfs_proc_rename_setup") ?
fab312
+{
fab312
+	client = NFS_CLIENT($dir)
fab312
+	server_ip = get_ip_from_client(client)
fab312
+	prot = get_prot_from_client(client)
fab312
+	version = 2
fab312
+	fh = NFS_FH($dir)
fab312
+
fab312
+	name = "nfs.proc2.rename_setup"
fab312
+
fab312
+	argstr = sprintf("%d", fh)
fab312
+}
fab312
+probe nfs.proc2.rename_setup.return =
fab312
+	kernel.function("nfs2_proc_rename_setup").return !,
fab312
+	module("nfs").function("nfs_proc_rename_setup").return ?,
fab312
+	module("nfsv2").function("nfs_proc_rename_setup").return ?
fab312
+{
fab312
+	version = 2
fab312
+	name = "nfs.proc2.rename_setup.return"
fab312
+	retvalue = 0
fab312
+}
fab312
+
fab312
+probe nfs.proc3.rename_setup =
fab312
+	kernel.function("nfs3_proc_rename_setup") !,
fab312
+	module("nfs").function("nfs3_proc_rename_setup") ?,
fab312
+	module("nfsv3").function("nfs3_proc_rename_setup") ?
fab312
+{
fab312
+	client = NFS_CLIENT($dir)
fab312
+	server_ip = get_ip_from_client(client)
fab312
+	prot = get_prot_from_client(client)
fab312
+	version = 3
fab312
+	fh = NFS_FH($dir)
fab312
+
fab312
+	name = "nfs.proc3.rename_setup"
fab312
+	argstr = sprintf("%d", fh)
fab312
+}
fab312
+probe nfs.proc3.rename_setup.return =
fab312
+	kernel.function("nfs3_proc_rename_setup").return !,
fab312
+	module("nfs").function("nfs3_proc_rename_setup").return ?,
fab312
+	module("nfsv3").function("nfs3_proc_rename_setup").return ?
fab312
+{
fab312
+	version = 3
fab312
+	name = "nfs.proc3.rename_setup.return"
fab312
+	retvalue = 0
fab312
+}
fab312
+
fab312
+probe nfs.proc4.rename_setup =
fab312
+	kernel.function("nfs4_proc_rename_setup") !,
fab312
+	module("nfs").function("nfs4_proc_rename_setup") ?,
fab312
+	module("nfsv4").function("nfs4_proc_rename_setup") ?
fab312
+{
fab312
+	client = NFS_CLIENT($dir)
fab312
+	server_ip = get_ip_from_client(client)
fab312
+	prot = get_prot_from_client(client)
fab312
+	version = 4
fab312
+	fh = NFS_FH($dir)
fab312
+
fab312
+	name = "nfs.proc4.rename_setup"
fab312
+	argstr = sprintf("%d", fh)
fab312
+}
fab312
+probe nfs.proc4.rename_setup.return =
fab312
+	kernel.function("nfs4_proc_rename_setup").return !,
fab312
+	module("nfs").function("nfs4_proc_rename_setup").return ?,
fab312
+	module("nfsv4").function("nfs4_proc_rename_setup").return ?
fab312
+{
fab312
+	version = 4
fab312
+	name = "nfs.proc4.rename_setup.return"
fab312
+	retvalue = 0
fab312
+}
fab312
+
fab312
+/**
fab312
+ * probe nfs.proc.rename_done - NFS client response to a rename RPC task
fab312
+ *
fab312
+ * @server_ip: IP address of server
fab312
+ * @prot: transfer protocol
fab312
+ * @version: NFS version
fab312
+ * @status: result of last operation
fab312
+ * @timestamp : V4 timestamp, which is used for lease renewal
fab312
+ * @old_fh: file handle of old parent dir
fab312
+ * @new_fh: file handle of new parent dir
fab312
+ *
fab312
+ * Fires when a reply to a rename RPC task is received or some rename
fab312
+ * error occurs (timeout or socket shutdown).
fab312
+ */
fab312
+probe nfs.proc.rename_done = nfs.proc2.rename_done ?,
fab312
+			     nfs.proc3.rename_done,
fab312
+			     nfs.proc4.rename_done
fab312
+{}
fab312
+
fab312
+probe nfs.proc.rename_done.return = nfs.proc2.rename_done.return ?,
fab312
+				    nfs.proc3.rename_done.return,
fab312
+				    nfs.proc4.rename_done.return
fab312
+{}
fab312
+
fab312
+probe nfs.proc2.rename_done = kernel.function("nfs_proc_rename_done") !,
fab312
+			     module("nfs").function("nfs_proc_rename_done") ?,
fab312
+			     module("nfsv2").function("nfs_proc_rename_done") ?
fab312
+{
fab312
+	client = NFS_CLIENT($old_dir)
fab312
+	server_ip = get_ip_from_client(client)
fab312
+	prot = get_prot_from_client(client)
fab312
+	version = 2
fab312
+	status = $task->tk_status
fab312
+	timestamp = 0
fab312
+
fab312
+	old_fh = NFS_FH($old_dir)
fab312
+	new_fh = NFS_FH($new_dir)
fab312
+
fab312
+	name = "nfs.proc2.rename_done"
fab312
+	argstr = sprintf("%d", status)
fab312
+}
fab312
+probe nfs.proc2.rename_done.return =
fab312
+	kernel.function("nfs_rename_done").return !,
fab312
+	module("nfs").function("nfs_rename_done").return !,
fab312
+	module("nfsv2").function("nfs_rename_done").return !
fab312
+{
fab312
+	version = 2
fab312
+	name = "nfs.proc2.rename_done.return"
fab312
+	retstr = sprintf("%d", $return)
fab312
+}
fab312
+
fab312
+probe nfs.proc3.rename_done =
fab312
+	kernel.function("nfs3_proc_rename_done") !,
fab312
+	module("nfs").function("nfs3_proc_rename_done") ?,
fab312
+	module("nfsv3").function("nfs3_proc_rename_done") ?
fab312
+{
fab312
+	client = NFS_CLIENT($old_dir)
fab312
+	server_ip = get_ip_from_client(client)
fab312
+	prot = get_prot_from_client(client)
fab312
+	version = 3
fab312
+	status = $task->tk_status
fab312
+	timestamp = 0
fab312
+
fab312
+	old_fh = NFS_FH($old_dir)
fab312
+	new_fh = NFS_FH($new_dir)
fab312
+
fab312
+	name = "nfs.proc3.rename_done"
fab312
+	argstr = sprintf("%d", status)
fab312
+}
fab312
+probe nfs.proc3.rename_done.return =
fab312
+	kernel.function("nfs3_proc_rename_done").return !,
fab312
+	module("nfs").function("nfs3_proc_rename_done").return ?,
fab312
+	module("nfsv3").function("nfs3_proc_rename_done").return ?
fab312
+{
fab312
+	version = 3
fab312
+	name = "nfs.proc3.rename_done.return"
fab312
+	retstr = sprintf("%d", $return)
fab312
+}
fab312
+
fab312
+probe nfs.proc4.rename_done =
fab312
+	kernel.function("nfs4_proc_rename_done") !,
fab312
+	module("nfs").function("nfs4_proc_rename_done") ?,
fab312
+	module("nfsv4").function("nfs4_proc_rename_done") ?
fab312
+{
fab312
+	client = NFS_CLIENT($old_dir)
fab312
+	server_ip = get_ip_from_client(client)
fab312
+	prot = get_prot_from_client(client)
fab312
+	version = 4
fab312
+	timestamp = @_nfs_data_timestamp(@choose_defined($hdr, $data))
fab312
+	status = $task->tk_status
fab312
+
fab312
+	old_fh = NFS_FH($old_dir)
fab312
+	new_fh = NFS_FH($new_dir)
fab312
+
fab312
+	name = "nfs.proc4.rename_done"
fab312
+	argstr = sprintf("%d", status)
fab312
+}
fab312
+probe nfs.proc4.rename_done.return =
fab312
+	kernel.function("nfs4_proc_rename_done").return !,
fab312
+	module("nfs").function("nfs4_proc_rename_done").return ?,
fab312
+	module("nfsv4").function("nfs4_proc_rename_done").return ?
fab312
+{
fab312
+	version = 4
fab312
+	name = "nfs.proc4.rename_done.return"
fab312
+	retstr = sprintf("%d", $return)
fab312
+}
fab312
+
fab312
+/**
fab312
  * probe nfs.proc.open - NFS client allocates file read/write context information
fab312
  *
fab312
  * @server_ip: IP address of server
fab312
@@ -1533,7 +1749,7 @@ probe nfs.proc4.handle_exception.return =
fab312
  * @server_ip: IP address of server
fab312
  * @prot: transfer protocol
fab312
  * @version: NFS version (the function is used for all NFS version)
fab312
- * @fh: file handler of parent dir
fab312
+ * @fh: file handle of parent dir
fab312
  * @filename: file name
fab312
  * @filelen: length of file name
fab312
  * @flag: indicates create mode (only for NFSv3 and NFSv4)
fab312
@@ -1655,7 +1871,7 @@ probe nfs.proc4.create.return =
fab312
  * @server_ip: IP address of server
fab312
  * @prot: transfer protocol
fab312
  * @version: NFS version (the function is used for all NFS version)
fab312
- * @fh: file handler of parent dir
fab312
+ * @fh: file handle of parent dir
fab312
  * @filename: file name
fab312
  * @filelen: length of file name
fab312
  */
fab312
@@ -1770,8 +1986,8 @@ probe nfs.proc4.remove.return =
fab312
  * @server_ip: IP address of server
fab312
  * @prot: transfer protocol
fab312
  * @version: NFS version (the function is used for all NFS version)
fab312
- * @old_fh: file handler of old parent dir
fab312
- * @new_fh: file handler of new parent dir
fab312
+ * @old_fh: file handle of old parent dir
fab312
+ * @new_fh: file handle of new parent dir
fab312
  * @old_name: old file name
fab312
  * @old_filelen: length of old file name
fab312
  * @new_name: new file name
fab312
@@ -1834,14 +2050,20 @@ probe nfs.proc2.rename.return =
fab312
 	retstr = (@defined($return) ? sprintf("%d", $return) : "N/A")
fab312
 }
fab312
 
fab312
-probe nfs.proc3.rename = kernel.function("nfs3_proc_rename") !,
fab312
+probe nfs.proc3.rename = _nfs.proc3.rename !, _nfs.proc3.missing_rename
fab312
+{
fab312
+	version = 3
fab312
+
fab312
+	name = "nfs.proc3.rename"
fab312
+	argstr = sprintf("%s,%s", old_name, new_name)
fab312
+}
fab312
+probe _nfs.proc3.rename = kernel.function("nfs3_proc_rename") !,
fab312
 			 module("nfs").function("nfs3_proc_rename") ?,
fab312
 			 module("nfsv3").function("nfs3_proc_rename") ?
fab312
 {
fab312
 	client = NFS_CLIENT($old_dir)
fab312
 	server_ip = get_ip_from_client(client)
fab312
 	prot = get_prot_from_client(client)
fab312
-	version = 3
fab312
 
fab312
 	old_fh = NFS_FH($old_dir)
fab312
 	old_filelen = $old_name->len
fab312
@@ -1849,29 +2071,46 @@ probe nfs.proc3.rename = kernel.function("nfs3_proc_rename") !,
fab312
 	new_fh = NFS_FH($new_dir)
fab312
 	new_filelen = $new_name->len
fab312
 	new_name = kernel_string_n($new_name->name, new_filelen)
fab312
+}
fab312
+probe _nfs.proc3.missing_rename = never
fab312
+{
fab312
+	client = 0
fab312
+	server_ip = 0
fab312
+	prot = 0
fab312
 
fab312
-	name = "nfs.proc3.rename"
fab312
-	argstr = sprintf("%s,%s", old_name, new_name)
fab312
+	old_fh = 0
fab312
+	old_filelen = 0
fab312
+	old_name = ""
fab312
+	new_fh = 0
fab312
+	new_filelen = 0
fab312
+	new_name = ""
fab312
 }
fab312
 
fab312
 probe nfs.proc3.rename.return =
fab312
 	kernel.function("nfs3_proc_rename").return !,
fab312
 	module("nfs").function("nfs3_proc_rename").return ?,
fab312
-	module("nfsv3").function("nfs3_proc_rename").return ?
fab312
+	module("nfsv3").function("nfs3_proc_rename").return !,
fab312
+	never
fab312
 {
fab312
 	name = "nfs.proc3.rename.return"
fab312
 	version = 3
fab312
-	retstr = sprintf("%d", $return)
fab312
+	retstr = (@defined($return) ? sprintf("%d", $return) : "N/A")
fab312
 }
fab312
 
fab312
-probe nfs.proc4.rename = kernel.function("nfs4_proc_rename") !,
fab312
-			 module("nfs").function("nfs4_proc_rename") ?,
fab312
-			 module("nfsv4").function("nfs4_proc_rename") ?
fab312
+probe nfs.proc4.rename = _nfs.proc4.rename !, _nfs.proc4.missing_rename
fab312
+{
fab312
+	version = 4
fab312
+
fab312
+	name = "nfs.proc4.rename"
fab312
+	argstr = sprintf("%s,%s", old_name, new_name)
fab312
+}
fab312
+probe _nfs.proc4.rename = kernel.function("nfs4_proc_rename") !,
fab312
+			  module("nfs").function("nfs4_proc_rename") ?,
fab312
+			  module("nfsv4").function("nfs4_proc_rename") ?
fab312
 {
fab312
 	client = NFS_CLIENT($old_dir)
fab312
 	server_ip = get_ip_from_client(client)
fab312
 	prot = get_prot_from_client(client)
fab312
-	version = 4
fab312
 
fab312
 	old_fh = NFS_FH($old_dir)
fab312
 	old_filelen = $old_name->len
fab312
@@ -1879,17 +2118,28 @@ probe nfs.proc4.rename = kernel.function("nfs4_proc_rename") !,
fab312
 	new_fh = NFS_FH($new_dir)
fab312
 	new_filelen = $new_name->len
fab312
 	new_name = kernel_string_n($new_name->name, new_filelen)
fab312
+}
fab312
+probe _nfs.proc4.missing_rename = never
fab312
+{
fab312
+	client = 0
fab312
+	server_ip = 0
fab312
+	prot = 0
fab312
 
fab312
-	name = "nfs.proc4.rename"
fab312
-	argstr = sprintf("%s,%s", old_name, new_name)
fab312
+	old_fh = 0
fab312
+	old_filelen = 0
fab312
+	old_name = ""
fab312
+	new_fh = 0
fab312
+	new_filelen = 0
fab312
+	new_name = ""
fab312
 }
fab312
 
fab312
 probe nfs.proc4.rename.return =
fab312
 	kernel.function("nfs4_proc_rename").return !,
fab312
 	module("nfs").function("nfs4_proc_rename").return ?,
fab312
-	module("nfsv4").function("nfs4_proc_rename").return ?
fab312
+	module("nfsv4").function("nfs4_proc_rename").return !,
fab312
+	never
fab312
 {
fab312
 	name = "nfs.proc4.rename.return"
fab312
 	version = 4
fab312
-	retstr = sprintf("%d", $return)
fab312
+	retstr = (@defined($return) ? sprintf("%d", $return) : "N/A")
fab312
 }
fab312
diff --git a/testsuite/buildok/nfs_proc-detailed.stp b/testsuite/buildok/nfs_proc-detailed.stp
fab312
index 273b20c..740d6bd 100755
fab312
--- a/testsuite/buildok/nfs_proc-detailed.stp
fab312
+++ b/testsuite/buildok/nfs_proc-detailed.stp
fab312
@@ -1,5 +1,6 @@
fab312
 #! stap -p4
fab312
 
fab312
+
fab312
 probe nfs.proc.lookup {
fab312
 	printf("%s(%s)\n", name, argstr)
fab312
 	printf("%d %d %d %d\n", server_ip, prot, version, name_len)
fab312
@@ -96,6 +97,26 @@ probe nfs.proc.commit_done.return {
fab312
 	printf("%d: %s(%s)\n", version, name, retstr)
fab312
 }
fab312
 
fab312
+probe nfs.proc.rename_setup {
fab312
+	printf("%s(%s)\n", name, argstr)
fab312
+	printf("%d %d %d %d\n", client, server_ip, prot,
fab312
+		version)
fab312
+	printf("%d\n", fh)
fab312
+}
fab312
+probe nfs.proc.rename_setup.return {
fab312
+	printf("%d: %s(%d)\n", version, name, retvalue)
fab312
+}
fab312
+
fab312
+probe nfs.proc.rename_done {
fab312
+	printf("%s(%s)\n", name, argstr)
fab312
+	printf("%d %d %d\n", server_ip, prot, version)
fab312
+	printf("%d %d\n", timestamp, status)
fab312
+	printf("%d %d\n", old_fh, new_fh)
fab312
+}
fab312
+probe nfs.proc.rename_done.return {
fab312
+	printf("%d: %s(%s)\n", version, name, retstr)
fab312
+}
fab312
+
fab312
 probe nfs.proc.open {
fab312
 	printf("%s(%s)\n", name, argstr)
fab312
 	printf("%d %d %d\n", server_ip, prot, version)
fab312
@@ -140,8 +161,9 @@ probe nfs.proc.remove.return {
fab312
 
fab312
 probe nfs.proc.rename {
fab312
 	printf("%s(%s)\n", name, argstr)
fab312
-	printf("%d %d %d %d %d %d %d\n", server_ip, prot, version, old_fh,
fab312
-		old_filelen, new_fh, new_filelen)
fab312
+	printf("%d %d %d\n", server_ip, prot, version)
fab312
+	printf("%d %d %s\n", old_fh, old_filelen, old_name)
fab312
+	printf("%d %d %s\n", new_fh, new_filelen, new_name)
fab312
 }
fab312
 probe nfs.proc.rename.return {
fab312
 	printf("%d: %s(%s)\n", version, name, retstr)