1*0dfe541eSEvan Layton #!/usr/sbin/dtrace -s
2*0dfe541eSEvan Layton 
3*0dfe541eSEvan Layton /*
4*0dfe541eSEvan Layton  * This file and its contents are supplied under the terms of the
5*0dfe541eSEvan Layton  * Common Development and Distribution License ("CDDL"), version 1.0.
6*0dfe541eSEvan Layton  * You may only use this file in accordance with the terms of version
7*0dfe541eSEvan Layton  * 1.0 of the CDDL.
8*0dfe541eSEvan Layton  *
9*0dfe541eSEvan Layton  * A full copy of the text of the CDDL should have accompanied this
10*0dfe541eSEvan Layton  * source.  A copy of the CDDL is also available via the Internet at
11*0dfe541eSEvan Layton  * http://www.illumos.org/license/CDDL.
12*0dfe541eSEvan Layton  */
13*0dfe541eSEvan Layton 
14*0dfe541eSEvan Layton /*
15*0dfe541eSEvan Layton  * Copyright 2018 Nexenta Systems, Inc.  All rights reserved.
16*0dfe541eSEvan Layton  */
17*0dfe541eSEvan Layton 
18*0dfe541eSEvan Layton /*
19*0dfe541eSEvan Layton  * Print input and output values for each NFSv3 andf NFSv4 operation,
20*0dfe541eSEvan Layton  * optionally for a specified client, share and zone.
21*0dfe541eSEvan Layton  *
22*0dfe541eSEvan Layton  * Usage: nfs-trace.d [<client ip>|all [<share path>|all] [<zone id>]]]
23*0dfe541eSEvan Layton  *
24*0dfe541eSEvan Layton  * example: nfs_trace.d 192.168.123.1 /mypool/fs1  0
25*0dfe541eSEvan Layton  *
26*0dfe541eSEvan Layton  * It is valid to specify <client ip> or <share path> as "all"
27*0dfe541eSEvan Layton  * to quantize data for all clients and/or all shares.
28*0dfe541eSEvan Layton  * Omitting <zone id> will quantize data for all zones.
29*0dfe541eSEvan Layton  */
30*0dfe541eSEvan Layton 
31*0dfe541eSEvan Layton /*
32*0dfe541eSEvan Layton  * Unfortunately, trying to write this script using wildcards, for example:
33*0dfe541eSEvan Layton  *	nfsv3:::op-*-start {}
34*0dfe541eSEvan Layton  *	nfsv3:::op-*-done {}
35*0dfe541eSEvan Layton  * prints the operation-specific args[2] structure as the incorrect type.
36*0dfe541eSEvan Layton  * Until this is resolved it is necessary to explicitly list each operation.
37*0dfe541eSEvan Layton  *
38*0dfe541eSEvan Layton  * See nfs-time.d for an example of using the wildcard format when there are
39*0dfe541eSEvan Layton  * no operation-specific args (args[2]) being traced.
40*0dfe541eSEvan Layton  */
41*0dfe541eSEvan Layton 
42*0dfe541eSEvan Layton #pragma D option flowindent
43*0dfe541eSEvan Layton #pragma D option defaultargs
44*0dfe541eSEvan Layton 
45*0dfe541eSEvan Layton dtrace:::BEGIN
46*0dfe541eSEvan Layton {
47*0dfe541eSEvan Layton 	all_clients = (($$1 == NULL) || ($$1 == "all")) ? 1 : 0;
48*0dfe541eSEvan Layton 	all_shares = (($$2 == NULL) || ($$2 == "all")) ? 1 : 0;
49*0dfe541eSEvan Layton 	all_zones = ($$3 == NULL) ? 1 : 0;
50*0dfe541eSEvan Layton 
51*0dfe541eSEvan Layton 	client = $$1;
52*0dfe541eSEvan Layton 	share = $$2;
53*0dfe541eSEvan Layton 	zoneid = $3;
54*0dfe541eSEvan Layton 
55*0dfe541eSEvan Layton 	printf("%Y - client=%s share=%s zone=%s)\n", walltimestamp,
56*0dfe541eSEvan Layton 	    (all_clients) ? "all" : client,
57*0dfe541eSEvan Layton 	    (all_shares) ? "all" : share,
58*0dfe541eSEvan Layton 	    (all_zones) ? "all" : $$3);
59*0dfe541eSEvan Layton }
60*0dfe541eSEvan Layton 
61*0dfe541eSEvan Layton nfsv3:::op-getattr-start,
62*0dfe541eSEvan Layton nfsv3:::op-setattr-start,
63*0dfe541eSEvan Layton nfsv3:::op-lookup-start,
64*0dfe541eSEvan Layton nfsv3:::op-access-start,
65*0dfe541eSEvan Layton nfsv3:::op-commit-start,
66*0dfe541eSEvan Layton nfsv3:::op-create-start,
67*0dfe541eSEvan Layton nfsv3:::op-fsinfo-start,
68*0dfe541eSEvan Layton nfsv3:::op-fsstat-start,
69*0dfe541eSEvan Layton nfsv3:::op-link-start,
70*0dfe541eSEvan Layton nfsv3:::op-mkdir-start,
71*0dfe541eSEvan Layton nfsv3:::op-mknod-start,
72*0dfe541eSEvan Layton nfsv3:::op-pathconf-start,
73*0dfe541eSEvan Layton nfsv3:::op-read-start,
74*0dfe541eSEvan Layton nfsv3:::op-readdir-start,
75*0dfe541eSEvan Layton nfsv3:::op-readdirplus-start,
76*0dfe541eSEvan Layton nfsv3:::op-readlink-start,
77*0dfe541eSEvan Layton nfsv3:::op-remove-start,
78*0dfe541eSEvan Layton nfsv3:::op-rename-start,
79*0dfe541eSEvan Layton nfsv3:::op-rmdir-start,
80*0dfe541eSEvan Layton nfsv3:::op-symlink-start,
81*0dfe541eSEvan Layton nfsv3:::op-write-start
82*0dfe541eSEvan Layton / ((all_clients) || (args[0]->ci_remote == client)) &&
83*0dfe541eSEvan Layton    ((all_shares) || (args[1]->noi_shrpath == share)) &&
84*0dfe541eSEvan Layton    ((all_zones) || (args[1]->noi_zoneid == zoneid)) /
85*0dfe541eSEvan Layton {
86*0dfe541eSEvan Layton 	printf("\n");
87*0dfe541eSEvan Layton 	print(*args[0]);
88*0dfe541eSEvan Layton 	printf("\n");
89*0dfe541eSEvan Layton 	print(*args[1]);
90*0dfe541eSEvan Layton 	printf("\n");
91*0dfe541eSEvan Layton 	print(*args[2]);
92*0dfe541eSEvan Layton 	printf("\n");
93*0dfe541eSEvan Layton }
94*0dfe541eSEvan Layton 
95*0dfe541eSEvan Layton nfsv3:::op-getattr-done,
96*0dfe541eSEvan Layton nfsv3:::op-setattr-done,
97*0dfe541eSEvan Layton nfsv3:::op-lookup-done,
98*0dfe541eSEvan Layton nfsv3:::op-access-done,
99*0dfe541eSEvan Layton nfsv3:::op-commit-done,
100*0dfe541eSEvan Layton nfsv3:::op-create-done,
101*0dfe541eSEvan Layton nfsv3:::op-fsinfo-done,
102*0dfe541eSEvan Layton nfsv3:::op-fsstat-done,
103*0dfe541eSEvan Layton nfsv3:::op-link-done,
104*0dfe541eSEvan Layton nfsv3:::op-mkdir-done,
105*0dfe541eSEvan Layton nfsv3:::op-mknod-done,
106*0dfe541eSEvan Layton nfsv3:::op-pathconf-done,
107*0dfe541eSEvan Layton nfsv3:::op-read-done,
108*0dfe541eSEvan Layton nfsv3:::op-readdir-done,
109*0dfe541eSEvan Layton nfsv3:::op-readdirplus-done,
110*0dfe541eSEvan Layton nfsv3:::op-readlink-done,
111*0dfe541eSEvan Layton nfsv3:::op-remove-done,
112*0dfe541eSEvan Layton nfsv3:::op-rename-done,
113*0dfe541eSEvan Layton nfsv3:::op-rmdir-done,
114*0dfe541eSEvan Layton nfsv3:::op-symlink-done,
115*0dfe541eSEvan Layton nfsv3:::op-write-done
116*0dfe541eSEvan Layton / ((all_clients) || (args[0]->ci_remote == client)) &&
117*0dfe541eSEvan Layton    ((all_shares) || (args[1]->noi_shrpath == share)) &&
118*0dfe541eSEvan Layton    ((all_zones) || (args[1]->noi_zoneid == zoneid)) /
119*0dfe541eSEvan Layton {
120*0dfe541eSEvan Layton 	/*
121*0dfe541eSEvan Layton 	printf("\n");
122*0dfe541eSEvan Layton 	print(*args[0]);
123*0dfe541eSEvan Layton 	printf("\n");
124*0dfe541eSEvan Layton 	print(*args[1]);
125*0dfe541eSEvan Layton 	*/
126*0dfe541eSEvan Layton 	printf("\n");
127*0dfe541eSEvan Layton 	print(*args[2]);
128*0dfe541eSEvan Layton 	printf("\n");
129*0dfe541eSEvan Layton }
130*0dfe541eSEvan Layton 
131*0dfe541eSEvan Layton nfsv4:::op-access-start,
132*0dfe541eSEvan Layton nfsv4:::op-close-start,
133*0dfe541eSEvan Layton nfsv4:::op-commit-start,
134*0dfe541eSEvan Layton nfsv4:::op-create-start,
135*0dfe541eSEvan Layton nfsv4:::op-delegpurge-start,
136*0dfe541eSEvan Layton nfsv4:::op-delegreturn-start,
137*0dfe541eSEvan Layton nfsv4:::op-getattr-start,
138*0dfe541eSEvan Layton nfsv4:::op-link-start,
139*0dfe541eSEvan Layton nfsv4:::op-lock-start,
140*0dfe541eSEvan Layton nfsv4:::op-lockt-start,
141*0dfe541eSEvan Layton nfsv4:::op-locku-start,
142*0dfe541eSEvan Layton nfsv4:::op-lookup-start,
143*0dfe541eSEvan Layton nfsv4:::op-nverify-start,
144*0dfe541eSEvan Layton nfsv4:::op-open-start,
145*0dfe541eSEvan Layton nfsv4:::op-open-confirm-start,
146*0dfe541eSEvan Layton nfsv4:::op-open-downgrade-start,
147*0dfe541eSEvan Layton nfsv4:::op-openattr-start,
148*0dfe541eSEvan Layton nfsv4:::op-putfh-start,
149*0dfe541eSEvan Layton nfsv4:::op-read-start,
150*0dfe541eSEvan Layton nfsv4:::op-readdir-start,
151*0dfe541eSEvan Layton nfsv4:::op-release-lockowner-start,
152*0dfe541eSEvan Layton nfsv4:::op-remove-start,
153*0dfe541eSEvan Layton nfsv4:::op-rename-start,
154*0dfe541eSEvan Layton nfsv4:::op-renew-start,
155*0dfe541eSEvan Layton nfsv4:::op-secinfo-start,
156*0dfe541eSEvan Layton nfsv4:::op-setattr-start,
157*0dfe541eSEvan Layton nfsv4:::op-setclientid-start,
158*0dfe541eSEvan Layton nfsv4:::op-setclientid-confirm-start,
159*0dfe541eSEvan Layton nfsv4:::op-verify-start,
160*0dfe541eSEvan Layton nfsv4:::op-write-start
161*0dfe541eSEvan Layton / ((all_clients) || (args[0]->ci_remote == client)) &&
162*0dfe541eSEvan Layton    ((all_shares) || (args[1]->noi_shrpath == share)) &&
163*0dfe541eSEvan Layton    ((all_zones) || (args[1]->noi_zoneid == zoneid)) /
164*0dfe541eSEvan Layton {
165*0dfe541eSEvan Layton 	printf("\n");
166*0dfe541eSEvan Layton 	print(*args[0]);
167*0dfe541eSEvan Layton 	printf("\n");
168*0dfe541eSEvan Layton 	print(*args[1]);
169*0dfe541eSEvan Layton 	printf("\n");
170*0dfe541eSEvan Layton 	print(*args[2]);
171*0dfe541eSEvan Layton 	printf("\n");
172*0dfe541eSEvan Layton }
173*0dfe541eSEvan Layton 
174*0dfe541eSEvan Layton /* These operations do not have args[2] */
175*0dfe541eSEvan Layton nfsv4:::op-getfh-start,
176*0dfe541eSEvan Layton nfsv4:::op-lookupp-start,
177*0dfe541eSEvan Layton nfsv4:::op-putpubfh-start,
178*0dfe541eSEvan Layton nfsv4:::op-putrootfh-start,
179*0dfe541eSEvan Layton nfsv4:::op-readlink-start,
180*0dfe541eSEvan Layton nfsv4:::op-restorefh-start,
181*0dfe541eSEvan Layton nfsv4:::op-savefh-start
182*0dfe541eSEvan Layton / ((all_clients) || (args[0]->ci_remote == client)) &&
183*0dfe541eSEvan Layton    ((all_shares) || (args[1]->noi_shrpath == share)) &&
184*0dfe541eSEvan Layton    ((all_zones) || (args[1]->noi_zoneid == zoneid)) /
185*0dfe541eSEvan Layton {
186*0dfe541eSEvan Layton 	printf("\n");
187*0dfe541eSEvan Layton 	print(*args[0]);
188*0dfe541eSEvan Layton 	printf("\n");
189*0dfe541eSEvan Layton 	print(*args[1]);
190*0dfe541eSEvan Layton 	printf("\n");
191*0dfe541eSEvan Layton }
192*0dfe541eSEvan Layton 
193*0dfe541eSEvan Layton 
194*0dfe541eSEvan Layton nfsv4:::op-access-done,
195*0dfe541eSEvan Layton nfsv4:::op-close-done,
196*0dfe541eSEvan Layton nfsv4:::op-commit-done,
197*0dfe541eSEvan Layton nfsv4:::op-create-done,
198*0dfe541eSEvan Layton nfsv4:::op-delegpurge-done,
199*0dfe541eSEvan Layton nfsv4:::op-delegreturn-done,
200*0dfe541eSEvan Layton nfsv4:::op-getattr-done,
201*0dfe541eSEvan Layton nfsv4:::op-getfh-done,
202*0dfe541eSEvan Layton nfsv4:::op-link-done,
203*0dfe541eSEvan Layton nfsv4:::op-lock-done,
204*0dfe541eSEvan Layton nfsv4:::op-lockt-done,
205*0dfe541eSEvan Layton nfsv4:::op-locku-done,
206*0dfe541eSEvan Layton nfsv4:::op-lookup-done,
207*0dfe541eSEvan Layton nfsv4:::op-lookupp-done,
208*0dfe541eSEvan Layton nfsv4:::op-nverify-done,
209*0dfe541eSEvan Layton nfsv4:::op-open-done,
210*0dfe541eSEvan Layton nfsv4:::op-open-confirm-done,
211*0dfe541eSEvan Layton nfsv4:::op-open-downgrade-done,
212*0dfe541eSEvan Layton nfsv4:::op-openattr-done,
213*0dfe541eSEvan Layton nfsv4:::op-putfh-done,
214*0dfe541eSEvan Layton nfsv4:::op-putpubfh-done,
215*0dfe541eSEvan Layton nfsv4:::op-putrootfh-done,
216*0dfe541eSEvan Layton nfsv4:::op-read-done,
217*0dfe541eSEvan Layton nfsv4:::op-readdir-done,
218*0dfe541eSEvan Layton nfsv4:::op-readlink-done,
219*0dfe541eSEvan Layton nfsv4:::op-release-lockowner-done,
220*0dfe541eSEvan Layton nfsv4:::op-remove-done,
221*0dfe541eSEvan Layton nfsv4:::op-rename-done,
222*0dfe541eSEvan Layton nfsv4:::op-renew-done,
223*0dfe541eSEvan Layton nfsv4:::op-restorefh-done,
224*0dfe541eSEvan Layton nfsv4:::op-savefh-done,
225*0dfe541eSEvan Layton nfsv4:::op-secinfo-done,
226*0dfe541eSEvan Layton nfsv4:::op-setattr-done,
227*0dfe541eSEvan Layton nfsv4:::op-setclientid-done,
228*0dfe541eSEvan Layton nfsv4:::op-setclientid-confirm-done,
229*0dfe541eSEvan Layton nfsv4:::op-verify-done,
230*0dfe541eSEvan Layton nfsv4:::op-write-done
231*0dfe541eSEvan Layton / ((all_clients) || (args[0]->ci_remote == client)) &&
232*0dfe541eSEvan Layton    ((all_shares) || (args[1]->noi_shrpath == share)) &&
233*0dfe541eSEvan Layton    ((all_zones) || (args[1]->noi_zoneid == zoneid)) /
234*0dfe541eSEvan Layton {
235*0dfe541eSEvan Layton 	/*
236*0dfe541eSEvan Layton 	printf("\n");
237*0dfe541eSEvan Layton 	print(*args[0]);
238*0dfe541eSEvan Layton 	printf("\n");
239*0dfe541eSEvan Layton 	print(*args[1]);
240*0dfe541eSEvan Layton 	*/
241*0dfe541eSEvan Layton 	printf("\n");
242*0dfe541eSEvan Layton 	print(*args[2]);
243*0dfe541eSEvan Layton 	printf("\n");
244*0dfe541eSEvan Layton }
245*0dfe541eSEvan Layton 
246*0dfe541eSEvan Layton dtrace:::END
247*0dfe541eSEvan Layton {
248*0dfe541eSEvan Layton }
249