From e98b6dbd8c259d0414f5519823d70023fd22d854 Mon Sep 17 00:00:00 2001
From: Joyce McIntosh <joyce.mcintosh@nexenta.com>
Date: Wed, 4 Apr 2018 14:00:12 -0600
Subject: [PATCH 10/34] NEX-16712 NFS dtrace providers do not support per-share
 filtering

Reviewed by: Evan Layton <evan.layton@nexenta.com>
Reviewed by: Gordon Ross <gordon.ross@nexenta.com>
Reviewed by: Yuri Pankon <yuri.pankov@nexenta.com>
---
 usr/src/cmd/fs.d/nfs/Makefile                 |   4 +-
 usr/src/cmd/fs.d/nfs/dtrace/Makefile          |  39 +
 usr/src/cmd/fs.d/nfs/dtrace/nfs-time.d        |  72 ++
 usr/src/cmd/fs.d/nfs/dtrace/nfs-trace.d       | 236 +++++
 usr/src/lib/libdtrace/common/nfs.d            |  10 +
 .../pkg/manifests/service-file-system-nfs.mf  |   5 +-
 usr/src/uts/common/dtrace/sdt_subr.c          | 977 ++++++++----------
 usr/src/uts/common/fs/nfs/nfs3_srv.c          | 305 +++---
 usr/src/uts/common/fs/nfs/nfs_server.c        |   8 +-
 usr/src/uts/common/sys/sdt.h                  |   8 +-
 10 files changed, 982 insertions(+), 682 deletions(-)
 create mode 100644 usr/src/cmd/fs.d/nfs/dtrace/Makefile
 create mode 100755 usr/src/cmd/fs.d/nfs/dtrace/nfs-time.d
 create mode 100755 usr/src/cmd/fs.d/nfs/dtrace/nfs-trace.d

diff --git a/usr/src/cmd/fs.d/nfs/Makefile b/usr/src/cmd/fs.d/nfs/Makefile
index 7f9ae26ae2..261e5c6358 100644
--- a/usr/src/cmd/fs.d/nfs/Makefile
+++ b/usr/src/cmd/fs.d/nfs/Makefile
@@ -23,6 +23,8 @@
 # Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
 # Use is subject to license terms.
 #
+# Copyright 2018 Nexenta Systems, Inc.  All rights reserved.
+#
 # cmd/fs.d/nfs/Makefile
 #
 #  cmd/fs.d/nfs is the directory of all nfs specific commands
@@ -33,7 +35,7 @@ include $(SRC)/Makefile.master
 
 SUBDIR1=	exportfs nfsd rquotad \
 		statd nfsstat mountd dfshares \
-		nfsfind nfs4cbd share tests
+		nfsfind nfs4cbd share tests dtrace
 
 # These do "make catalog"
 SUBDIR2=	clear_locks lockd umount showmount \
diff --git a/usr/src/cmd/fs.d/nfs/dtrace/Makefile b/usr/src/cmd/fs.d/nfs/dtrace/Makefile
new file mode 100644
index 0000000000..91c7b274f0
--- /dev/null
+++ b/usr/src/cmd/fs.d/nfs/dtrace/Makefile
@@ -0,0 +1,39 @@
+#
+# This file and its contents are supplied under the terms of the
+# Common Development and Distribution License ("CDDL"), version 1.0.
+# You may only use this file in accordance with the terms of version
+# 1.0 of the CDDL.
+#
+# A full copy of the text of the CDDL should have accompanied this
+# source.  A copy of the CDDL is also available via the Internet at
+# http://www.illumos.org/license/CDDL.
+#
+
+#
+# Copyright 2018 Nexenta Systems, Inc.  All rights reserved.
+#
+
+SRCS=nfs-trace.d nfs-time.d
+
+include $(SRC)/cmd/Makefile.cmd
+
+ROOTNFSDTRACEDIR = $(ROOTLIB)/nfs/dtrace
+ROOTNFSDTRACEFILE = $(SRCS:%=$(ROOTNFSDTRACEDIR)/%)
+
+$(ROOTNFSDTRACEFILE):= FILEMODE = 0555
+
+$(ROOTNFSDTRACEDIR):
+	$(INS.dir)
+
+$(ROOTNFSDTRACEDIR)/%: %
+	$(INS.file)
+
+all:
+
+clean:
+
+lint:
+
+include $(SRC)/cmd/Makefile.targ
+
+install: all $(ROOTNFSDTRACEDIR) .WAIT $(ROOTNFSDTRACEFILE)
diff --git a/usr/src/cmd/fs.d/nfs/dtrace/nfs-time.d b/usr/src/cmd/fs.d/nfs/dtrace/nfs-time.d
new file mode 100755
index 0000000000..cb030d10e8
--- /dev/null
+++ b/usr/src/cmd/fs.d/nfs/dtrace/nfs-time.d
@@ -0,0 +1,72 @@
+#!/usr/sbin/dtrace -s
+
+/*
+ * This file and its contents are supplied under the terms of the
+ * Common Development and Distribution License ("CDDL"), version 1.0.
+ * You may only use this file in accordance with the terms of version
+ * 1.0 of the CDDL.
+ *
+ * A full copy of the text of the CDDL should have accompanied this
+ * source.  A copy of the CDDL is also available via the Internet at
+ * http://www.illumos.org/license/CDDL.
+ */
+
+/*
+ * Copyright 2018 Nexenta Systems, Inc.  All rights reserved.
+ */
+
+/*
+ * Quanitize the time spent in each NFSv3 andf NFSv4 operation,
+ * optionally for a specified client and share.
+ *
+ * usage:   nfs_time.d
+ * usage:   nfs_time.d <client ip>   <share path>
+ * example: nfs_time.d 192.168.123.1 /mypool/fs1
+ *
+ * It is valid to specify <client ip> or <share path> as "all" to
+ * quantize data for all clients and/or all shares.
+ * example: nfs_time.d 192.168.123.1 all
+ * example: nfs_time.d all /mypool/fs1
+ * example: nfs_time.d all all
+ */
+
+#pragma D option flowindent
+#pragma D option defaultargs
+
+dtrace:::BEGIN
+{
+	client = ($$1 == NULL) ? "all" : $$1;
+	share = ($$2 == NULL) ? "all" : $$2;
+	printf("%Y - client=%s share=%s\n", walltimestamp, client, share);
+}
+
+nfsv3:::op-*-start,
+nfsv4:::op-*-start
+/ ((client == "all") || (args[0]->ci_remote == client)) &&
+   ((share == "all") || (args[1]->noi_shrpath == share)) /
+{
+	self->ts[probefunc] = timestamp;
+}
+
+nfsv3:::op-*-done,
+nfsv4:::op-*-done
+/ ((client == "all") || (args[0]->ci_remote == client)) &&
+   ((share == "all") || (args[1]->noi_shrpath == share)) /
+{
+	elapsed = (timestamp - self->ts[probefunc]);
+	@q[probefunc]=quantize(elapsed);
+}
+
+tick-5s
+{
+	printa(@q);
+	/*
+	 * uncomment "clear" to quantize per 5s interval
+	 * rather than cumulative for duration of script.
+	 * clear(@q);
+	 */
+}
+
+dtrace:::END
+{
+}
diff --git a/usr/src/cmd/fs.d/nfs/dtrace/nfs-trace.d b/usr/src/cmd/fs.d/nfs/dtrace/nfs-trace.d
new file mode 100755
index 0000000000..e26737a9ec
--- /dev/null
+++ b/usr/src/cmd/fs.d/nfs/dtrace/nfs-trace.d
@@ -0,0 +1,236 @@
+#!/usr/sbin/dtrace -s
+
+/*
+ * This file and its contents are supplied under the terms of the
+ * Common Development and Distribution License ("CDDL"), version 1.0.
+ * You may only use this file in accordance with the terms of version
+ * 1.0 of the CDDL.
+ *
+ * A full copy of the text of the CDDL should have accompanied this
+ * source.  A copy of the CDDL is also available via the Internet at
+ * http://www.illumos.org/license/CDDL.
+ */
+
+/*
+ * Copyright 2018 Nexenta Systems, Inc.  All rights reserved.
+ */
+
+/*
+ * Print input and output values for each NFSv3 andf NFSv4 operation,
+ * optionally for a specified client and share.
+ *
+ * usage:   nfs_test.d
+ * usage:   nfs_test.d <client ip>   <share path>
+ * example: nfs_test.d 192.168.123.1 /mypool/fs1
+ *
+ * It is valid to specify <client ip> or <share path> as "all" to
+ * print data for all clients and/or all shares.
+ * example: nfs_test.d 192.168.123.1 all
+ * example: nfs_test.d all /mypool/fs1
+ * example: nfs_test.d all all
+ */
+
+/*
+ * Unfortunately, trying to write this script using wildcards, for example:
+ *	nfsv3:::op-*-start {}
+ *	nfsv3:::op-*-done {}
+ * prints the operation-specific args[2] structure as the incorrect type.
+ * Until this is resolved it is necessary to explicitly list each operation.
+ *
+ * See nfs-time.d for an example of using the wildcard format when there are
+ * no operation-specific args (args[2]) being traced.
+ */
+
+#pragma D option flowindent
+#pragma D option defaultargs
+
+dtrace:::BEGIN
+{
+	client = ($$1 == NULL) ? "all" : $$1;
+	share = ($$2 == NULL) ? "all" : $$2;
+	printf("%Y - client=%s share=%s\n", walltimestamp, client, share);
+}
+
+nfsv3:::op-getattr-start,
+nfsv3:::op-setattr-start,
+nfsv3:::op-lookup-start,
+nfsv3:::op-access-start,
+nfsv3:::op-commit-start,
+nfsv3:::op-create-start,
+nfsv3:::op-fsinfo-start,
+nfsv3:::op-fsstat-start,
+nfsv3:::op-link-start,
+nfsv3:::op-mkdir-start,
+nfsv3:::op-mknod-start,
+nfsv3:::op-pathconf-start,
+nfsv3:::op-read-start,
+nfsv3:::op-readdir-start,
+nfsv3:::op-readdirplus-start,
+nfsv3:::op-readlink-start,
+nfsv3:::op-remove-start,
+nfsv3:::op-rename-start,
+nfsv3:::op-rmdir-start,
+nfsv3:::op-symlink-start,
+nfsv3:::op-write-start
+/ ((client == "all") || (args[0]->ci_remote == client)) &&
+   ((share == "all") || (args[1]->noi_shrpath == share)) /
+{
+	printf("\n");
+	print(*args[0]);
+	printf("\n");
+	print(*args[1]);
+	printf("\n");
+	print(*args[2]);
+	printf("\n");
+}
+
+nfsv3:::op-getattr-done,
+nfsv3:::op-setattr-done,
+nfsv3:::op-lookup-done,
+nfsv3:::op-access-done,
+nfsv3:::op-commit-done,
+nfsv3:::op-create-done,
+nfsv3:::op-fsinfo-done,
+nfsv3:::op-fsstat-done,
+nfsv3:::op-link-done,
+nfsv3:::op-mkdir-done,
+nfsv3:::op-mknod-done,
+nfsv3:::op-pathconf-done,
+nfsv3:::op-read-done,
+nfsv3:::op-readdir-done,
+nfsv3:::op-readdirplus-done,
+nfsv3:::op-readlink-done,
+nfsv3:::op-remove-done,
+nfsv3:::op-rename-done,
+nfsv3:::op-rmdir-done,
+nfsv3:::op-symlink-done,
+nfsv3:::op-write-done
+/ ((client == "all") || (args[0]->ci_remote == client)) &&
+   ((share == "all") || (args[1]->noi_shrpath == share)) /
+{
+	/*
+	printf("\n");
+	print(*args[0]);
+	printf("\n");
+	print(*args[1]);
+	*/
+	printf("\n");
+	print(*args[2]);
+	printf("\n");
+}
+
+nfsv4:::op-access-start,
+nfsv4:::op-close-start,
+nfsv4:::op-commit-start,
+nfsv4:::op-create-start,
+nfsv4:::op-delegpurge-start,
+nfsv4:::op-delegreturn-start,
+nfsv4:::op-getattr-start,
+nfsv4:::op-link-start,
+nfsv4:::op-lock-start,
+nfsv4:::op-lockt-start,
+nfsv4:::op-locku-start,
+nfsv4:::op-lookup-start,
+nfsv4:::op-nverify-start,
+nfsv4:::op-open-start,
+nfsv4:::op-open-confirm-start,
+nfsv4:::op-open-downgrade-start,
+nfsv4:::op-openattr-start,
+nfsv4:::op-putfh-start,
+nfsv4:::op-read-start,
+nfsv4:::op-readdir-start,
+nfsv4:::op-release-lockowner-start,
+nfsv4:::op-remove-start,
+nfsv4:::op-rename-start,
+nfsv4:::op-renew-start,
+nfsv4:::op-secinfo-start,
+nfsv4:::op-setattr-start,
+nfsv4:::op-setclientid-start,
+nfsv4:::op-setclientid-confirm-start,
+nfsv4:::op-verify-start,
+nfsv4:::op-write-start
+/ ((client == "all") || (args[0]->ci_remote == client)) &&
+   ((share == "all") || (args[1]->noi_shrpath == share)) /
+{
+	printf("\n");
+	print(*args[0]);
+	printf("\n");
+	print(*args[1]);
+	printf("\n");
+	print(*args[2]);
+	printf("\n");
+}
+
+/* These operations do not have args[2] */
+nfsv4:::op-getfh-start,
+nfsv4:::op-lookupp-start,
+nfsv4:::op-putpubfh-start,
+nfsv4:::op-putrootfh-start,
+nfsv4:::op-readlink-start,
+nfsv4:::op-restorefh-start,
+nfsv4:::op-savefh-start
+/ ((client == "all") || (args[0]->ci_remote == client)) &&
+   ((share == "all") || (args[1]->noi_shrpath == share)) /
+{
+	printf("\n");
+	print(*args[0]);
+	printf("\n");
+	print(*args[1]);
+	printf("\n");
+}
+
+
+nfsv4:::op-access-done,
+nfsv4:::op-close-done,
+nfsv4:::op-commit-done,
+nfsv4:::op-create-done,
+nfsv4:::op-delegpurge-done,
+nfsv4:::op-delegreturn-done,
+nfsv4:::op-getattr-done,
+nfsv4:::op-getfh-done,
+nfsv4:::op-link-done,
+nfsv4:::op-lock-done,
+nfsv4:::op-lockt-done,
+nfsv4:::op-locku-done,
+nfsv4:::op-lookup-done,
+nfsv4:::op-lookupp-done,
+nfsv4:::op-nverify-done,
+nfsv4:::op-open-done,
+nfsv4:::op-open-confirm-done,
+nfsv4:::op-open-downgrade-done,
+nfsv4:::op-openattr-done,
+nfsv4:::op-putfh-done,
+nfsv4:::op-putpubfh-done,
+nfsv4:::op-putrootfh-done,
+nfsv4:::op-read-done,
+nfsv4:::op-readdir-done,
+nfsv4:::op-readlink-done,
+nfsv4:::op-release-lockowner-done,
+nfsv4:::op-remove-done,
+nfsv4:::op-rename-done,
+nfsv4:::op-renew-done,
+nfsv4:::op-restorefh-done,
+nfsv4:::op-savefh-done,
+nfsv4:::op-secinfo-done,
+nfsv4:::op-setattr-done,
+nfsv4:::op-setclientid-done,
+nfsv4:::op-setclientid-confirm-done,
+nfsv4:::op-verify-done,
+nfsv4:::op-write-done
+/ ((client == "all") || (args[0]->ci_remote == client)) &&
+   ((share == "all") || (args[1]->noi_shrpath == share)) /
+{
+	/*
+	printf("\n");
+	print(*args[0]);
+	printf("\n");
+	print(*args[1]);
+	*/
+	printf("\n");
+	print(*args[2]);
+	printf("\n");
+}
+
+dtrace:::END
+{
+}
diff --git a/usr/src/lib/libdtrace/common/nfs.d b/usr/src/lib/libdtrace/common/nfs.d
index d14c706aca..81f37de83b 100644
--- a/usr/src/lib/libdtrace/common/nfs.d
+++ b/usr/src/lib/libdtrace/common/nfs.d
@@ -23,6 +23,9 @@
  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
+/*
+ * Copyright 2018 Nexenta Systems, Inc.  All rights reserved.
+ */
 
 #pragma	D depends_on library ip.d
 #pragma	D depends_on library net.d
@@ -35,6 +38,7 @@ typedef struct nfsv4opinfo {
 	uint64_t noi_xid;	/* unique transation ID */
 	cred_t *noi_cred;	/* credentials for operation */
 	string noi_curpath;	/* current file handle path (if any) */
+	string noi_shrpath;     /* current share path */
 } nfsv4opinfo_t;
 
 typedef struct nfsv4cbinfo {
@@ -101,12 +105,15 @@ translator nfsv4opinfo_t < struct compound_state *P > {
 	noi_xid = P->req->rq_xprt->xp_xid;
 	noi_cred = P->basecr;
 	noi_curpath = (P->vp == NULL) ? "<unknown>" : P->vp->v_path;
+	noi_shrpath = (P->exi == NULL || P->exi->exi_export.ex_path == NULL) ?
+	    "<unknown>" : P->exi->exi_export.ex_path;
 };
 
 typedef struct nfsv3opinfo {
 	uint64_t noi_xid;	/* unique transation ID */
 	cred_t *noi_cred;	/* credentials for operation */
 	string noi_curpath;	/* current file handle path (if any) */
+	string noi_shrpath;     /* current share path */
 } nfsv3opinfo_t;
 
 typedef struct nfsv3oparg nfsv3oparg_t;
@@ -117,4 +124,7 @@ translator nfsv3opinfo_t < nfsv3oparg_t *P > {
 	noi_cred = (cred_t *)arg1;
 	noi_curpath = (arg2 == 0 || ((vnode_t *)arg2)->v_path == NULL) ?
 	    "<unknown>" : ((vnode_t *)arg2)->v_path;
+	noi_shrpath =
+	    (arg3 == 0 || ((exportinfo_t *)arg3)->exi_export.ex_path == NULL) ?
+	    "<unknown>" : ((exportinfo_t *)arg3)->exi_export.ex_path;
 };
diff --git a/usr/src/pkg/manifests/service-file-system-nfs.mf b/usr/src/pkg/manifests/service-file-system-nfs.mf
index 7d3a408bac..c5937467c8 100644
--- a/usr/src/pkg/manifests/service-file-system-nfs.mf
+++ b/usr/src/pkg/manifests/service-file-system-nfs.mf
@@ -21,7 +21,7 @@
 
 #
 # Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
-# Copyright 2015 Nexenta Systems, Inc.  All rights reserved.
+# Copyright 2018 Nexenta Systems, Inc.  All rights reserved.
 #
 
 set name=pkg.fmri value=pkg:/service/file-system/nfs@$(PKGVERS)
@@ -48,6 +48,7 @@ dir path=usr/lib/fs group=sys
 dir path=usr/lib/fs/nfs group=sys
 dir path=usr/lib/fs/nfs/$(ARCH64) group=sys
 dir path=usr/lib/nfs group=sys
+dir path=usr/lib/nfs/dtrace group=bin
 dir path=usr/lib/reparse group=bin
 dir path=usr/lib/reparse/$(ARCH64) group=sys
 dir path=usr/sbin
@@ -65,6 +66,8 @@ file path=lib/svc/manifest/network/nfs/server.xml group=sys mode=0444
 file path=lib/svc/method/nfs-server mode=0555
 file path=usr/lib/fs/nfs/$(ARCH64)/libshare_nfs.so.1
 file path=usr/lib/fs/nfs/libshare_nfs.so.1
+file path=usr/lib/nfs/dtrace/nfs-time.d mode=0555
+file path=usr/lib/nfs/dtrace/nfs-trace.d mode=0555
 file path=usr/lib/nfs/mountd mode=0555
 file path=usr/lib/nfs/nfsd mode=0555
 file path=usr/lib/nfs/nfslogd mode=0555
diff --git a/usr/src/uts/common/dtrace/sdt_subr.c b/usr/src/uts/common/dtrace/sdt_subr.c
index 76f403673b..61e66681b7 100644
--- a/usr/src/uts/common/dtrace/sdt_subr.c
+++ b/usr/src/uts/common/dtrace/sdt_subr.c
@@ -21,7 +21,7 @@
 /*
  * Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved.
  * Copyright (c) 2012, Joyent, Inc. All rights reserved.
- * Copyright 2017 Nexenta Systems, Inc.  All rights reserved.
+ * Copyright 2018 Nexenta Systems, Inc.  All rights reserved.
  */
 
 #include <sys/sdt_impl.h>
@@ -98,6 +98,14 @@ static dtrace_pattr_t iscsi_attr = {
 { DTRACE_STABILITY_EVOLVING, DTRACE_STABILITY_EVOLVING, DTRACE_CLASS_ISA },
 };
 
+static dtrace_pattr_t nfs_attr = {
+{ DTRACE_STABILITY_EVOLVING, DTRACE_STABILITY_EVOLVING, DTRACE_CLASS_ISA },
+{ DTRACE_STABILITY_PRIVATE, DTRACE_STABILITY_PRIVATE, DTRACE_CLASS_UNKNOWN },
+{ DTRACE_STABILITY_PRIVATE, DTRACE_STABILITY_PRIVATE, DTRACE_CLASS_UNKNOWN },
+{ DTRACE_STABILITY_PRIVATE, DTRACE_STABILITY_PRIVATE, DTRACE_CLASS_ISA },
+{ DTRACE_STABILITY_EVOLVING, DTRACE_STABILITY_EVOLVING, DTRACE_CLASS_ISA },
+};
+
 static dtrace_pattr_t smb_attr = {
 { DTRACE_STABILITY_EVOLVING, DTRACE_STABILITY_EVOLVING, DTRACE_CLASS_ISA },
 { DTRACE_STABILITY_PRIVATE, DTRACE_STABILITY_PRIVATE, DTRACE_CLASS_UNKNOWN },
@@ -120,8 +128,8 @@ sdt_provider_t sdt_providers[] = {
 	{ "mib", "__mib_", &stab_attr },
 	{ "fsinfo", "__fsinfo_", &fsinfo_attr },
 	{ "iscsi", "__iscsi_", &iscsi_attr },
-	{ "nfsv3", "__nfsv3_", &stab_attr },
-	{ "nfsv4", "__nfsv4_", &stab_attr },
+	{ "nfsv3", "__nfsv3_", &nfs_attr },
+	{ "nfsv4", "__nfsv4_", &nfs_attr },
 	{ "smb", "__smb_", &smb_attr },
 	{ "smb2", "__smb2_", &smb_attr },
 	{ "xpv", "__xpv_", &xpv_attr },
@@ -267,627 +275,490 @@ sdt_argdesc_t sdt_args[] = {
 	{ "iscsi", "xfer-done", 7, 6, "uint32_t"},
 	{ "iscsi", "xfer-done", 8, 7, "int"},
 
-	{ "nfsv3", "op-getattr-start", 0, 0, "struct svc_req *",
-	    "conninfo_t *" },
-	{ "nfsv3", "op-getattr-start", 1, 1, "nfsv3oparg_t *",
-	    "nfsv3opinfo_t *" },
-	{ "nfsv3", "op-getattr-start", 2, 3, "GETATTR3args *" },
-	{ "nfsv3", "op-getattr-done", 0, 0, "struct svc_req *",
-	    "conninfo_t *" },
-	{ "nfsv3", "op-getattr-done", 1, 1, "nfsv3oparg_t *",
-	    "nfsv3opinfo_t *" },
-	{ "nfsv3", "op-getattr-done", 2, 3, "GETATTR3res *" },
-	{ "nfsv3", "op-setattr-start", 0, 0, "struct svc_req *",
-	    "conninfo_t *" },
-	{ "nfsv3", "op-setattr-start", 1, 1, "nfsv3oparg_t *",
-	    "nfsv3opinfo_t *" },
-	{ "nfsv3", "op-setattr-start", 2, 3, "SETATTR3args *" },
-	{ "nfsv3", "op-setattr-done", 0, 0, "struct svc_req *",
-	    "conninfo_t *" },
-	{ "nfsv3", "op-setattr-done", 1, 1, "nfsv3oparg_t *",
-	    "nfsv3opinfo_t *" },
-	{ "nfsv3", "op-setattr-done", 2, 3, "SETATTR3res *" },
-	{ "nfsv3", "op-lookup-start", 0, 0, "struct svc_req *",
-	    "conninfo_t *" },
-	{ "nfsv3", "op-lookup-start", 1, 1, "nfsv3oparg_t *",
-	    "nfsv3opinfo_t *" },
-	{ "nfsv3", "op-lookup-start", 2, 3, "LOOKUP3args *" },
-	{ "nfsv3", "op-lookup-done", 0, 0, "struct svc_req *",
-	    "conninfo_t *" },
-	{ "nfsv3", "op-lookup-done", 1, 1, "nfsv3oparg_t *",
-	    "nfsv3opinfo_t *" },
-	{ "nfsv3", "op-lookup-done", 2, 3, "LOOKUP3res *" },
-	{ "nfsv3", "op-access-start", 0, 0, "struct svc_req *",
-	    "conninfo_t *" },
-	{ "nfsv3", "op-access-start", 1, 1, "nfsv3oparg_t *",
-	    "nfsv3opinfo_t *" },
-	{ "nfsv3", "op-access-start", 2, 3, "ACCESS3args *" },
-	{ "nfsv3", "op-access-done", 0, 0, "struct svc_req *",
-	    "conninfo_t *" },
-	{ "nfsv3", "op-access-done", 1, 1, "nfsv3oparg_t *",
-	    "nfsv3opinfo_t *" },
-	{ "nfsv3", "op-access-done", 2, 3, "ACCESS3res *" },
-	{ "nfsv3", "op-commit-start", 0, 0, "struct svc_req *",
-	    "conninfo_t *" },
-	{ "nfsv3", "op-commit-start", 1, 1, "nfsv3oparg_t *",
-	    "nfsv3opinfo_t *" },
-	{ "nfsv3", "op-commit-start", 2, 3, "COMMIT3args *" },
-	{ "nfsv3", "op-commit-done", 0, 0, "struct svc_req *",
-	    "conninfo_t *" },
-	{ "nfsv3", "op-commit-done", 1, 1, "nfsv3oparg_t *",
-	    "nfsv3opinfo_t *" },
-	{ "nfsv3", "op-commit-done", 2, 3, "COMMIT3res *" },
-	{ "nfsv3", "op-create-start", 0, 0, "struct svc_req *",
-	    "conninfo_t *" },
-	{ "nfsv3", "op-create-start", 1, 1, "nfsv3oparg_t *",
-	    "nfsv3opinfo_t *" },
-	{ "nfsv3", "op-create-start", 2, 3, "CREATE3args *" },
-	{ "nfsv3", "op-create-done", 0, 0, "struct svc_req *",
-	    "conninfo_t *" },
-	{ "nfsv3", "op-create-done", 1, 1, "nfsv3oparg_t *",
-	    "nfsv3opinfo_t *" },
-	{ "nfsv3", "op-create-done", 2, 3, "CREATE3res *" },
-	{ "nfsv3", "op-fsinfo-start", 0, 0, "struct svc_req *",
-	    "conninfo_t *" },
-	{ "nfsv3", "op-fsinfo-start", 1, 1, "nfsv3oparg_t *",
-	    "nfsv3opinfo_t *" },
-	{ "nfsv3", "op-fsinfo-start", 2, 3, "FSINFO3args *" },
-	{ "nfsv3", "op-fsinfo-done", 0, 0, "struct svc_req *",
-	    "conninfo_t *" },
-	{ "nfsv3", "op-fsinfo-done", 1, 1, "nfsv3oparg_t *",
-	    "nfsv3opinfo_t *" },
-	{ "nfsv3", "op-fsinfo-done", 2, 3, "FSINFO3res *" },
-	{ "nfsv3", "op-fsstat-start", 0, 0, "struct svc_req *",
-	    "conninfo_t *" },
-	{ "nfsv3", "op-fsstat-start", 1, 1, "nfsv3oparg_t *",
-	    "nfsv3opinfo_t *" },
-	{ "nfsv3", "op-fsstat-start", 2, 3, "FSSTAT3args *" },
-	{ "nfsv3", "op-fsstat-done", 0, 0, "struct svc_req *",
-	    "conninfo_t *" },
-	{ "nfsv3", "op-fsstat-done", 1, 1, "nfsv3oparg_t *",
-	    "nfsv3opinfo_t *" },
-	{ "nfsv3", "op-fsstat-done", 2, 3, "FSSTAT3res *" },
-	{ "nfsv3", "op-link-start", 0, 0, "struct svc_req *",
-	    "conninfo_t *" },
-	{ "nfsv3", "op-link-start", 1, 1, "nfsv3oparg_t *",
-	    "nfsv3opinfo_t *" },
-	{ "nfsv3", "op-link-start", 2, 3, "LINK3args *" },
-	{ "nfsv3", "op-link-done", 0, 0, "struct svc_req *",
-	    "conninfo_t *" },
-	{ "nfsv3", "op-link-done", 1, 1, "nfsv3oparg_t *",
-	    "nfsv3opinfo_t *" },
-	{ "nfsv3", "op-link-done", 2, 3, "LINK3res *" },
-	{ "nfsv3", "op-mkdir-start", 0, 0, "struct svc_req *",
-	    "conninfo_t *" },
-	{ "nfsv3", "op-mkdir-start", 1, 1, "nfsv3oparg_t *",
-	    "nfsv3opinfo_t *" },
-	{ "nfsv3", "op-mkdir-start", 2, 3, "MKDIR3args *" },
-	{ "nfsv3", "op-mkdir-done", 0, 0, "struct svc_req *",
-	    "conninfo_t *" },
-	{ "nfsv3", "op-mkdir-done", 1, 1, "nfsv3oparg_t *",
-	    "nfsv3opinfo_t *" },
-	{ "nfsv3", "op-mkdir-done", 2, 3, "MKDIR3res *" },
-	{ "nfsv3", "op-mknod-start", 0, 0, "struct svc_req *",
-	    "conninfo_t *" },
-	{ "nfsv3", "op-mknod-start", 1, 1, "nfsv3oparg_t *",
-	    "nfsv3opinfo_t *" },
-	{ "nfsv3", "op-mknod-start", 2, 3, "MKNOD3args *" },
-	{ "nfsv3", "op-mknod-done", 0, 0, "struct svc_req *",
-	    "conninfo_t *" },
-	{ "nfsv3", "op-mknod-done", 1, 1, "nfsv3oparg_t *",
-	    "nfsv3opinfo_t *" },
-	{ "nfsv3", "op-mknod-done", 2, 3, "MKNOD3res *" },
-	{ "nfsv3", "op-null-start", 0, 0, "struct svc_req *",
-	    "conninfo_t *" },
-	{ "nfsv3", "op-null-start", 1, 1, "nfsv3oparg_t *",
-	    "nfsv3opinfo_t *" },
-	{ "nfsv3", "op-null-done", 0, 0, "struct svc_req *",
-	    "conninfo_t *" },
-	{ "nfsv3", "op-null-done", 1, 1, "nfsv3oparg_t *",
-	    "nfsv3opinfo_t *" },
-	{ "nfsv3", "op-pathconf-start", 0, 0, "struct svc_req *",
-	    "conninfo_t *" },
-	{ "nfsv3", "op-pathconf-start", 1, 1, "nfsv3oparg_t *",
-	    "nfsv3opinfo_t *" },
-	{ "nfsv3", "op-pathconf-start", 2, 3, "PATHCONF3args *" },
-	{ "nfsv3", "op-pathconf-done", 0, 0, "struct svc_req *",
-	    "conninfo_t *" },
-	{ "nfsv3", "op-pathconf-done", 1, 1, "nfsv3oparg_t *",
-	    "nfsv3opinfo_t *" },
-	{ "nfsv3", "op-pathconf-done", 2, 3, "PATHCONF3res *" },
-	{ "nfsv3", "op-read-start", 0, 0, "struct svc_req *",
-	    "conninfo_t *" },
-	{ "nfsv3", "op-read-start", 1, 1, "nfsv3oparg_t *",
-	    "nfsv3opinfo_t *" },
-	{ "nfsv3", "op-read-start", 2, 3, "READ3args *" },
-	{ "nfsv3", "op-read-done", 0, 0, "struct svc_req *",
-	    "conninfo_t *" },
-	{ "nfsv3", "op-read-done", 1, 1, "nfsv3oparg_t *",
-	    "nfsv3opinfo_t *" },
-	{ "nfsv3", "op-read-done", 2, 3, "READ3res *" },
-	{ "nfsv3", "op-readdir-start", 0, 0, "struct svc_req *",
-	    "conninfo_t *" },
-	{ "nfsv3", "op-readdir-start", 1, 1, "nfsv3oparg_t *",
-	    "nfsv3opinfo_t *" },
-	{ "nfsv3", "op-readdir-start", 2, 3, "READDIR3args *" },
-	{ "nfsv3", "op-readdir-done", 0, 0, "struct svc_req *",
-	    "conninfo_t *" },
-	{ "nfsv3", "op-readdir-done", 1, 1, "nfsv3oparg_t *",
-	    "nfsv3opinfo_t *" },
-	{ "nfsv3", "op-readdir-done", 2, 3, "READDIR3res *" },
-	{ "nfsv3", "op-readdirplus-start", 0, 0, "struct svc_req *",
-	    "conninfo_t *" },
-	{ "nfsv3", "op-readdirplus-start", 1, 1, "nfsv3oparg_t *",
-	    "nfsv3opinfo_t *" },
-	{ "nfsv3", "op-readdirplus-start", 2, 3, "READDIRPLUS3args *" },
-	{ "nfsv3", "op-readdirplus-done", 0, 0, "struct svc_req *",
-	    "conninfo_t *" },
-	{ "nfsv3", "op-readdirplus-done", 1, 1, "nfsv3oparg_t *",
-	    "nfsv3opinfo_t *" },
-	{ "nfsv3", "op-readdirplus-done", 2, 3, "READDIRPLUS3res *" },
-	{ "nfsv3", "op-readlink-start", 0, 0, "struct svc_req *",
-	    "conninfo_t *" },
-	{ "nfsv3", "op-readlink-start", 1, 1, "nfsv3oparg_t *",
-	    "nfsv3opinfo_t *" },
-	{ "nfsv3", "op-readlink-start", 2, 3, "READLINK3args *" },
-	{ "nfsv3", "op-readlink-done", 0, 0, "struct svc_req *",
-	    "conninfo_t *" },
-	{ "nfsv3", "op-readlink-done", 1, 1, "nfsv3oparg_t *",
-	    "nfsv3opinfo_t *" },
-	{ "nfsv3", "op-readlink-done", 2, 3, "READLINK3res *" },
-	{ "nfsv3", "op-remove-start", 0, 0, "struct svc_req *",
-	    "conninfo_t *" },
-	{ "nfsv3", "op-remove-start", 1, 1, "nfsv3oparg_t *",
-	    "nfsv3opinfo_t *" },
-	{ "nfsv3", "op-remove-start", 2, 3, "REMOVE3args *" },
-	{ "nfsv3", "op-remove-done", 0, 0, "struct svc_req *",
-	    "conninfo_t *" },
-	{ "nfsv3", "op-remove-done", 1, 1, "nfsv3oparg_t *",
-	    "nfsv3opinfo_t *" },
-	{ "nfsv3", "op-remove-done", 2, 3, "REMOVE3res *" },
-	{ "nfsv3", "op-rename-start", 0, 0, "struct svc_req *",
-	    "conninfo_t *" },
-	{ "nfsv3", "op-rename-start", 1, 1, "nfsv3oparg_t *",
-	    "nfsv3opinfo_t *" },
-	{ "nfsv3", "op-rename-start", 2, 3, "RENAME3args *" },
-	{ "nfsv3", "op-rename-done", 0, 0, "struct svc_req *",
-	    "conninfo_t *" },
-	{ "nfsv3", "op-rename-done", 1, 1, "nfsv3oparg_t *",
-	    "nfsv3opinfo_t *" },
-	{ "nfsv3", "op-rename-done", 2, 3, "RENAME3res *" },
-	{ "nfsv3", "op-rmdir-start", 0, 0, "struct svc_req *",
-	    "conninfo_t *" },
-	{ "nfsv3", "op-rmdir-start", 1, 1, "nfsv3oparg_t *",
-	    "nfsv3opinfo_t *" },
-	{ "nfsv3", "op-rmdir-start", 2, 3, "RMDIR3args *" },
-	{ "nfsv3", "op-rmdir-done", 0, 0, "struct svc_req *",
-	    "conninfo_t *" },
-	{ "nfsv3", "op-rmdir-done", 1, 1, "nfsv3oparg_t *",
-	    "nfsv3opinfo_t *" },
-	{ "nfsv3", "op-rmdir-done", 2, 3, "RMDIR3res *" },
-	{ "nfsv3", "op-setattr-start", 0, 0, "struct svc_req *",
-	    "conninfo_t *" },
-	{ "nfsv3", "op-setattr-start", 1, 1, "nfsv3oparg_t *",
-	    "nfsv3opinfo_t *" },
-	{ "nfsv3", "op-setattr-start", 2, 3, "SETATTR3args *" },
-	{ "nfsv3", "op-setattr-done", 0, 0, "struct svc_req *",
-	    "conninfo_t *" },
-	{ "nfsv3", "op-setattr-done", 1, 1, "nfsv3oparg_t *",
-	    "nfsv3opinfo_t *" },
-	{ "nfsv3", "op-setattr-done", 2, 3, "SETATTR3res *" },
-	{ "nfsv3", "op-symlink-start", 0, 0, "struct svc_req *",
-	    "conninfo_t *" },
-	{ "nfsv3", "op-symlink-start", 1, 1, "nfsv3oparg_t *",
-	    "nfsv3opinfo_t *" },
-	{ "nfsv3", "op-symlink-start", 2, 3, "SYMLINK3args *" },
-	{ "nfsv3", "op-symlink-done", 0, 0, "struct svc_req *",
-	    "conninfo_t *" },
-	{ "nfsv3", "op-symlink-done", 1, 1, "nfsv3oparg_t *",
-	    "nfsv3opinfo_t *" },
-	{ "nfsv3", "op-symlink-done", 2, 3, "SYMLINK3res *" },
-	{ "nfsv3", "op-write-start", 0, 0, "struct svc_req *",
-	    "conninfo_t *" },
-	{ "nfsv3", "op-write-start", 1, 1, "nfsv3oparg_t *",
-	    "nfsv3opinfo_t *" },
-	{ "nfsv3", "op-write-start", 2, 3, "WRITE3args *" },
-	{ "nfsv3", "op-write-done", 0, 0, "struct svc_req *",
-	    "conninfo_t *" },
-	{ "nfsv3", "op-write-done", 1, 1, "nfsv3oparg_t *",
-	    "nfsv3opinfo_t *" },
-	{ "nfsv3", "op-write-done", 2, 3, "WRITE3res *" },
+	/* Tables like this get really ugly when line-wrapped. */
+	/* BEGIN CSTYLED */
+	{ "nfsv3", "op-getattr-start", 0, 0, "struct svc_req *", "conninfo_t *" },
+	{ "nfsv3", "op-getattr-start", 1, 1, "nfsv3oparg_t *", "nfsv3opinfo_t *" },
+	{ "nfsv3", "op-getattr-start", 2, 4, "GETATTR3args *" },
+
+	{ "nfsv3", "op-getattr-done", 0, 0, "struct svc_req *", "conninfo_t *" },
+	{ "nfsv3", "op-getattr-done", 1, 1, "nfsv3oparg_t *", "nfsv3opinfo_t *" },
+	{ "nfsv3", "op-getattr-done", 2, 4, "GETATTR3res *" },
+
+	{ "nfsv3", "op-setattr-start", 0, 0, "struct svc_req *", "conninfo_t *" },
+	{ "nfsv3", "op-setattr-start", 1, 1, "nfsv3oparg_t *", "nfsv3opinfo_t *" },
+	{ "nfsv3", "op-setattr-start", 2, 4, "SETATTR3args *" },
+
+	{ "nfsv3", "op-setattr-done", 0, 0, "struct svc_req *", "conninfo_t *" },
+	{ "nfsv3", "op-setattr-done", 1, 1, "nfsv3oparg_t *", "nfsv3opinfo_t *" },
+	{ "nfsv3", "op-setattr-done", 2, 4, "SETATTR3res *" },
+
+	{ "nfsv3", "op-lookup-start", 0, 0, "struct svc_req *", "conninfo_t *" },
+	{ "nfsv3", "op-lookup-start", 1, 1, "nfsv3oparg_t *", "nfsv3opinfo_t *" },
+	{ "nfsv3", "op-lookup-start", 2, 4, "LOOKUP3args *" },
+
+	{ "nfsv3", "op-lookup-done", 0, 0, "struct svc_req *", "conninfo_t *" },
+	{ "nfsv3", "op-lookup-done", 1, 1, "nfsv3oparg_t *", "nfsv3opinfo_t *" },
+	{ "nfsv3", "op-lookup-done", 2, 4, "LOOKUP3res *" },
+
+	{ "nfsv3", "op-access-start", 0, 0, "struct svc_req *", "conninfo_t *" },
+	{ "nfsv3", "op-access-start", 1, 1, "nfsv3oparg_t *", "nfsv3opinfo_t *" },
+	{ "nfsv3", "op-access-start", 2, 4, "ACCESS3args *" },
+
+	{ "nfsv3", "op-access-done", 0, 0, "struct svc_req *", "conninfo_t *" },
+	{ "nfsv3", "op-access-done", 1, 1, "nfsv3oparg_t *", "nfsv3opinfo_t *" },
+	{ "nfsv3", "op-access-done", 2, 4, "ACCESS3res *" },
+
+	{ "nfsv3", "op-commit-start", 0, 0, "struct svc_req *", "conninfo_t *" },
+	{ "nfsv3", "op-commit-start", 1, 1, "nfsv3oparg_t *", "nfsv3opinfo_t *" },
+	{ "nfsv3", "op-commit-start", 2, 4, "COMMIT3args *" },
+
+	{ "nfsv3", "op-commit-done", 0, 0, "struct svc_req *", "conninfo_t *" },
+	{ "nfsv3", "op-commit-done", 1, 1, "nfsv3oparg_t *", "nfsv3opinfo_t *" },
+	{ "nfsv3", "op-commit-done", 2, 4, "COMMIT3res *" },
+
+	{ "nfsv3", "op-create-start", 0, 0, "struct svc_req *", "conninfo_t *" },
+	{ "nfsv3", "op-create-start", 1, 1, "nfsv3oparg_t *", "nfsv3opinfo_t *" },
+	{ "nfsv3", "op-create-start", 2, 4, "CREATE3args *" },
+
+	{ "nfsv3", "op-create-done", 0, 0, "struct svc_req *", "conninfo_t *" },
+	{ "nfsv3", "op-create-done", 1, 1, "nfsv3oparg_t *", "nfsv3opinfo_t *" },
+	{ "nfsv3", "op-create-done", 2, 4, "CREATE3res *" },
+
+	{ "nfsv3", "op-fsinfo-start", 0, 0, "struct svc_req *", "conninfo_t *" },
+	{ "nfsv3", "op-fsinfo-start", 1, 1, "nfsv3oparg_t *", "nfsv3opinfo_t *" },
+	{ "nfsv3", "op-fsinfo-start", 2, 4, "FSINFO3args *" },
+
+	{ "nfsv3", "op-fsinfo-done", 0, 0, "struct svc_req *", "conninfo_t *" },
+	{ "nfsv3", "op-fsinfo-done", 1, 1, "nfsv3oparg_t *", "nfsv3opinfo_t *" },
+	{ "nfsv3", "op-fsinfo-done", 2, 4, "FSINFO3res *" },
+
+	{ "nfsv3", "op-fsstat-start", 0, 0, "struct svc_req *", "conninfo_t *" },
+	{ "nfsv3", "op-fsstat-start", 1, 1, "nfsv3oparg_t *", "nfsv3opinfo_t *" },
+	{ "nfsv3", "op-fsstat-start", 2, 4, "FSSTAT3args *" },
+
+	{ "nfsv3", "op-fsstat-done", 0, 0, "struct svc_req *", "conninfo_t *" },
+	{ "nfsv3", "op-fsstat-done", 1, 1, "nfsv3oparg_t *", "nfsv3opinfo_t *" },
+	{ "nfsv3", "op-fsstat-done", 2, 4, "FSSTAT3res *" },
+
+	{ "nfsv3", "op-link-start", 0, 0, "struct svc_req *", "conninfo_t *" },
+	{ "nfsv3", "op-link-start", 1, 1, "nfsv3oparg_t *", "nfsv3opinfo_t *" },
+	{ "nfsv3", "op-link-start", 2, 4, "LINK3args *" },
+
+	{ "nfsv3", "op-link-done", 0, 0, "struct svc_req *", "conninfo_t *" },
+	{ "nfsv3", "op-link-done", 1, 1, "nfsv3oparg_t *", "nfsv3opinfo_t *" },
+	{ "nfsv3", "op-link-done", 2, 4, "LINK3res *" },
+
+	{ "nfsv3", "op-mkdir-start", 0, 0, "struct svc_req *", "conninfo_t *" },
+	{ "nfsv3", "op-mkdir-start", 1, 1, "nfsv3oparg_t *", "nfsv3opinfo_t *" },
+	{ "nfsv3", "op-mkdir-start", 2, 4, "MKDIR3args *" },
+
+	{ "nfsv3", "op-mkdir-done", 0, 0, "struct svc_req *", "conninfo_t *" },
+	{ "nfsv3", "op-mkdir-done", 1, 1, "nfsv3oparg_t *", "nfsv3opinfo_t *" },
+	{ "nfsv3", "op-mkdir-done", 2, 4, "MKDIR3res *" },
+
+	{ "nfsv3", "op-mknod-start", 0, 0, "struct svc_req *", "conninfo_t *" },
+	{ "nfsv3", "op-mknod-start", 1, 1, "nfsv3oparg_t *", "nfsv3opinfo_t *" },
+	{ "nfsv3", "op-mknod-start", 2, 4, "MKNOD3args *" },
+
+	{ "nfsv3", "op-mknod-done", 0, 0, "struct svc_req *", "conninfo_t *" },
+	{ "nfsv3", "op-mknod-done", 1, 1, "nfsv3oparg_t *", "nfsv3opinfo_t *" },
+	{ "nfsv3", "op-mknod-done", 2, 4, "MKNOD3res *" },
+
+	{ "nfsv3", "op-null-start", 0, 0, "struct svc_req *", "conninfo_t *" },
+	{ "nfsv3", "op-null-start", 1, 1, "nfsv3oparg_t *", "nfsv3opinfo_t *" },
+
+	{ "nfsv3", "op-null-done", 0, 0, "struct svc_req *", "conninfo_t *" },
+	{ "nfsv3", "op-null-done", 1, 1, "nfsv3oparg_t *", "nfsv3opinfo_t *" },
+
+	{ "nfsv3", "op-pathconf-start", 0, 0, "struct svc_req *", "conninfo_t *" },
+	{ "nfsv3", "op-pathconf-start", 1, 1, "nfsv3oparg_t *", "nfsv3opinfo_t *" },
+	{ "nfsv3", "op-pathconf-start", 2, 4, "PATHCONF3args *" },
+
+	{ "nfsv3", "op-pathconf-done", 0, 0, "struct svc_req *", "conninfo_t *" },
+	{ "nfsv3", "op-pathconf-done", 1, 1, "nfsv3oparg_t *", "nfsv3opinfo_t *" },
+	{ "nfsv3", "op-pathconf-done", 2, 4, "PATHCONF3res *" },
+
+	{ "nfsv3", "op-read-start", 0, 0, "struct svc_req *", "conninfo_t *" },
+	{ "nfsv3", "op-read-start", 1, 1, "nfsv3oparg_t *", "nfsv3opinfo_t *" },
+	{ "nfsv3", "op-read-start", 2, 4, "READ3args *" },
+
+	{ "nfsv3", "op-read-done", 0, 0, "struct svc_req *", "conninfo_t *" },
+	{ "nfsv3", "op-read-done", 1, 1, "nfsv3oparg_t *", "nfsv3opinfo_t *" },
+	{ "nfsv3", "op-read-done", 2, 4, "READ3res *" },
+
+	{ "nfsv3", "op-readdir-start", 0, 0, "struct svc_req *", "conninfo_t *" },
+	{ "nfsv3", "op-readdir-start", 1, 1, "nfsv3oparg_t *", "nfsv3opinfo_t *" },
+	{ "nfsv3", "op-readdir-start", 2, 4, "READDIR3args *" },
+
+	{ "nfsv3", "op-readdir-done", 0, 0, "struct svc_req *", "conninfo_t *" },
+	{ "nfsv3", "op-readdir-done", 1, 1, "nfsv3oparg_t *", "nfsv3opinfo_t *" },
+	{ "nfsv3", "op-readdir-done", 2, 4, "READDIR3res *" },
+
+	{ "nfsv3", "op-readdirplus-start", 0, 0, "struct svc_req *", "conninfo_t *" },
+	{ "nfsv3", "op-readdirplus-start", 1, 1, "nfsv3oparg_t *", "nfsv3opinfo_t *" },
+	{ "nfsv3", "op-readdirplus-start", 2, 4, "READDIRPLUS3args *" },
+
+	{ "nfsv3", "op-readdirplus-done", 0, 0, "struct svc_req *", "conninfo_t *" },
+	{ "nfsv3", "op-readdirplus-done", 1, 1, "nfsv3oparg_t *", "nfsv3opinfo_t *" },
+	{ "nfsv3", "op-readdirplus-done", 2, 4, "READDIRPLUS3res *" },
+
+	{ "nfsv3", "op-readlink-start", 0, 0, "struct svc_req *", "conninfo_t *" },
+	{ "nfsv3", "op-readlink-start", 1, 1, "nfsv3oparg_t *", "nfsv3opinfo_t *" },
+	{ "nfsv3", "op-readlink-start", 2, 4, "READLINK3args *" },
+
+	{ "nfsv3", "op-readlink-done", 0, 0, "struct svc_req *", "conninfo_t *" },
+	{ "nfsv3", "op-readlink-done", 1, 1, "nfsv3oparg_t *", "nfsv3opinfo_t *" },
+	{ "nfsv3", "op-readlink-done", 2, 4, "READLINK3res *" },
+
+	{ "nfsv3", "op-remove-start", 0, 0, "struct svc_req *", "conninfo_t *" },
+	{ "nfsv3", "op-remove-start", 1, 1, "nfsv3oparg_t *", "nfsv3opinfo_t *" },
+	{ "nfsv3", "op-remove-start", 2, 4, "REMOVE3args *" },
+
+	{ "nfsv3", "op-remove-done", 0, 0, "struct svc_req *", "conninfo_t *" },
+	{ "nfsv3", "op-remove-done", 1, 1, "nfsv3oparg_t *", "nfsv3opinfo_t *" },
+	{ "nfsv3", "op-remove-done", 2, 4, "REMOVE3res *" },
+
+	{ "nfsv3", "op-rename-start", 0, 0, "struct svc_req *", "conninfo_t *" },
+	{ "nfsv3", "op-rename-start", 1, 1, "nfsv3oparg_t *", "nfsv3opinfo_t *" },
+	{ "nfsv3", "op-rename-start", 2, 4, "RENAME3args *" },
+
+	{ "nfsv3", "op-rename-done", 0, 0, "struct svc_req *", "conninfo_t *" },
+	{ "nfsv3", "op-rename-done", 1, 1, "nfsv3oparg_t *", "nfsv3opinfo_t *" },
+	{ "nfsv3", "op-rename-done", 2, 4, "RENAME3res *" },
+
+	{ "nfsv3", "op-rmdir-start", 0, 0, "struct svc_req *", "conninfo_t *" },
+	{ "nfsv3", "op-rmdir-start", 1, 1, "nfsv3oparg_t *", "nfsv3opinfo_t *" },
+	{ "nfsv3", "op-rmdir-start", 2, 4, "RMDIR3args *" },
+
+	{ "nfsv3", "op-rmdir-done", 0, 0, "struct svc_req *", "conninfo_t *" },
+	{ "nfsv3", "op-rmdir-done", 1, 1, "nfsv3oparg_t *", "nfsv3opinfo_t *" },
+	{ "nfsv3", "op-rmdir-done", 2, 4, "RMDIR3res *" },
+
+	{ "nfsv3", "op-symlink-start", 0, 0, "struct svc_req *", "conninfo_t *" },
+	{ "nfsv3", "op-symlink-start", 1, 1, "nfsv3oparg_t *", "nfsv3opinfo_t *" },
+	{ "nfsv3", "op-symlink-start", 2, 4, "SYMLINK3args *" },
+
+	{ "nfsv3", "op-symlink-done", 0, 0, "struct svc_req *", "conninfo_t *" },
+	{ "nfsv3", "op-symlink-done", 1, 1, "nfsv3oparg_t *", "nfsv3opinfo_t *" },
+	{ "nfsv3", "op-symlink-done", 2, 4, "SYMLINK3res *" },
+
+	{ "nfsv3", "op-write-start", 0, 0, "struct svc_req *", "conninfo_t *" },
+	{ "nfsv3", "op-write-start", 1, 1, "nfsv3oparg_t *", "nfsv3opinfo_t *" },
+	{ "nfsv3", "op-write-start", 2, 4, "WRITE3args *" },
+
+	{ "nfsv3", "op-write-done", 0, 0, "struct svc_req *", "conninfo_t *" },
+	{ "nfsv3", "op-write-done", 1, 1, "nfsv3oparg_t *", "nfsv3opinfo_t *" },
+	{ "nfsv3", "op-write-done", 2, 4, "WRITE3res *" },
 
 	{ "nfsv4", "null-start", 0, 0, "struct svc_req *", "conninfo_t *" },
 	{ "nfsv4", "null-done", 0, 0, "struct svc_req *", "conninfo_t *" },
-	{ "nfsv4", "compound-start", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "compound-start", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "compound-start", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "compound-start", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
 	{ "nfsv4", "compound-start", 2, 1, "COMPOUND4args *" },
-	{ "nfsv4", "compound-done", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "compound-done", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "compound-done", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "compound-done", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
 	{ "nfsv4", "compound-done", 2, 1, "COMPOUND4res *" },
-	{ "nfsv4", "op-access-start", 0, 0, "struct compound_state *",
-	    "conninfo_t *"},
-	{ "nfsv4", "op-access-start", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-access-start", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-access-start", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
 	{ "nfsv4", "op-access-start", 2, 1, "ACCESS4args *" },
-	{ "nfsv4", "op-access-done", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-access-done", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-access-done", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-access-done", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
 	{ "nfsv4", "op-access-done", 2, 1, "ACCESS4res *" },
-	{ "nfsv4", "op-close-start", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-close-start", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-close-start", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-close-start", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
 	{ "nfsv4", "op-close-start", 2, 1, "CLOSE4args *" },
-	{ "nfsv4", "op-close-done", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-close-done", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-close-done", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-close-done", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
 	{ "nfsv4", "op-close-done", 2, 1, "CLOSE4res *" },
-	{ "nfsv4", "op-commit-start", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-commit-start", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-commit-start", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-commit-start", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
 	{ "nfsv4", "op-commit-start", 2, 1, "COMMIT4args *" },
-	{ "nfsv4", "op-commit-done", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-commit-done", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-commit-done", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-commit-done", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
 	{ "nfsv4", "op-commit-done", 2, 1, "COMMIT4res *" },
-	{ "nfsv4", "op-create-start", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-create-start", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-create-start", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-create-start", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
 	{ "nfsv4", "op-create-start", 2, 1, "CREATE4args *" },
-	{ "nfsv4", "op-create-done", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-create-done", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-create-done", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-create-done", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
 	{ "nfsv4", "op-create-done", 2, 1, "CREATE4res *" },
-	{ "nfsv4", "op-delegpurge-start", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-delegpurge-start", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-delegpurge-start", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-delegpurge-start", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
 	{ "nfsv4", "op-delegpurge-start", 2, 1, "DELEGPURGE4args *" },
-	{ "nfsv4", "op-delegpurge-done", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-delegpurge-done", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-delegpurge-done", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-delegpurge-done", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
 	{ "nfsv4", "op-delegpurge-done", 2, 1, "DELEGPURGE4res *" },
-	{ "nfsv4", "op-delegreturn-start", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-delegreturn-start", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-delegreturn-start", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-delegreturn-start", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
 	{ "nfsv4", "op-delegreturn-start", 2, 1, "DELEGRETURN4args *" },
-	{ "nfsv4", "op-delegreturn-done", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-delegreturn-done", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-delegreturn-done", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-delegreturn-done", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
 	{ "nfsv4", "op-delegreturn-done", 2, 1, "DELEGRETURN4res *" },
-	{ "nfsv4", "op-getattr-start", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-getattr-start", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-getattr-start", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-getattr-start", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
 	{ "nfsv4", "op-getattr-start", 2, 1, "GETATTR4args *" },
-	{ "nfsv4", "op-getattr-done", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-getattr-done", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-getattr-done", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-getattr-done", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
 	{ "nfsv4", "op-getattr-done", 2, 1, "GETATTR4res *" },
-	{ "nfsv4", "op-getfh-start", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-getfh-start", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
-	{ "nfsv4", "op-getfh-done", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-getfh-done", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-getfh-start", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-getfh-start", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-getfh-done", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-getfh-done", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
 	{ "nfsv4", "op-getfh-done", 2, 1, "GETFH4res *" },
-	{ "nfsv4", "op-link-start", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-link-start", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-link-start", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-link-start", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
 	{ "nfsv4", "op-link-start", 2, 1, "LINK4args *" },
-	{ "nfsv4", "op-link-done", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-link-done", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-link-done", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-link-done", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
 	{ "nfsv4", "op-link-done", 2, 1, "LINK4res *" },
-	{ "nfsv4", "op-lock-start", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-lock-start", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-lock-start", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-lock-start", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
 	{ "nfsv4", "op-lock-start", 2, 1, "LOCK4args *" },
-	{ "nfsv4", "op-lock-done", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-lock-done", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-lock-done", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-lock-done", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
 	{ "nfsv4", "op-lock-done", 2, 1, "LOCK4res *" },
-	{ "nfsv4", "op-lockt-start", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-lockt-start", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-lockt-start", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-lockt-start", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
 	{ "nfsv4", "op-lockt-start", 2, 1, "LOCKT4args *" },
-	{ "nfsv4", "op-lockt-done", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-lockt-done", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-lockt-done", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-lockt-done", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
 	{ "nfsv4", "op-lockt-done", 2, 1, "LOCKT4res *" },
-	{ "nfsv4", "op-locku-start", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-locku-start", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-locku-start", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-locku-start", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
 	{ "nfsv4", "op-locku-start", 2, 1, "LOCKU4args *" },
-	{ "nfsv4", "op-locku-done", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-locku-done", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-locku-done", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-locku-done", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
 	{ "nfsv4", "op-locku-done", 2, 1, "LOCKU4res *" },
-	{ "nfsv4", "op-lookup-start", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-lookup-start", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-lookup-start", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-lookup-start", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
 	{ "nfsv4", "op-lookup-start", 2, 1, "LOOKUP4args *" },
-	{ "nfsv4", "op-lookup-done", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-lookup-done", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-lookup-done", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-lookup-done", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
 	{ "nfsv4", "op-lookup-done", 2, 1, "LOOKUP4res *" },
-	{ "nfsv4", "op-lookupp-start", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-lookupp-start", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
-	{ "nfsv4", "op-lookupp-done", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-lookupp-done", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-lookupp-start", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-lookupp-start", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-lookupp-done", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-lookupp-done", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
 	{ "nfsv4", "op-lookupp-done", 2, 1, "LOOKUPP4res *" },
-	{ "nfsv4", "op-nverify-start", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-nverify-start", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-nverify-start", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-nverify-start", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
 	{ "nfsv4", "op-nverify-start", 2, 1, "NVERIFY4args *" },
-	{ "nfsv4", "op-nverify-done", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-nverify-done", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-nverify-done", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-nverify-done", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
 	{ "nfsv4", "op-nverify-done", 2, 1, "NVERIFY4res *" },
-	{ "nfsv4", "op-open-start", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-open-start", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-open-start", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-open-start", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
 	{ "nfsv4", "op-open-start", 2, 1, "OPEN4args *" },
-	{ "nfsv4", "op-open-done", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-open-done", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-open-done", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-open-done", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
 	{ "nfsv4", "op-open-done", 2, 1, "OPEN4res *" },
-	{ "nfsv4", "op-open-confirm-start", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-open-confirm-start", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-open-confirm-start", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-open-confirm-start", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
 	{ "nfsv4", "op-open-confirm-start", 2, 1, "OPEN_CONFIRM4args *" },
-	{ "nfsv4", "op-open-confirm-done", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-open-confirm-done", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-open-confirm-done", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-open-confirm-done", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
 	{ "nfsv4", "op-open-confirm-done", 2, 1, "OPEN_CONFIRM4res *" },
-	{ "nfsv4", "op-open-downgrade-start", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-open-downgrade-start", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-open-downgrade-start", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-open-downgrade-start", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
 	{ "nfsv4", "op-open-downgrade-start", 2, 1, "OPEN_DOWNGRADE4args *" },
-	{ "nfsv4", "op-open-downgrade-done", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-open-downgrade-done", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-open-downgrade-done", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-open-downgrade-done", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
 	{ "nfsv4", "op-open-downgrade-done", 2, 1, "OPEN_DOWNGRADE4res *" },
-	{ "nfsv4", "op-openattr-start", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-openattr-start", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-openattr-start", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-openattr-start", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
 	{ "nfsv4", "op-openattr-start", 2, 1, "OPENATTR4args *" },
-	{ "nfsv4", "op-openattr-done", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-openattr-done", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-openattr-done", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-openattr-done", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
 	{ "nfsv4", "op-openattr-done", 2, 1, "OPENATTR4res *" },
-	{ "nfsv4", "op-putfh-start", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-putfh-start", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-putfh-start", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-putfh-start", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
 	{ "nfsv4", "op-putfh-start", 2, 1, "PUTFH4args *" },
-	{ "nfsv4", "op-putfh-done", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-putfh-done", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-putfh-done", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-putfh-done", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
 	{ "nfsv4", "op-putfh-done", 2, 1, "PUTFH4res *" },
-	{ "nfsv4", "op-putpubfh-start", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-putpubfh-start", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
-	{ "nfsv4", "op-putpubfh-done", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-putpubfh-done", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-putpubfh-start", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-putpubfh-start", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-putpubfh-done", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-putpubfh-done", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
 	{ "nfsv4", "op-putpubfh-done", 2, 1, "PUTPUBFH4res *" },
-	{ "nfsv4", "op-putrootfh-start", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-putrootfh-start", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
-	{ "nfsv4", "op-putrootfh-done", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-putrootfh-done", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-putrootfh-start", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-putrootfh-start", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-putrootfh-done", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-putrootfh-done", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
 	{ "nfsv4", "op-putrootfh-done", 2, 1, "PUTROOTFH4res *" },
-	{ "nfsv4", "op-read-start", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-read-start", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-read-start", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-read-start", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
 	{ "nfsv4", "op-read-start", 2, 1, "READ4args *" },
-	{ "nfsv4", "op-read-done", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-read-done", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-read-done", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-read-done", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
 	{ "nfsv4", "op-read-done", 2, 1, "READ4res *" },
-	{ "nfsv4", "op-readdir-start", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-readdir-start", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-readdir-start", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-readdir-start", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
 	{ "nfsv4", "op-readdir-start", 2, 1, "READDIR4args *" },
-	{ "nfsv4", "op-readdir-done", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-readdir-done", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-readdir-done", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-readdir-done", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
 	{ "nfsv4", "op-readdir-done", 2, 1, "READDIR4res *" },
-	{ "nfsv4", "op-readlink-start", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-readlink-start", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
-	{ "nfsv4", "op-readlink-done", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-readlink-done", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-readlink-start", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-readlink-start", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-readlink-done", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-readlink-done", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
 	{ "nfsv4", "op-readlink-done", 2, 1, "READLINK4res *" },
-	{ "nfsv4", "op-release-lockowner-start", 0, 0,
-	    "struct compound_state *", "conninfo_t *" },
-	{ "nfsv4", "op-release-lockowner-start", 1, 0,
-	    "struct compound_state *", "nfsv4opinfo_t *" },
-	{ "nfsv4", "op-release-lockowner-start", 2, 1,
-	    "RELEASE_LOCKOWNER4args *" },
-	{ "nfsv4", "op-release-lockowner-done", 0, 0,
-	    "struct compound_state *", "conninfo_t *" },
-	{ "nfsv4", "op-release-lockowner-done", 1, 0,
-	    "struct compound_state *", "nfsv4opinfo_t *" },
-	{ "nfsv4", "op-release-lockowner-done", 2, 1,
-	    "RELEASE_LOCKOWNER4res *" },
-	{ "nfsv4", "op-remove-start", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-remove-start", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-release-lockowner-start", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-release-lockowner-start", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
+	{ "nfsv4", "op-release-lockowner-start", 2, 1, "RELEASE_LOCKOWNER4args *" },
+
+	{ "nfsv4", "op-release-lockowner-done", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-release-lockowner-done", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
+	{ "nfsv4", "op-release-lockowner-done", 2, 1, "RELEASE_LOCKOWNER4res *" },
+
+	{ "nfsv4", "op-remove-start", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-remove-start", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
 	{ "nfsv4", "op-remove-start", 2, 1, "REMOVE4args *" },
-	{ "nfsv4", "op-remove-done", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-remove-done", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-remove-done", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-remove-done", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
 	{ "nfsv4", "op-remove-done", 2, 1, "REMOVE4res *" },
-	{ "nfsv4", "op-rename-start", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-rename-start", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-rename-start", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-rename-start", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
 	{ "nfsv4", "op-rename-start", 2, 1, "RENAME4args *" },
-	{ "nfsv4", "op-rename-done", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-rename-done", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-rename-done", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-rename-done", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
 	{ "nfsv4", "op-rename-done", 2, 1, "RENAME4res *" },
-	{ "nfsv4", "op-renew-start", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-renew-start", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-renew-start", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-renew-start", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
 	{ "nfsv4", "op-renew-start", 2, 1, "RENEW4args *" },
-	{ "nfsv4", "op-renew-done", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-renew-done", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-renew-done", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-renew-done", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
 	{ "nfsv4", "op-renew-done", 2, 1, "RENEW4res *" },
-	{ "nfsv4", "op-restorefh-start", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-restorefh-start", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
-	{ "nfsv4", "op-restorefh-done", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-restorefh-done", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-restorefh-start", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-restorefh-start", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-restorefh-done", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-restorefh-done", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
 	{ "nfsv4", "op-restorefh-done", 2, 1, "RESTOREFH4res *" },
-	{ "nfsv4", "op-savefh-start", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-savefh-start", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
-	{ "nfsv4", "op-savefh-done", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-savefh-done", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-savefh-start", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-savefh-start", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-savefh-done", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-savefh-done", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
 	{ "nfsv4", "op-savefh-done", 2, 1, "SAVEFH4res *" },
-	{ "nfsv4", "op-secinfo-start", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-secinfo-start", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-secinfo-start", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-secinfo-start", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
 	{ "nfsv4", "op-secinfo-start", 2, 1, "SECINFO4args *" },
-	{ "nfsv4", "op-secinfo-done", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-secinfo-done", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-secinfo-done", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-secinfo-done", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
 	{ "nfsv4", "op-secinfo-done", 2, 1, "SECINFO4res *" },
-	{ "nfsv4", "op-setattr-start", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-setattr-start", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-setattr-start", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-setattr-start", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
 	{ "nfsv4", "op-setattr-start", 2, 1, "SETATTR4args *" },
-	{ "nfsv4", "op-setattr-done", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-setattr-done", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-setattr-done", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-setattr-done", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
 	{ "nfsv4", "op-setattr-done", 2, 1, "SETATTR4res *" },
-	{ "nfsv4", "op-setclientid-start", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-setclientid-start", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-setclientid-start", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-setclientid-start", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
 	{ "nfsv4", "op-setclientid-start", 2, 1, "SETCLIENTID4args *" },
-	{ "nfsv4", "op-setclientid-done", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-setclientid-done", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-setclientid-done", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-setclientid-done", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
 	{ "nfsv4", "op-setclientid-done", 2, 1, "SETCLIENTID4res *" },
-	{ "nfsv4", "op-setclientid-confirm-start", 0, 0,
-	    "struct compound_state *", "conninfo_t *" },
-	{ "nfsv4", "op-setclientid-confirm-start", 1, 0,
-	    "struct compound_state *", "nfsv4opinfo_t *" },
-	{ "nfsv4", "op-setclientid-confirm-start", 2, 1,
-	    "SETCLIENTID_CONFIRM4args *" },
-	{ "nfsv4", "op-setclientid-confirm-done", 0, 0,
-	    "struct compound_state *", "conninfo_t *" },
-	{ "nfsv4", "op-setclientid-confirm-done", 1, 0,
-	    "struct compound_state *", "nfsv4opinfo_t *" },
-	{ "nfsv4", "op-setclientid-confirm-done", 2, 1,
-	    "SETCLIENTID_CONFIRM4res *" },
-	{ "nfsv4", "op-verify-start", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-verify-start", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-setclientid-confirm-start", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-setclientid-confirm-start", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
+	{ "nfsv4", "op-setclientid-confirm-start", 2, 1, "SETCLIENTID_CONFIRM4args *" },
+
+	{ "nfsv4", "op-setclientid-confirm-done", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-setclientid-confirm-done", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
+	{ "nfsv4", "op-setclientid-confirm-done", 2, 1, "SETCLIENTID_CONFIRM4res *" },
+
+	{ "nfsv4", "op-verify-start", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-verify-start", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
 	{ "nfsv4", "op-verify-start", 2, 1, "VERIFY4args *" },
-	{ "nfsv4", "op-verify-done", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-verify-done", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-verify-done", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-verify-done", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
 	{ "nfsv4", "op-verify-done", 2, 1, "VERIFY4res *" },
-	{ "nfsv4", "op-write-start", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-write-start", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-write-start", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-write-start", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
 	{ "nfsv4", "op-write-start", 2, 1, "WRITE4args *" },
-	{ "nfsv4", "op-write-done", 0, 0, "struct compound_state *",
-	    "conninfo_t *" },
-	{ "nfsv4", "op-write-done", 1, 0, "struct compound_state *",
-	    "nfsv4opinfo_t *" },
+
+	{ "nfsv4", "op-write-done", 0, 0, "struct compound_state *", "conninfo_t *" },
+	{ "nfsv4", "op-write-done", 1, 0, "struct compound_state *", "nfsv4opinfo_t *" },
 	{ "nfsv4", "op-write-done", 2, 1, "WRITE4res *" },
-	{ "nfsv4", "cb-recall-start", 0, 0, "rfs4_client_t *",
-	    "conninfo_t *" },
-	{ "nfsv4", "cb-recall-start", 1, 1, "rfs4_deleg_state_t *",
-	    "nfsv4cbinfo_t *" },
+
+	{ "nfsv4", "cb-recall-start", 0, 0, "rfs4_client_t *", "conninfo_t *" },
+	{ "nfsv4", "cb-recall-start", 1, 1, "rfs4_deleg_state_t *", "nfsv4cbinfo_t *" },
 	{ "nfsv4", "cb-recall-start", 2, 2, "CB_RECALL4args *" },
-	{ "nfsv4", "cb-recall-done", 0, 0, "rfs4_client_t *",
-	    "conninfo_t *" },
-	{ "nfsv4", "cb-recall-done", 1, 1, "rfs4_deleg_state_t *",
-	    "nfsv4cbinfo_t *" },
+
+	{ "nfsv4", "cb-recall-done", 0, 0, "rfs4_client_t *", "conninfo_t *" },
+	{ "nfsv4", "cb-recall-done", 1, 1, "rfs4_deleg_state_t *", "nfsv4cbinfo_t *" },
 	{ "nfsv4", "cb-recall-done", 2, 2, "CB_RECALL4res *" },
 
-	/* Tables like this get really ugly when line-wrapped. */
-	/* BEGIN CSTYLED */
 	{ "smb", "op-Close-start", 0, 0, "smb_request_t *", "conninfo_t *" },
 	{ "smb", "op-Close-start", 1, 0, "smb_request_t *", "smbopinfo_t *" },
 	{ "smb", "op-Close-done", 0, 0, "smb_request_t *", "conninfo_t *" },
diff --git a/usr/src/uts/common/fs/nfs/nfs3_srv.c b/usr/src/uts/common/fs/nfs/nfs3_srv.c
index 30084ba261..a9814689c1 100644
--- a/usr/src/uts/common/fs/nfs/nfs3_srv.c
+++ b/usr/src/uts/common/fs/nfs/nfs3_srv.c
@@ -104,8 +104,9 @@ rfs3_getattr(GETATTR3args *args, GETATTR3res *resp, struct exportinfo *exi,
 
 	vp = nfs3_fhtovp(&args->object, exi);
 
-	DTRACE_NFSV3_4(op__getattr__start, struct svc_req *, req,
-	    cred_t *, cr, vnode_t *, vp, GETATTR3args *, args);
+	DTRACE_NFSV3_5(op__getattr__start, struct svc_req *, req,
+	    cred_t *, cr, vnode_t *, vp, struct exportinfo *, exi,
+	    GETATTR3args *, args);
 
 	if (vp == NULL) {
 		error = ESTALE;
@@ -126,8 +127,9 @@ rfs3_getattr(GETATTR3args *args, GETATTR3res *resp, struct exportinfo *exi,
 			goto out;
 		resp->status = NFS3_OK;
 
-		DTRACE_NFSV3_4(op__getattr__done, struct svc_req *, req,
-		    cred_t *, cr, vnode_t *, vp, GETATTR3res *, resp);
+		DTRACE_NFSV3_5(op__getattr__done, struct svc_req *, req,
+		    cred_t *, cr, vnode_t *, vp, struct exportinfo *, exi,
+		    GETATTR3res *, resp);
 
 		VN_RELE(vp);
 
@@ -141,8 +143,9 @@ out:
 	} else
 		resp->status = puterrno3(error);
 
-	DTRACE_NFSV3_4(op__getattr__done, struct svc_req *, req,
-	    cred_t *, cr, vnode_t *, vp, GETATTR3res *, resp);
+	DTRACE_NFSV3_5(op__getattr__done, struct svc_req *, req,
+	    cred_t *, cr, vnode_t *, vp, struct exportinfo *, exi,
+	    GETATTR3res *, resp);
 
 	if (vp != NULL)
 		VN_RELE(vp);
@@ -175,8 +178,9 @@ rfs3_setattr(SETATTR3args *args, SETATTR3res *resp, struct exportinfo *exi,
 
 	vp = nfs3_fhtovp(&args->object, exi);
 
-	DTRACE_NFSV3_4(op__setattr__start, struct svc_req *, req,
-	    cred_t *, cr, vnode_t *, vp, SETATTR3args *, args);
+	DTRACE_NFSV3_5(op__setattr__start, struct svc_req *, req,
+	    cred_t *, cr, vnode_t *, vp, struct exportinfo *, exi,
+	    SETATTR3args *, args);
 
 	if (vp == NULL) {
 		error = ESTALE;
@@ -337,8 +341,9 @@ rfs3_setattr(SETATTR3args *args, SETATTR3res *resp, struct exportinfo *exi,
 	resp->status = NFS3_OK;
 	vattr_to_wcc_data(bvap, avap, &resp->resok.obj_wcc);
 
-	DTRACE_NFSV3_4(op__setattr__done, struct svc_req *, req,
-	    cred_t *, cr, vnode_t *, vp, SETATTR3res *, resp);
+	DTRACE_NFSV3_5(op__setattr__done, struct svc_req *, req,
+	    cred_t *, cr, vnode_t *, vp, struct exportinfo *, exi,
+	    SETATTR3res *, resp);
 
 	VN_RELE(vp);
 
@@ -351,8 +356,9 @@ out:
 	} else
 		resp->status = puterrno3(error);
 out1:
-	DTRACE_NFSV3_4(op__setattr__done, struct svc_req *, req,
-	    cred_t *, cr, vnode_t *, vp, SETATTR3res *, resp);
+	DTRACE_NFSV3_5(op__setattr__done, struct svc_req *, req,
+	    cred_t *, cr, vnode_t *, vp, struct exportinfo *, exi,
+	    SETATTR3res *, resp);
 
 	if (vp != NULL) {
 		if (in_crit)
@@ -400,13 +406,15 @@ rfs3_lookup(LOOKUP3args *args, LOOKUP3res *resp, struct exportinfo *exi,
 		dvp = ZONE_ROOTVP();
 		VN_HOLD(dvp);
 
-		DTRACE_NFSV3_4(op__lookup__start, struct svc_req *, req,
-		    cred_t *, cr, vnode_t *, dvp, LOOKUP3args *, args);
+		DTRACE_NFSV3_5(op__lookup__start, struct svc_req *, req,
+		    cred_t *, cr, vnode_t *, dvp, struct exportinfo *, exi,
+		    LOOKUP3args *, args);
 	} else {
 		dvp = nfs3_fhtovp(&args->what.dir, exi);
 
-		DTRACE_NFSV3_4(op__lookup__start, struct svc_req *, req,
-		    cred_t *, cr, vnode_t *, dvp, LOOKUP3args *, args);
+		DTRACE_NFSV3_5(op__lookup__start, struct svc_req *, req,
+		    cred_t *, cr, vnode_t *, dvp, struct exportinfo *, exi,
+		    LOOKUP3args *, args);
 
 		if (dvp == NULL) {
 			error = ESTALE;
@@ -560,8 +568,9 @@ rfs3_lookup(LOOKUP3args *args, LOOKUP3res *resp, struct exportinfo *exi,
 	if (auth_weak)
 		resp->status = (enum nfsstat3)WNFSERR_CLNT_FLAVOR;
 
-	DTRACE_NFSV3_4(op__lookup__done, struct svc_req *, req,
-	    cred_t *, cr, vnode_t *, dvp, LOOKUP3res *, resp);
+	DTRACE_NFSV3_5(op__lookup__done, struct svc_req *, req,
+	    cred_t *, cr, vnode_t *, dvp, struct exportinfo *, exi,
+	    LOOKUP3res *, resp);
 	VN_RELE(dvp);
 
 	return;
@@ -573,12 +582,13 @@ out:
 	} else
 		resp->status = puterrno3(error);
 out1:
+	DTRACE_NFSV3_5(op__lookup__done, struct svc_req *, req,
+	    cred_t *, cr, vnode_t *, dvp, struct exportinfo *, exi,
+	    LOOKUP3res *, resp);
+
 	if (exi != NULL)
 		exi_rele(exi);
 
-	DTRACE_NFSV3_4(op__lookup__done, struct svc_req *, req,
-	    cred_t *, cr, vnode_t *, dvp, LOOKUP3res *, resp);
-
 	if (dvp != NULL)
 		VN_RELE(dvp);
 	vattr_to_post_op_attr(dvap, &resp->resfail.dir_attributes);
@@ -610,8 +620,9 @@ rfs3_access(ACCESS3args *args, ACCESS3res *resp, struct exportinfo *exi,
 
 	vp = nfs3_fhtovp(&args->object, exi);
 
-	DTRACE_NFSV3_4(op__access__start, struct svc_req *, req,
-	    cred_t *, cr, vnode_t *, vp, ACCESS3args *, args);
+	DTRACE_NFSV3_5(op__access__start, struct svc_req *, req,
+	    cred_t *, cr, vnode_t *, vp, struct exportinfo *, exi,
+	    ACCESS3args *, args);
 
 	if (vp == NULL) {
 		error = ESTALE;
@@ -721,8 +732,9 @@ rfs3_access(ACCESS3args *args, ACCESS3res *resp, struct exportinfo *exi,
 	resp->status = NFS3_OK;
 	vattr_to_post_op_attr(vap, &resp->resok.obj_attributes);
 
-	DTRACE_NFSV3_4(op__access__done, struct svc_req *, req,
-	    cred_t *, cr, vnode_t *, vp, ACCESS3res *, resp);
+	DTRACE_NFSV3_5(op__access__done, struct svc_req *, req,
+	    cred_t *, cr, vnode_t *, vp, struct exportinfo *, exi,
+	    ACCESS3res *, resp);
 
 	VN_RELE(vp);
 
@@ -734,8 +746,9 @@ out:
 		resp->status = NFS3ERR_JUKEBOX;
 	} else
 		resp->status = puterrno3(error);
-	DTRACE_NFSV3_4(op__access__done, struct svc_req *, req,
-	    cred_t *, cr, vnode_t *, vp, ACCESS3res *, resp);
+	DTRACE_NFSV3_5(op__access__done, struct svc_req *, req,
+	    cred_t *, cr, vnode_t *, vp, struct exportinfo *, exi,
+	    ACCESS3res *, resp);
 	if (vp != NULL)
 		VN_RELE(vp);
 	vattr_to_post_op_attr(vap, &resp->resfail.obj_attributes);
@@ -768,8 +781,9 @@ rfs3_readlink(READLINK3args *args, READLINK3res *resp, struct exportinfo *exi,
 
 	vp = nfs3_fhtovp(&args->symlink, exi);
 
-	DTRACE_NFSV3_4(op__readlink__start, struct svc_req *, req,
-	    cred_t *, cr, vnode_t *, vp, READLINK3args *, args);
+	DTRACE_NFSV3_5(op__readlink__start, struct svc_req *, req,
+	    cred_t *, cr, vnode_t *, vp, struct exportinfo *, exi,
+	    READLINK3args *, args);
 
 	if (vp == NULL) {
 		error = ESTALE;
@@ -889,8 +903,9 @@ rfs3_readlink(READLINK3args *args, READLINK3res *resp, struct exportinfo *exi,
 	vattr_to_post_op_attr(vap, &resp->resok.symlink_attributes);
 	resp->resok.data = name;
 
-	DTRACE_NFSV3_4(op__readlink__done, struct svc_req *, req,
-	    cred_t *, cr, vnode_t *, vp, READLINK3res *, resp);
+	DTRACE_NFSV3_5(op__readlink__done, struct svc_req *, req,
+	    cred_t *, cr, vnode_t *, vp, struct exportinfo *, exi,
+	    READLINK3res *, resp);
 	VN_RELE(vp);
 
 	if (name != data)
@@ -905,8 +920,9 @@ out:
 	} else
 		resp->status = puterrno3(error);
 out1:
-	DTRACE_NFSV3_4(op__readlink__done, struct svc_req *, req,
-	    cred_t *, cr, vnode_t *, vp, READLINK3res *, resp);
+	DTRACE_NFSV3_5(op__readlink__done, struct svc_req *, req,
+	    cred_t *, cr, vnode_t *, vp, struct exportinfo *, exi,
+	    READLINK3res *, resp);
 	if (vp != NULL)
 		VN_RELE(vp);
 	vattr_to_post_op_attr(vap, &resp->resfail.symlink_attributes);
@@ -956,8 +972,10 @@ rfs3_read(READ3args *args, READ3res *resp, struct exportinfo *exi,
 
 	vp = nfs3_fhtovp(&args->file, exi);
 
-	DTRACE_NFSV3_4(op__read__start, struct svc_req *, req,
-	    cred_t *, cr, vnode_t *, vp, READ3args *, args);
+	DTRACE_NFSV3_5(op__read__start, struct svc_req *, req,
+	    cred_t *, cr, vnode_t *, vp, struct exportinfo *, exi,
+	    READ3args *, args);
+
 
 	if (vp == NULL) {
 		error = ESTALE;
@@ -1212,8 +1230,9 @@ doio_read:
 	}
 
 done:
-	DTRACE_NFSV3_4(op__read__done, struct svc_req *, req,
-	    cred_t *, cr, vnode_t *, vp, READ3res *, resp);
+	DTRACE_NFSV3_5(op__read__done, struct svc_req *, req,
+	    cred_t *, cr, vnode_t *, vp, struct exportinfo *, exi,
+	    READ3res *, resp);
 
 	VN_RELE(vp);
 
@@ -1229,8 +1248,9 @@ out:
 	} else
 		resp->status = puterrno3(error);
 out1:
-	DTRACE_NFSV3_4(op__read__done, struct svc_req *, req,
-	    cred_t *, cr, vnode_t *, vp, READ3res *, resp);
+	DTRACE_NFSV3_5(op__read__done, struct svc_req *, req,
+	    cred_t *, cr, vnode_t *, vp, struct exportinfo *, exi,
+	    READ3res *, resp);
 
 	if (vp != NULL) {
 		if (need_rwunlock)
@@ -1296,8 +1316,9 @@ rfs3_write(WRITE3args *args, WRITE3res *resp, struct exportinfo *exi,
 
 	vp = nfs3_fhtovp(&args->file, exi);
 
-	DTRACE_NFSV3_4(op__write__start, struct svc_req *, req,
-	    cred_t *, cr, vnode_t *, vp, WRITE3args *, args);
+	DTRACE_NFSV3_5(op__write__start, struct svc_req *, req,
+	    cred_t *, cr, vnode_t *, vp, struct exportinfo *, exi,
+	    WRITE3args *, args);
 
 	if (vp == NULL) {
 		error = ESTALE;
@@ -1506,8 +1527,9 @@ err:
 err1:
 	vattr_to_wcc_data(bvap, avap, &resp->resfail.file_wcc);
 out:
-	DTRACE_NFSV3_4(op__write__done, struct svc_req *, req,
-	    cred_t *, cr, vnode_t *, vp, WRITE3res *, resp);
+	DTRACE_NFSV3_5(op__write__done, struct svc_req *, req,
+	    cred_t *, cr, vnode_t *, vp, struct exportinfo *, exi,
+	    WRITE3res *, resp);
 
 	if (vp != NULL) {
 		if (rwlock_ret != -1)
@@ -1552,8 +1574,9 @@ rfs3_create(CREATE3args *args, CREATE3res *resp, struct exportinfo *exi,
 
 	dvp = nfs3_fhtovp(&args->where.dir, exi);
 
-	DTRACE_NFSV3_4(op__create__start, struct svc_req *, req,
-	    cred_t *, cr, vnode_t *, dvp, CREATE3args *, args);
+	DTRACE_NFSV3_5(op__create__start, struct svc_req *, req,
+	    cred_t *, cr, vnode_t *, dvp, struct exportinfo *, exi,
+	    CREATE3args *, args);
 
 	if (dvp == NULL) {
 		error = ESTALE;
@@ -1852,8 +1875,9 @@ tryagain:
 	vattr_to_post_op_attr(vap, &resp->resok.obj_attributes);
 	vattr_to_wcc_data(dbvap, davap, &resp->resok.dir_wcc);
 
-	DTRACE_NFSV3_4(op__create__done, struct svc_req *, req,
-	    cred_t *, cr, vnode_t *, dvp, CREATE3res *, resp);
+	DTRACE_NFSV3_5(op__create__done, struct svc_req *, req,
+	    cred_t *, cr, vnode_t *, dvp, struct exportinfo *, exi,
+	    CREATE3res *, resp);
 
 	VN_RELE(dvp);
 	return;
@@ -1865,8 +1889,9 @@ out:
 	} else
 		resp->status = puterrno3(error);
 out1:
-	DTRACE_NFSV3_4(op__create__done, struct svc_req *, req,
-	    cred_t *, cr, vnode_t *, dvp, CREATE3res *, resp);
+	DTRACE_NFSV3_5(op__create__done, struct svc_req *, req,
+	    cred_t *, cr, vnode_t *, dvp, struct exportinfo *, exi,
+	    CREATE3res *, resp);
 
 	if (name != NULL && name != args->where.name)
 		kmem_free(name, MAXPATHLEN + 1);
@@ -1909,8 +1934,9 @@ rfs3_mkdir(MKDIR3args *args, MKDIR3res *resp, struct exportinfo *exi,
 
 	dvp = nfs3_fhtovp(&args->where.dir, exi);
 
-	DTRACE_NFSV3_4(op__mkdir__start, struct svc_req *, req,
-	    cred_t *, cr, vnode_t *, dvp, MKDIR3args *, args);
+	DTRACE_NFSV3_5(op__mkdir__start, struct svc_req *, req,
+	    cred_t *, cr, vnode_t *, dvp, struct exportinfo *, exi,
+	    MKDIR3args *, args);
 
 	if (dvp == NULL) {
 		error = ESTALE;
@@ -2009,8 +2035,9 @@ rfs3_mkdir(MKDIR3args *args, MKDIR3res *resp, struct exportinfo *exi,
 	vattr_to_post_op_attr(vap, &resp->resok.obj_attributes);
 	vattr_to_wcc_data(dbvap, davap, &resp->resok.dir_wcc);
 
-	DTRACE_NFSV3_4(op__mkdir__done, struct svc_req *, req,
-	    cred_t *, cr, vnode_t *, dvp, MKDIR3res *, resp);
+	DTRACE_NFSV3_5(op__mkdir__done, struct svc_req *, req,
+	    cred_t *, cr, vnode_t *, dvp, struct exportinfo *, exi,
+	    MKDIR3res *, resp);
 	VN_RELE(dvp);
 
 	return;
@@ -2022,8 +2049,9 @@ out:
 	} else
 		resp->status = puterrno3(error);
 out1:
-	DTRACE_NFSV3_4(op__mkdir__done, struct svc_req *, req,
-	    cred_t *, cr, vnode_t *, dvp, MKDIR3res *, resp);
+	DTRACE_NFSV3_5(op__mkdir__done, struct svc_req *, req,
+	    cred_t *, cr, vnode_t *, dvp, struct exportinfo *, exi,
+	    MKDIR3res *, resp);
 	if (dvp != NULL)
 		VN_RELE(dvp);
 	vattr_to_wcc_data(dbvap, davap, &resp->resfail.dir_wcc);
@@ -2058,8 +2086,9 @@ rfs3_symlink(SYMLINK3args *args, SYMLINK3res *resp, struct exportinfo *exi,
 
 	dvp = nfs3_fhtovp(&args->where.dir, exi);
 
-	DTRACE_NFSV3_4(op__symlink__start, struct svc_req *, req,
-	    cred_t *, cr, vnode_t *, dvp, SYMLINK3args *, args);
+	DTRACE_NFSV3_5(op__symlink__start, struct svc_req *, req,
+	    cred_t *, cr, vnode_t *, dvp, struct exportinfo *, exi,
+	    SYMLINK3args *, args);
 
 	if (dvp == NULL) {
 		error = ESTALE;
@@ -2196,8 +2225,9 @@ out:
 	if (symdata != NULL && symdata != args->symlink.symlink_data)
 		kmem_free(symdata, MAXPATHLEN + 1);
 
-	DTRACE_NFSV3_4(op__symlink__done, struct svc_req *, req,
-	    cred_t *, cr, vnode_t *, dvp, SYMLINK3res *, resp);
+	DTRACE_NFSV3_5(op__symlink__done, struct svc_req *, req,
+	    cred_t *, cr, vnode_t *, dvp, struct exportinfo *, exi,
+	    SYMLINK3res *, resp);
 
 	if (dvp != NULL)
 		VN_RELE(dvp);
@@ -2234,8 +2264,9 @@ rfs3_mknod(MKNOD3args *args, MKNOD3res *resp, struct exportinfo *exi,
 
 	dvp = nfs3_fhtovp(&args->where.dir, exi);
 
-	DTRACE_NFSV3_4(op__mknod__start, struct svc_req *, req,
-	    cred_t *, cr, vnode_t *, dvp, MKNOD3args *, args);
+	DTRACE_NFSV3_5(op__mknod__start, struct svc_req *, req,
+	    cred_t *, cr, vnode_t *, dvp, struct exportinfo *, exi,
+	    MKNOD3args *, args);
 
 	if (dvp == NULL) {
 		error = ESTALE;
@@ -2381,8 +2412,9 @@ rfs3_mknod(MKNOD3args *args, MKNOD3res *resp, struct exportinfo *exi,
 
 	vattr_to_post_op_attr(vap, &resp->resok.obj_attributes);
 	vattr_to_wcc_data(dbvap, davap, &resp->resok.dir_wcc);
-	DTRACE_NFSV3_4(op__mknod__done, struct svc_req *, req,
-	    cred_t *, cr, vnode_t *, dvp, MKNOD3res *, resp);
+	DTRACE_NFSV3_5(op__mknod__done, struct svc_req *, req,
+	    cred_t *, cr, vnode_t *, dvp, struct exportinfo *, exi,
+	    MKNOD3res *, resp);
 	VN_RELE(dvp);
 	return;
 
@@ -2393,8 +2425,9 @@ out:
 	} else
 		resp->status = puterrno3(error);
 out1:
-	DTRACE_NFSV3_4(op__mknod__done, struct svc_req *, req,
-	    cred_t *, cr, vnode_t *, dvp, MKNOD3res *, resp);
+	DTRACE_NFSV3_5(op__mknod__done, struct svc_req *, req,
+	    cred_t *, cr, vnode_t *, dvp, struct exportinfo *, exi,
+	    MKNOD3res *, resp);
 	if (dvp != NULL)
 		VN_RELE(dvp);
 	vattr_to_wcc_data(dbvap, davap, &resp->resfail.dir_wcc);
@@ -2426,8 +2459,9 @@ rfs3_remove(REMOVE3args *args, REMOVE3res *resp, struct exportinfo *exi,
 
 	vp = nfs3_fhtovp(&args->object.dir, exi);
 
-	DTRACE_NFSV3_4(op__remove__start, struct svc_req *, req,
-	    cred_t *, cr, vnode_t *, vp, REMOVE3args *, args);
+	DTRACE_NFSV3_5(op__remove__start, struct svc_req *, req,
+	    cred_t *, cr, vnode_t *, vp, struct exportinfo *, exi,
+	    REMOVE3args *, args);
 
 	if (vp == NULL) {
 		error = ESTALE;
@@ -2535,8 +2569,9 @@ err:
 err1:
 	vattr_to_wcc_data(bvap, avap, &resp->resfail.dir_wcc);
 out:
-	DTRACE_NFSV3_4(op__remove__done, struct svc_req *, req,
-	    cred_t *, cr, vnode_t *, vp, REMOVE3res *, resp);
+	DTRACE_NFSV3_5(op__remove__done, struct svc_req *, req,
+	    cred_t *, cr, vnode_t *, vp, struct exportinfo *, exi,
+	    REMOVE3res *, resp);
 
 	if (name != NULL && name != args->object.name)
 		kmem_free(name, MAXPATHLEN + 1);
@@ -2570,8 +2605,9 @@ rfs3_rmdir(RMDIR3args *args, RMDIR3res *resp, struct exportinfo *exi,
 
 	vp = nfs3_fhtovp(&args->object.dir, exi);
 
-	DTRACE_NFSV3_4(op__rmdir__start, struct svc_req *, req,
-	    cred_t *, cr, vnode_t *, vp, RMDIR3args *, args);
+	DTRACE_NFSV3_5(op__rmdir__start, struct svc_req *, req,
+	    cred_t *, cr, vnode_t *, vp, struct exportinfo *, exi,
+	    RMDIR3args *, args);
 
 	if (vp == NULL) {
 		error = ESTALE;
@@ -2665,8 +2701,9 @@ err:
 err1:
 	vattr_to_wcc_data(bvap, avap, &resp->resfail.dir_wcc);
 out:
-	DTRACE_NFSV3_4(op__rmdir__done, struct svc_req *, req,
-	    cred_t *, cr, vnode_t *, vp, RMDIR3res *, resp);
+	DTRACE_NFSV3_5(op__rmdir__done, struct svc_req *, req,
+	    cred_t *, cr, vnode_t *, vp, struct exportinfo *, exi,
+	    RMDIR3res *, resp);
 	if (vp != NULL)
 		VN_RELE(vp);
 
@@ -2711,8 +2748,9 @@ rfs3_rename(RENAME3args *args, RENAME3res *resp, struct exportinfo *exi,
 
 	fvp = nfs3_fhtovp(&args->from.dir, exi);
 
-	DTRACE_NFSV3_4(op__rename__start, struct svc_req *, req,
-	    cred_t *, cr, vnode_t *, fvp, RENAME3args *, args);
+	DTRACE_NFSV3_5(op__rename__start, struct svc_req *, req,
+	    cred_t *, cr, vnode_t *, fvp, struct exportinfo *, exi,
+	    RENAME3args *, args);
 
 	if (fvp == NULL) {
 		error = ESTALE;
@@ -2896,8 +2934,9 @@ out:
 	if (toname != NULL && toname != args->to.name)
 		kmem_free(toname, MAXPATHLEN + 1);
 
-	DTRACE_NFSV3_4(op__rename__done, struct svc_req *, req,
-	    cred_t *, cr, vnode_t *, fvp, RENAME3res *, resp);
+	DTRACE_NFSV3_5(op__rename__done, struct svc_req *, req,
+	    cred_t *, cr, vnode_t *, fvp, struct exportinfo *, exi,
+	    RENAME3res *, resp);
 	if (fvp != NULL)
 		VN_RELE(fvp);
 	if (tvp != NULL)
@@ -2937,8 +2976,9 @@ rfs3_link(LINK3args *args, LINK3res *resp, struct exportinfo *exi,
 
 	vp = nfs3_fhtovp(&args->file, exi);
 
-	DTRACE_NFSV3_4(op__link__start, struct svc_req *, req,
-	    cred_t *, cr, vnode_t *, vp, LINK3args *, args);
+	DTRACE_NFSV3_5(op__link__start, struct svc_req *, req,
+	    cred_t *, cr, vnode_t *, vp, struct exportinfo *, exi,
+	    LINK3args *, args);
 
 	if (vp == NULL) {
 		error = ESTALE;
@@ -3050,8 +3090,9 @@ rfs3_link(LINK3args *args, LINK3res *resp, struct exportinfo *exi,
 	vattr_to_post_op_attr(vap, &resp->resok.file_attributes);
 	vattr_to_wcc_data(bvap, avap, &resp->resok.linkdir_wcc);
 
-	DTRACE_NFSV3_4(op__link__done, struct svc_req *, req,
-	    cred_t *, cr, vnode_t *, vp, LINK3res *, resp);
+	DTRACE_NFSV3_5(op__link__done, struct svc_req *, req,
+	    cred_t *, cr, vnode_t *, vp, struct exportinfo *, exi,
+	    LINK3res *, resp);
 
 	VN_RELE(vp);
 
@@ -3067,8 +3108,9 @@ out1:
 	if (name != NULL && name != args->link.name)
 		kmem_free(name, MAXPATHLEN + 1);
 
-	DTRACE_NFSV3_4(op__link__done, struct svc_req *, req,
-	    cred_t *, cr, vnode_t *, vp, LINK3res *, resp);
+	DTRACE_NFSV3_5(op__link__done, struct svc_req *, req,
+	    cred_t *, cr, vnode_t *, vp, struct exportinfo *, exi,
+	    LINK3res *, resp);
 
 	if (vp != NULL)
 		VN_RELE(vp);
@@ -3136,8 +3178,9 @@ rfs3_readdir(READDIR3args *args, READDIR3res *resp, struct exportinfo *exi,
 
 	vp = nfs3_fhtovp(&args->dir, exi);
 
-	DTRACE_NFSV3_4(op__readdir__start, struct svc_req *, req,
-	    cred_t *, cr, vnode_t *, vp, READDIR3args *, args);
+	DTRACE_NFSV3_5(op__readdir__start, struct svc_req *, req,
+	    cred_t *, cr, vnode_t *, vp, struct exportinfo *, exi,
+	    READDIR3args *, args);
 
 	if (vp == NULL) {
 		error = ESTALE;
@@ -3301,8 +3344,9 @@ rfs3_readdir(READDIR3args *args, READDIR3res *resp, struct exportinfo *exi,
 	resp->resok.count = args->count;
 	resp->resok.freecount = count;
 
-	DTRACE_NFSV3_4(op__readdir__done, struct svc_req *, req,
-	    cred_t *, cr, vnode_t *, vp, READDIR3res *, resp);
+	DTRACE_NFSV3_5(op__readdir__done, struct svc_req *, req,
+	    cred_t *, cr, vnode_t *, vp, struct exportinfo *, exi,
+	    READDIR3res *, resp);
 
 	VN_RELE(vp);
 
@@ -3315,8 +3359,11 @@ out:
 	} else
 		resp->status = puterrno3(error);
 out1:
-	DTRACE_NFSV3_4(op__readdir__done, struct svc_req *, req,
-	    cred_t *, cr, vnode_t *, vp, READDIR3res *, resp);
+	vattr_to_post_op_attr(vap, &resp->resfail.dir_attributes);
+
+	DTRACE_NFSV3_5(op__readdir__done, struct svc_req *, req,
+	    cred_t *, cr, vnode_t *, vp, struct exportinfo *, exi,
+	    READDIR3res *, resp);
 
 	if (vp != NULL) {
 		VOP_RWUNLOCK(vp, V_WRITELOCK_FALSE, NULL);
@@ -3407,8 +3454,9 @@ rfs3_readdirplus(READDIRPLUS3args *args, READDIRPLUS3res *resp,
 
 	vp = nfs3_fhtovp(&args->dir, exi);
 
-	DTRACE_NFSV3_4(op__readdirplus__start, struct svc_req *, req,
-	    cred_t *, cr, vnode_t *, vp, READDIRPLUS3args *, args);
+	DTRACE_NFSV3_5(op__readdirplus__start, struct svc_req *, req,
+	    cred_t *, cr, vnode_t *, vp, struct exportinfo *, exi,
+	    READDIRPLUS3args *, args);
 
 	if (vp == NULL) {
 		error = ESTALE;
@@ -3690,11 +3738,9 @@ good:
 	resp->resok.count = args->dircount - ret;
 	resp->resok.maxcount = args->maxcount;
 
-	DTRACE_NFSV3_4(op__readdirplus__done, struct svc_req *, req,
-	    cred_t *, cr, vnode_t *, vp, READDIRPLUS3res *, resp);
-	if (ndata != data)
-		kmem_free(data, args->dircount);
-
+	DTRACE_NFSV3_5(op__readdirplus__done, struct svc_req *, req,
+	    cred_t *, cr, vnode_t *, vp, struct exportinfo *, exi,
+	    READDIRPLUS3res *, resp);
 
 	VN_RELE(vp);
 
@@ -3708,8 +3754,11 @@ out:
 		resp->status = puterrno3(error);
 	}
 out1:
-	DTRACE_NFSV3_4(op__readdirplus__done, struct svc_req *, req,
-	    cred_t *, cr, vnode_t *, vp, READDIRPLUS3res *, resp);
+	vattr_to_post_op_attr(vap, &resp->resfail.dir_attributes);
+
+	DTRACE_NFSV3_5(op__readdirplus__done, struct svc_req *, req,
+	    cred_t *, cr, vnode_t *, vp, struct exportinfo *, exi,
+	    READDIRPLUS3res *, resp);
 
 	if (vp != NULL) {
 		VOP_RWUNLOCK(vp, V_WRITELOCK_FALSE, NULL);
@@ -3755,8 +3804,9 @@ rfs3_fsstat(FSSTAT3args *args, FSSTAT3res *resp, struct exportinfo *exi,
 
 	vp = nfs3_fhtovp(&args->fsroot, exi);
 
-	DTRACE_NFSV3_4(op__fsstat__start, struct svc_req *, req,
-	    cred_t *, cr, vnode_t *, vp, FSSTAT3args *, args);
+	DTRACE_NFSV3_5(op__fsstat__start, struct svc_req *, req,
+	    cred_t *, cr, vnode_t *, vp, struct exportinfo *, exi,
+	    FSSTAT3args *, args);
 
 	if (vp == NULL) {
 		error = ESTALE;
@@ -3806,8 +3856,9 @@ rfs3_fsstat(FSSTAT3args *args, FSSTAT3res *resp, struct exportinfo *exi,
 	resp->resok.afiles = (size3)sb.f_favail;
 	resp->resok.invarsec = 0;
 
-	DTRACE_NFSV3_4(op__fsstat__done, struct svc_req *, req,
-	    cred_t *, cr, vnode_t *, vp, FSSTAT3res *, resp);
+	DTRACE_NFSV3_5(op__fsstat__done, struct svc_req *, req,
+	    cred_t *, cr, vnode_t *, vp, struct exportinfo *, exi,
+	    FSSTAT3res *, resp);
 	VN_RELE(vp);
 
 	return;
@@ -3819,8 +3870,9 @@ out:
 	} else
 		resp->status = puterrno3(error);
 out1:
-	DTRACE_NFSV3_4(op__fsstat__done, struct svc_req *, req,
-	    cred_t *, cr, vnode_t *, vp, FSSTAT3res *, resp);
+	DTRACE_NFSV3_5(op__fsstat__done, struct svc_req *, req,
+	    cred_t *, cr, vnode_t *, vp, struct exportinfo *, exi,
+	    FSSTAT3res *, resp);
 
 	if (vp != NULL)
 		VN_RELE(vp);
@@ -3848,8 +3900,9 @@ rfs3_fsinfo(FSINFO3args *args, FSINFO3res *resp, struct exportinfo *exi,
 
 	vp = nfs3_fhtovp(&args->fsroot, exi);
 
-	DTRACE_NFSV3_4(op__fsinfo__start, struct svc_req *, req,
-	    cred_t *, cr, vnode_t *, vp, FSINFO3args *, args);
+	DTRACE_NFSV3_5(op__fsinfo__start, struct svc_req *, req,
+	    cred_t *, cr, vnode_t *, vp, struct exportinfo *, exi,
+	    FSINFO3args *, args);
 
 	if (vp == NULL) {
 		if (curthread->t_flag & T_WOULDBLOCK) {
@@ -3923,16 +3976,18 @@ rfs3_fsinfo(FSINFO3args *args, FSINFO3res *resp, struct exportinfo *exi,
 	resp->resok.properties = FSF3_LINK | FSF3_SYMLINK |
 	    FSF3_HOMOGENEOUS | FSF3_CANSETTIME;
 
-	DTRACE_NFSV3_4(op__fsinfo__done, struct svc_req *, req,
-	    cred_t *, cr, vnode_t *, vp, FSINFO3res *, resp);
+	DTRACE_NFSV3_5(op__fsinfo__done, struct svc_req *, req,
+	    cred_t *, cr, vnode_t *, vp, struct exportinfo *, exi,
+	    FSINFO3res *, resp);
 
 	VN_RELE(vp);
 
 	return;
 
 out:
-	DTRACE_NFSV3_4(op__fsinfo__done, struct svc_req *, req,
-	    cred_t *, cr, vnode_t *, NULL, FSINFO3res *, resp);
+	DTRACE_NFSV3_5(op__fsinfo__done, struct svc_req *, req,
+	    cred_t *, cr, vnode_t *, NULL, struct exportinfo *, exi,
+	    FSINFO3res *, resp);
 	if (vp != NULL)
 		VN_RELE(vp);
 }
@@ -3958,8 +4013,9 @@ rfs3_pathconf(PATHCONF3args *args, PATHCONF3res *resp, struct exportinfo *exi,
 
 	vp = nfs3_fhtovp(&args->object, exi);
 
-	DTRACE_NFSV3_4(op__pathconf__start, struct svc_req *, req,
-	    cred_t *, cr, vnode_t *, vp, PATHCONF3args *, args);
+	DTRACE_NFSV3_5(op__pathconf__start, struct svc_req *, req,
+	    cred_t *, cr, vnode_t *, vp, struct exportinfo *, exi,
+	    PATHCONF3args *, args);
 
 	if (vp == NULL) {
 		error = ESTALE;
@@ -4015,8 +4071,9 @@ rfs3_pathconf(PATHCONF3args *args, PATHCONF3res *resp, struct exportinfo *exi,
 	vattr_to_post_op_attr(vap, &resp->resok.obj_attributes);
 	resp->resok.info.case_insensitive = FALSE;
 	resp->resok.info.case_preserving = TRUE;
-	DTRACE_NFSV3_4(op__pathconf__done, struct svc_req *, req,
-	    cred_t *, cr, vnode_t *, vp, PATHCONF3res *, resp);
+	DTRACE_NFSV3_5(op__pathconf__done, struct svc_req *, req,
+	    cred_t *, cr, vnode_t *, vp, struct exportinfo *, exi,
+	    PATHCONF3res *, resp);
 	VN_RELE(vp);
 	return;
 
@@ -4027,8 +4084,9 @@ out:
 	} else
 		resp->status = puterrno3(error);
 out1:
-	DTRACE_NFSV3_4(op__pathconf__done, struct svc_req *, req,
-	    cred_t *, cr, vnode_t *, vp, PATHCONF3res *, resp);
+	DTRACE_NFSV3_5(op__pathconf__done, struct svc_req *, req,
+	    cred_t *, cr, vnode_t *, vp, struct exportinfo *, exi,
+	    PATHCONF3res *, resp);
 	if (vp != NULL)
 		VN_RELE(vp);
 	vattr_to_post_op_attr(vap, &resp->resfail.obj_attributes);
@@ -4058,8 +4116,9 @@ rfs3_commit(COMMIT3args *args, COMMIT3res *resp, struct exportinfo *exi,
 
 	vp = nfs3_fhtovp(&args->file, exi);
 
-	DTRACE_NFSV3_4(op__commit__start, struct svc_req *, req,
-	    cred_t *, cr, vnode_t *, vp, COMMIT3args *, args);
+	DTRACE_NFSV3_5(op__commit__start, struct svc_req *, req,
+	    cred_t *, cr, vnode_t *, vp, struct exportinfo *, exi,
+	    COMMIT3args *, args);
 
 	if (vp == NULL) {
 		error = ESTALE;
@@ -4121,8 +4180,9 @@ rfs3_commit(COMMIT3args *args, COMMIT3res *resp, struct exportinfo *exi,
 	vattr_to_wcc_data(bvap, avap, &resp->resok.file_wcc);
 	resp->resok.verf = ns->write3verf;
 
-	DTRACE_NFSV3_4(op__commit__done, struct svc_req *, req,
-	    cred_t *, cr, vnode_t *, vp, COMMIT3res *, resp);
+	DTRACE_NFSV3_5(op__commit__done, struct svc_req *, req,
+	    cred_t *, cr, vnode_t *, vp, struct exportinfo *, exi,
+	    COMMIT3res *, resp);
 
 	VN_RELE(vp);
 
@@ -4135,8 +4195,9 @@ out:
 	} else
 		resp->status = puterrno3(error);
 out1:
-	DTRACE_NFSV3_4(op__commit__done, struct svc_req *, req,
-	    cred_t *, cr, vnode_t *, vp, COMMIT3res *, resp);
+	DTRACE_NFSV3_5(op__commit__done, struct svc_req *, req,
+	    cred_t *, cr, vnode_t *, vp, struct exportinfo *, exi,
+	    COMMIT3res *, resp);
 
 	if (vp != NULL)
 		VN_RELE(vp);
diff --git a/usr/src/uts/common/fs/nfs/nfs_server.c b/usr/src/uts/common/fs/nfs/nfs_server.c
index c6928ba546..151c1c6aff 100644
--- a/usr/src/uts/common/fs/nfs/nfs_server.c
+++ b/usr/src/uts/common/fs/nfs/nfs_server.c
@@ -631,10 +631,10 @@ void
 rpc_null_v3(caddr_t *argp, caddr_t *resp, struct exportinfo *exi,
     struct svc_req *req, cred_t *cr, bool_t ro)
 {
-	DTRACE_NFSV3_3(op__null__start, struct svc_req *, req,
-	    cred_t *, cr, vnode_t *, NULL);
-	DTRACE_NFSV3_3(op__null__done, struct svc_req *, req,
-	    cred_t *, cr, vnode_t *, NULL);
+	DTRACE_NFSV3_4(op__null__start, struct svc_req *, req,
+	    cred_t *, cr, vnode_t *, NULL, struct exportinfo *, exi);
+	DTRACE_NFSV3_4(op__null__done, struct svc_req *, req,
+	    cred_t *, cr, vnode_t *, NULL, struct exportinfo *, exi);
 }
 
 /* ARGSUSED */
diff --git a/usr/src/uts/common/sys/sdt.h b/usr/src/uts/common/sys/sdt.h
index 1535734a5c..d0f423ca8b 100644
--- a/usr/src/uts/common/sys/sdt.h
+++ b/usr/src/uts/common/sys/sdt.h
@@ -21,7 +21,7 @@
 /*
  * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
  * Copyright (c) 2013 by Delphix. All rights reserved.
- * Copyright 2017 Nexenta Systems, Inc.  All rights reserved.
+ * Copyright 2018 Nexenta Systems, Inc.  All rights reserved.
  */
 
 #ifndef _SYS_SDT_H
@@ -231,11 +231,17 @@ extern "C" {
     type3, arg3)							\
 	DTRACE_PROBE3(__nfsv3_##name, type1, arg1, type2, arg2,		\
 	    type3, arg3);
+
 #define	DTRACE_NFSV3_4(name, type1, arg1, type2, arg2,			\
     type3, arg3, type4, arg4)						\
 	DTRACE_PROBE4(__nfsv3_##name, type1, arg1, type2, arg2,		\
 	    type3, arg3, type4, arg4);
 
+#define	DTRACE_NFSV3_5(name, type1, arg1, type2, arg2,			\
+    type3, arg3, type4, arg4, type5, arg5)				\
+	DTRACE_PROBE5(__nfsv3_##name, type1, arg1, type2, arg2,		\
+	    type3, arg3, type4, arg4, type5, arg5);
+
 #define	DTRACE_NFSV4_1(name, type1, arg1) \
 	DTRACE_PROBE1(__nfsv4_##name, type1, arg1);
 
-- 
2.20.1 (Apple Git-117)

