xref: /openbmc/linux/fs/nfs/nfs4trace.h (revision f628d462)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
2c6d01c6fSTrond Myklebust /*
3c6d01c6fSTrond Myklebust  * Copyright (c) 2013 Trond Myklebust <Trond.Myklebust@netapp.com>
4c6d01c6fSTrond Myklebust  */
5c6d01c6fSTrond Myklebust #undef TRACE_SYSTEM
6c6d01c6fSTrond Myklebust #define TRACE_SYSTEM nfs4
7c6d01c6fSTrond Myklebust 
8c6d01c6fSTrond Myklebust #if !defined(_TRACE_NFS4_H) || defined(TRACE_HEADER_MULTI_READ)
9c6d01c6fSTrond Myklebust #define _TRACE_NFS4_H
10c6d01c6fSTrond Myklebust 
11c6d01c6fSTrond Myklebust #include <linux/tracepoint.h>
12b4776a34SChuck Lever #include <trace/events/sunrpc_base.h>
13c6d01c6fSTrond Myklebust 
149d2d48bbSChuck Lever #include <trace/events/fs.h>
158791545eSChuck Lever #include <trace/events/nfs.h>
16c6d01c6fSTrond Myklebust 
17b5f875a9STrond Myklebust #define show_nfs_fattr_flags(valid) \
18b5f875a9STrond Myklebust 	__print_flags((unsigned long)valid, "|", \
19b5f875a9STrond Myklebust 		{ NFS_ATTR_FATTR_TYPE, "TYPE" }, \
20b5f875a9STrond Myklebust 		{ NFS_ATTR_FATTR_MODE, "MODE" }, \
21b5f875a9STrond Myklebust 		{ NFS_ATTR_FATTR_NLINK, "NLINK" }, \
22b5f875a9STrond Myklebust 		{ NFS_ATTR_FATTR_OWNER, "OWNER" }, \
23b5f875a9STrond Myklebust 		{ NFS_ATTR_FATTR_GROUP, "GROUP" }, \
24b5f875a9STrond Myklebust 		{ NFS_ATTR_FATTR_RDEV, "RDEV" }, \
25b5f875a9STrond Myklebust 		{ NFS_ATTR_FATTR_SIZE, "SIZE" }, \
26b5f875a9STrond Myklebust 		{ NFS_ATTR_FATTR_FSID, "FSID" }, \
27b5f875a9STrond Myklebust 		{ NFS_ATTR_FATTR_FILEID, "FILEID" }, \
28b5f875a9STrond Myklebust 		{ NFS_ATTR_FATTR_ATIME, "ATIME" }, \
29b5f875a9STrond Myklebust 		{ NFS_ATTR_FATTR_MTIME, "MTIME" }, \
30b5f875a9STrond Myklebust 		{ NFS_ATTR_FATTR_CTIME, "CTIME" }, \
31b5f875a9STrond Myklebust 		{ NFS_ATTR_FATTR_CHANGE, "CHANGE" }, \
32b5f875a9STrond Myklebust 		{ NFS_ATTR_FATTR_OWNER_NAME, "OWNER_NAME" }, \
33b5f875a9STrond Myklebust 		{ NFS_ATTR_FATTR_GROUP_NAME, "GROUP_NAME" })
34b5f875a9STrond Myklebust 
35c6d01c6fSTrond Myklebust DECLARE_EVENT_CLASS(nfs4_clientid_event,
36c6d01c6fSTrond Myklebust 		TP_PROTO(
37c6d01c6fSTrond Myklebust 			const struct nfs_client *clp,
38c6d01c6fSTrond Myklebust 			int error
39c6d01c6fSTrond Myklebust 		),
40c6d01c6fSTrond Myklebust 
41c6d01c6fSTrond Myklebust 		TP_ARGS(clp, error),
42c6d01c6fSTrond Myklebust 
43c6d01c6fSTrond Myklebust 		TP_STRUCT__entry(
443944369dSAnna Schumaker 			__string(dstaddr, clp->cl_hostname)
4596650e2eSChuck Lever 			__field(unsigned long, error)
46c6d01c6fSTrond Myklebust 		),
47c6d01c6fSTrond Myklebust 
48c6d01c6fSTrond Myklebust 		TP_fast_assign(
49118b6292STrond Myklebust 			__entry->error = error < 0 ? -error : 0;
503944369dSAnna Schumaker 			__assign_str(dstaddr, clp->cl_hostname);
51c6d01c6fSTrond Myklebust 		),
52c6d01c6fSTrond Myklebust 
53c6d01c6fSTrond Myklebust 		TP_printk(
5496650e2eSChuck Lever 			"error=%ld (%s) dstaddr=%s",
5596650e2eSChuck Lever 			-__entry->error,
568791545eSChuck Lever 			show_nfs4_status(__entry->error),
57c6d01c6fSTrond Myklebust 			__get_str(dstaddr)
58c6d01c6fSTrond Myklebust 		)
59c6d01c6fSTrond Myklebust );
60c6d01c6fSTrond Myklebust #define DEFINE_NFS4_CLIENTID_EVENT(name) \
61c6d01c6fSTrond Myklebust 	DEFINE_EVENT(nfs4_clientid_event, name,	 \
62c6d01c6fSTrond Myklebust 			TP_PROTO( \
63c6d01c6fSTrond Myklebust 				const struct nfs_client *clp, \
64c6d01c6fSTrond Myklebust 				int error \
65c6d01c6fSTrond Myklebust 			), \
66c6d01c6fSTrond Myklebust 			TP_ARGS(clp, error))
67c6d01c6fSTrond Myklebust DEFINE_NFS4_CLIENTID_EVENT(nfs4_setclientid);
68c6d01c6fSTrond Myklebust DEFINE_NFS4_CLIENTID_EVENT(nfs4_setclientid_confirm);
69c6d01c6fSTrond Myklebust DEFINE_NFS4_CLIENTID_EVENT(nfs4_renew);
70c6d01c6fSTrond Myklebust DEFINE_NFS4_CLIENTID_EVENT(nfs4_renew_async);
71c6d01c6fSTrond Myklebust #ifdef CONFIG_NFS_V4_1
72c6d01c6fSTrond Myklebust DEFINE_NFS4_CLIENTID_EVENT(nfs4_exchange_id);
73c6d01c6fSTrond Myklebust DEFINE_NFS4_CLIENTID_EVENT(nfs4_create_session);
74c6d01c6fSTrond Myklebust DEFINE_NFS4_CLIENTID_EVENT(nfs4_destroy_session);
75c6d01c6fSTrond Myklebust DEFINE_NFS4_CLIENTID_EVENT(nfs4_destroy_clientid);
76c6d01c6fSTrond Myklebust DEFINE_NFS4_CLIENTID_EVENT(nfs4_bind_conn_to_session);
77c6d01c6fSTrond Myklebust DEFINE_NFS4_CLIENTID_EVENT(nfs4_sequence);
78c6d01c6fSTrond Myklebust DEFINE_NFS4_CLIENTID_EVENT(nfs4_reclaim_complete);
792f92ae34STrond Myklebust 
802f92ae34STrond Myklebust TRACE_EVENT(nfs4_sequence_done,
812f92ae34STrond Myklebust 		TP_PROTO(
822f92ae34STrond Myklebust 			const struct nfs4_session *session,
832f92ae34STrond Myklebust 			const struct nfs4_sequence_res *res
842f92ae34STrond Myklebust 		),
852f92ae34STrond Myklebust 		TP_ARGS(session, res),
862f92ae34STrond Myklebust 
872f92ae34STrond Myklebust 		TP_STRUCT__entry(
882f92ae34STrond Myklebust 			__field(unsigned int, session)
892f92ae34STrond Myklebust 			__field(unsigned int, slot_nr)
902f92ae34STrond Myklebust 			__field(unsigned int, seq_nr)
912f92ae34STrond Myklebust 			__field(unsigned int, highest_slotid)
922f92ae34STrond Myklebust 			__field(unsigned int, target_highest_slotid)
938791545eSChuck Lever 			__field(unsigned long, status_flags)
9496650e2eSChuck Lever 			__field(unsigned long, error)
952f92ae34STrond Myklebust 		),
962f92ae34STrond Myklebust 
972f92ae34STrond Myklebust 		TP_fast_assign(
982f92ae34STrond Myklebust 			const struct nfs4_slot *sr_slot = res->sr_slot;
992f92ae34STrond Myklebust 			__entry->session = nfs_session_id_hash(&session->sess_id);
1002f92ae34STrond Myklebust 			__entry->slot_nr = sr_slot->slot_nr;
1012f92ae34STrond Myklebust 			__entry->seq_nr = sr_slot->seq_nr;
1022f92ae34STrond Myklebust 			__entry->highest_slotid = res->sr_highest_slotid;
1032f92ae34STrond Myklebust 			__entry->target_highest_slotid =
1042f92ae34STrond Myklebust 					res->sr_target_highest_slotid;
10552618df9SAndrew Elble 			__entry->status_flags = res->sr_status_flags;
106118b6292STrond Myklebust 			__entry->error = res->sr_status < 0 ?
107118b6292STrond Myklebust 					-res->sr_status : 0;
1082f92ae34STrond Myklebust 		),
1092f92ae34STrond Myklebust 		TP_printk(
11096650e2eSChuck Lever 			"error=%ld (%s) session=0x%08x slot_nr=%u seq_nr=%u "
1112f92ae34STrond Myklebust 			"highest_slotid=%u target_highest_slotid=%u "
1128791545eSChuck Lever 			"status_flags=0x%lx (%s)",
11396650e2eSChuck Lever 			-__entry->error,
1148791545eSChuck Lever 			show_nfs4_status(__entry->error),
1152f92ae34STrond Myklebust 			__entry->session,
1162f92ae34STrond Myklebust 			__entry->slot_nr,
1172f92ae34STrond Myklebust 			__entry->seq_nr,
1182f92ae34STrond Myklebust 			__entry->highest_slotid,
1192f92ae34STrond Myklebust 			__entry->target_highest_slotid,
1202f92ae34STrond Myklebust 			__entry->status_flags,
1218791545eSChuck Lever 			show_nfs4_seq4_status(__entry->status_flags)
1222f92ae34STrond Myklebust 		)
1232f92ae34STrond Myklebust );
1242f92ae34STrond Myklebust 
1252f92ae34STrond Myklebust struct cb_sequenceargs;
1262f92ae34STrond Myklebust struct cb_sequenceres;
1272f92ae34STrond Myklebust 
1282f92ae34STrond Myklebust TRACE_EVENT(nfs4_cb_sequence,
1292f92ae34STrond Myklebust 		TP_PROTO(
1302f92ae34STrond Myklebust 			const struct cb_sequenceargs *args,
1312f92ae34STrond Myklebust 			const struct cb_sequenceres *res,
1322f92ae34STrond Myklebust 			__be32 status
1332f92ae34STrond Myklebust 		),
1342f92ae34STrond Myklebust 		TP_ARGS(args, res, status),
1352f92ae34STrond Myklebust 
1362f92ae34STrond Myklebust 		TP_STRUCT__entry(
1372f92ae34STrond Myklebust 			__field(unsigned int, session)
1382f92ae34STrond Myklebust 			__field(unsigned int, slot_nr)
1392f92ae34STrond Myklebust 			__field(unsigned int, seq_nr)
1402f92ae34STrond Myklebust 			__field(unsigned int, highest_slotid)
1412f92ae34STrond Myklebust 			__field(unsigned int, cachethis)
14296650e2eSChuck Lever 			__field(unsigned long, error)
1432f92ae34STrond Myklebust 		),
1442f92ae34STrond Myklebust 
1452f92ae34STrond Myklebust 		TP_fast_assign(
1462f92ae34STrond Myklebust 			__entry->session = nfs_session_id_hash(&args->csa_sessionid);
1472f92ae34STrond Myklebust 			__entry->slot_nr = args->csa_slotid;
1482f92ae34STrond Myklebust 			__entry->seq_nr = args->csa_sequenceid;
1492f92ae34STrond Myklebust 			__entry->highest_slotid = args->csa_highestslotid;
1502f92ae34STrond Myklebust 			__entry->cachethis = args->csa_cachethis;
15196650e2eSChuck Lever 			__entry->error = be32_to_cpu(status);
1522f92ae34STrond Myklebust 		),
1532f92ae34STrond Myklebust 
1542f92ae34STrond Myklebust 		TP_printk(
15596650e2eSChuck Lever 			"error=%ld (%s) session=0x%08x slot_nr=%u seq_nr=%u "
1562f92ae34STrond Myklebust 			"highest_slotid=%u",
15796650e2eSChuck Lever 			-__entry->error,
1588791545eSChuck Lever 			show_nfs4_status(__entry->error),
1592f92ae34STrond Myklebust 			__entry->session,
1602f92ae34STrond Myklebust 			__entry->slot_nr,
1612f92ae34STrond Myklebust 			__entry->seq_nr,
1622f92ae34STrond Myklebust 			__entry->highest_slotid
1632f92ae34STrond Myklebust 		)
1642f92ae34STrond Myklebust );
165c5833f0dSChuck Lever 
166c5833f0dSChuck Lever TRACE_EVENT(nfs4_cb_seqid_err,
167c5833f0dSChuck Lever 		TP_PROTO(
168c5833f0dSChuck Lever 			const struct cb_sequenceargs *args,
169c5833f0dSChuck Lever 			__be32 status
170c5833f0dSChuck Lever 		),
171c5833f0dSChuck Lever 		TP_ARGS(args, status),
172c5833f0dSChuck Lever 
173c5833f0dSChuck Lever 		TP_STRUCT__entry(
174c5833f0dSChuck Lever 			__field(unsigned int, session)
175c5833f0dSChuck Lever 			__field(unsigned int, slot_nr)
176c5833f0dSChuck Lever 			__field(unsigned int, seq_nr)
177c5833f0dSChuck Lever 			__field(unsigned int, highest_slotid)
178c5833f0dSChuck Lever 			__field(unsigned int, cachethis)
17996650e2eSChuck Lever 			__field(unsigned long, error)
180c5833f0dSChuck Lever 		),
181c5833f0dSChuck Lever 
182c5833f0dSChuck Lever 		TP_fast_assign(
183c5833f0dSChuck Lever 			__entry->session = nfs_session_id_hash(&args->csa_sessionid);
184c5833f0dSChuck Lever 			__entry->slot_nr = args->csa_slotid;
185c5833f0dSChuck Lever 			__entry->seq_nr = args->csa_sequenceid;
186c5833f0dSChuck Lever 			__entry->highest_slotid = args->csa_highestslotid;
187c5833f0dSChuck Lever 			__entry->cachethis = args->csa_cachethis;
18896650e2eSChuck Lever 			__entry->error = be32_to_cpu(status);
189c5833f0dSChuck Lever 		),
190c5833f0dSChuck Lever 
191c5833f0dSChuck Lever 		TP_printk(
19296650e2eSChuck Lever 			"error=%ld (%s) session=0x%08x slot_nr=%u seq_nr=%u "
193c5833f0dSChuck Lever 			"highest_slotid=%u",
19496650e2eSChuck Lever 			-__entry->error,
1958791545eSChuck Lever 			show_nfs4_status(__entry->error),
196c5833f0dSChuck Lever 			__entry->session,
197c5833f0dSChuck Lever 			__entry->slot_nr,
198c5833f0dSChuck Lever 			__entry->seq_nr,
199c5833f0dSChuck Lever 			__entry->highest_slotid
200c5833f0dSChuck Lever 		)
201c5833f0dSChuck Lever );
202c5833f0dSChuck Lever 
203c6d01c6fSTrond Myklebust #endif /* CONFIG_NFS_V4_1 */
204c6d01c6fSTrond Myklebust 
205ad05cc0fSAnna Schumaker TRACE_EVENT(nfs4_setup_sequence,
206ad05cc0fSAnna Schumaker 		TP_PROTO(
207ad05cc0fSAnna Schumaker 			const struct nfs4_session *session,
208ad05cc0fSAnna Schumaker 			const struct nfs4_sequence_args *args
209ad05cc0fSAnna Schumaker 		),
210ad05cc0fSAnna Schumaker 		TP_ARGS(session, args),
211ad05cc0fSAnna Schumaker 
212ad05cc0fSAnna Schumaker 		TP_STRUCT__entry(
213ad05cc0fSAnna Schumaker 			__field(unsigned int, session)
214ad05cc0fSAnna Schumaker 			__field(unsigned int, slot_nr)
215ad05cc0fSAnna Schumaker 			__field(unsigned int, seq_nr)
216ad05cc0fSAnna Schumaker 			__field(unsigned int, highest_used_slotid)
217ad05cc0fSAnna Schumaker 		),
218ad05cc0fSAnna Schumaker 
219ad05cc0fSAnna Schumaker 		TP_fast_assign(
220ad05cc0fSAnna Schumaker 			const struct nfs4_slot *sa_slot = args->sa_slot;
221ad05cc0fSAnna Schumaker 			__entry->session = session ? nfs_session_id_hash(&session->sess_id) : 0;
222ad05cc0fSAnna Schumaker 			__entry->slot_nr = sa_slot->slot_nr;
223ad05cc0fSAnna Schumaker 			__entry->seq_nr = sa_slot->seq_nr;
224ad05cc0fSAnna Schumaker 			__entry->highest_used_slotid =
225ad05cc0fSAnna Schumaker 					sa_slot->table->highest_used_slotid;
226ad05cc0fSAnna Schumaker 		),
227ad05cc0fSAnna Schumaker 		TP_printk(
228ad05cc0fSAnna Schumaker 			"session=0x%08x slot_nr=%u seq_nr=%u "
229ad05cc0fSAnna Schumaker 			"highest_used_slotid=%u",
230ad05cc0fSAnna Schumaker 			__entry->session,
231ad05cc0fSAnna Schumaker 			__entry->slot_nr,
232ad05cc0fSAnna Schumaker 			__entry->seq_nr,
233ad05cc0fSAnna Schumaker 			__entry->highest_used_slotid
234ad05cc0fSAnna Schumaker 		)
235ad05cc0fSAnna Schumaker );
236ad05cc0fSAnna Schumaker 
237511ba52eSChuck Lever TRACE_DEFINE_ENUM(NFS4CLNT_MANAGER_RUNNING);
238511ba52eSChuck Lever TRACE_DEFINE_ENUM(NFS4CLNT_CHECK_LEASE);
239511ba52eSChuck Lever TRACE_DEFINE_ENUM(NFS4CLNT_LEASE_EXPIRED);
240511ba52eSChuck Lever TRACE_DEFINE_ENUM(NFS4CLNT_RECLAIM_REBOOT);
241511ba52eSChuck Lever TRACE_DEFINE_ENUM(NFS4CLNT_RECLAIM_NOGRACE);
242511ba52eSChuck Lever TRACE_DEFINE_ENUM(NFS4CLNT_DELEGRETURN);
243511ba52eSChuck Lever TRACE_DEFINE_ENUM(NFS4CLNT_SESSION_RESET);
244511ba52eSChuck Lever TRACE_DEFINE_ENUM(NFS4CLNT_LEASE_CONFIRM);
245511ba52eSChuck Lever TRACE_DEFINE_ENUM(NFS4CLNT_SERVER_SCOPE_MISMATCH);
246511ba52eSChuck Lever TRACE_DEFINE_ENUM(NFS4CLNT_PURGE_STATE);
247511ba52eSChuck Lever TRACE_DEFINE_ENUM(NFS4CLNT_BIND_CONN_TO_SESSION);
248511ba52eSChuck Lever TRACE_DEFINE_ENUM(NFS4CLNT_MOVED);
249511ba52eSChuck Lever TRACE_DEFINE_ENUM(NFS4CLNT_LEASE_MOVED);
250511ba52eSChuck Lever TRACE_DEFINE_ENUM(NFS4CLNT_DELEGATION_EXPIRED);
251511ba52eSChuck Lever TRACE_DEFINE_ENUM(NFS4CLNT_RUN_MANAGER);
252b5fdf841STrond Myklebust TRACE_DEFINE_ENUM(NFS4CLNT_RECALL_RUNNING);
253b5fdf841STrond Myklebust TRACE_DEFINE_ENUM(NFS4CLNT_RECALL_ANY_LAYOUT_READ);
254b5fdf841STrond Myklebust TRACE_DEFINE_ENUM(NFS4CLNT_RECALL_ANY_LAYOUT_RW);
255511ba52eSChuck Lever 
256511ba52eSChuck Lever #define show_nfs4_clp_state(state) \
257511ba52eSChuck Lever 	__print_flags(state, "|", \
258511ba52eSChuck Lever 		{ NFS4CLNT_MANAGER_RUNNING,	"MANAGER_RUNNING" }, \
259511ba52eSChuck Lever 		{ NFS4CLNT_CHECK_LEASE,		"CHECK_LEASE" }, \
260511ba52eSChuck Lever 		{ NFS4CLNT_LEASE_EXPIRED,	"LEASE_EXPIRED" }, \
261511ba52eSChuck Lever 		{ NFS4CLNT_RECLAIM_REBOOT,	"RECLAIM_REBOOT" }, \
262511ba52eSChuck Lever 		{ NFS4CLNT_RECLAIM_NOGRACE,	"RECLAIM_NOGRACE" }, \
263511ba52eSChuck Lever 		{ NFS4CLNT_DELEGRETURN,		"DELEGRETURN" }, \
264511ba52eSChuck Lever 		{ NFS4CLNT_SESSION_RESET,	"SESSION_RESET" }, \
265511ba52eSChuck Lever 		{ NFS4CLNT_LEASE_CONFIRM,	"LEASE_CONFIRM" }, \
266511ba52eSChuck Lever 		{ NFS4CLNT_SERVER_SCOPE_MISMATCH, \
267511ba52eSChuck Lever 						"SERVER_SCOPE_MISMATCH" }, \
268511ba52eSChuck Lever 		{ NFS4CLNT_PURGE_STATE,		"PURGE_STATE" }, \
269511ba52eSChuck Lever 		{ NFS4CLNT_BIND_CONN_TO_SESSION, \
270511ba52eSChuck Lever 						"BIND_CONN_TO_SESSION" }, \
271511ba52eSChuck Lever 		{ NFS4CLNT_MOVED,		"MOVED" }, \
272511ba52eSChuck Lever 		{ NFS4CLNT_LEASE_MOVED,		"LEASE_MOVED" }, \
273511ba52eSChuck Lever 		{ NFS4CLNT_DELEGATION_EXPIRED,	"DELEGATION_EXPIRED" }, \
274511ba52eSChuck Lever 		{ NFS4CLNT_RUN_MANAGER,		"RUN_MANAGER" }, \
275b5fdf841STrond Myklebust 		{ NFS4CLNT_RECALL_RUNNING,	"RECALL_RUNNING" }, \
276b5fdf841STrond Myklebust 		{ NFS4CLNT_RECALL_ANY_LAYOUT_READ, "RECALL_ANY_LAYOUT_READ" }, \
277b5fdf841STrond Myklebust 		{ NFS4CLNT_RECALL_ANY_LAYOUT_RW, "RECALL_ANY_LAYOUT_RW" })
278511ba52eSChuck Lever 
279511ba52eSChuck Lever TRACE_EVENT(nfs4_state_mgr,
280511ba52eSChuck Lever 		TP_PROTO(
281511ba52eSChuck Lever 			const struct nfs_client *clp
282511ba52eSChuck Lever 		),
283511ba52eSChuck Lever 
284511ba52eSChuck Lever 		TP_ARGS(clp),
285511ba52eSChuck Lever 
286511ba52eSChuck Lever 		TP_STRUCT__entry(
287511ba52eSChuck Lever 			__field(unsigned long, state)
288511ba52eSChuck Lever 			__string(hostname, clp->cl_hostname)
289511ba52eSChuck Lever 		),
290511ba52eSChuck Lever 
291511ba52eSChuck Lever 		TP_fast_assign(
292511ba52eSChuck Lever 			__entry->state = clp->cl_state;
29378c14b38SJoe Perches 			__assign_str(hostname, clp->cl_hostname);
294511ba52eSChuck Lever 		),
295511ba52eSChuck Lever 
296511ba52eSChuck Lever 		TP_printk(
297511ba52eSChuck Lever 			"hostname=%s clp state=%s", __get_str(hostname),
298511ba52eSChuck Lever 			show_nfs4_clp_state(__entry->state)
299511ba52eSChuck Lever 		)
300511ba52eSChuck Lever )
301511ba52eSChuck Lever 
302511ba52eSChuck Lever TRACE_EVENT(nfs4_state_mgr_failed,
303511ba52eSChuck Lever 		TP_PROTO(
304511ba52eSChuck Lever 			const struct nfs_client *clp,
305511ba52eSChuck Lever 			const char *section,
306511ba52eSChuck Lever 			int status
307511ba52eSChuck Lever 		),
308511ba52eSChuck Lever 
309511ba52eSChuck Lever 		TP_ARGS(clp, section, status),
310511ba52eSChuck Lever 
311511ba52eSChuck Lever 		TP_STRUCT__entry(
312511ba52eSChuck Lever 			__field(unsigned long, error)
313511ba52eSChuck Lever 			__field(unsigned long, state)
314511ba52eSChuck Lever 			__string(hostname, clp->cl_hostname)
315511ba52eSChuck Lever 			__string(section, section)
316511ba52eSChuck Lever 		),
317511ba52eSChuck Lever 
318511ba52eSChuck Lever 		TP_fast_assign(
319118b6292STrond Myklebust 			__entry->error = status < 0 ? -status : 0;
320511ba52eSChuck Lever 			__entry->state = clp->cl_state;
321511ba52eSChuck Lever 			__assign_str(hostname, clp->cl_hostname);
322511ba52eSChuck Lever 			__assign_str(section, section);
323511ba52eSChuck Lever 		),
324511ba52eSChuck Lever 
325511ba52eSChuck Lever 		TP_printk(
326511ba52eSChuck Lever 			"hostname=%s clp state=%s error=%ld (%s) section=%s",
327511ba52eSChuck Lever 			__get_str(hostname),
328511ba52eSChuck Lever 			show_nfs4_clp_state(__entry->state), -__entry->error,
3298791545eSChuck Lever 			show_nfs4_status(__entry->error), __get_str(section)
330511ba52eSChuck Lever 
331511ba52eSChuck Lever 		)
332511ba52eSChuck Lever )
333511ba52eSChuck Lever 
334da934ae0STrond Myklebust TRACE_EVENT(nfs4_xdr_bad_operation,
335da934ae0STrond Myklebust 		TP_PROTO(
336da934ae0STrond Myklebust 			const struct xdr_stream *xdr,
337da934ae0STrond Myklebust 			u32 op,
338da934ae0STrond Myklebust 			u32 expected
339da934ae0STrond Myklebust 		),
340da934ae0STrond Myklebust 
341da934ae0STrond Myklebust 		TP_ARGS(xdr, op, expected),
342da934ae0STrond Myklebust 
343da934ae0STrond Myklebust 		TP_STRUCT__entry(
344da934ae0STrond Myklebust 			__field(unsigned int, task_id)
345da934ae0STrond Myklebust 			__field(unsigned int, client_id)
346da934ae0STrond Myklebust 			__field(u32, xid)
347da934ae0STrond Myklebust 			__field(u32, op)
348da934ae0STrond Myklebust 			__field(u32, expected)
349da934ae0STrond Myklebust 		),
350da934ae0STrond Myklebust 
351da934ae0STrond Myklebust 		TP_fast_assign(
352da934ae0STrond Myklebust 			const struct rpc_rqst *rqstp = xdr->rqst;
353da934ae0STrond Myklebust 			const struct rpc_task *task = rqstp->rq_task;
354da934ae0STrond Myklebust 
355da934ae0STrond Myklebust 			__entry->task_id = task->tk_pid;
356da934ae0STrond Myklebust 			__entry->client_id = task->tk_client->cl_clid;
357da934ae0STrond Myklebust 			__entry->xid = be32_to_cpu(rqstp->rq_xid);
358da934ae0STrond Myklebust 			__entry->op = op;
359da934ae0STrond Myklebust 			__entry->expected = expected;
360da934ae0STrond Myklebust 		),
361da934ae0STrond Myklebust 
362b4776a34SChuck Lever 		TP_printk(SUNRPC_TRACE_TASK_SPECIFIER
363b4776a34SChuck Lever 			  " xid=0x%08x operation=%u, expected=%u",
364da934ae0STrond Myklebust 			__entry->task_id, __entry->client_id, __entry->xid,
365da934ae0STrond Myklebust 			__entry->op, __entry->expected
366da934ae0STrond Myklebust 		)
367da934ae0STrond Myklebust );
368da934ae0STrond Myklebust 
3693d66bae1STrond Myklebust DECLARE_EVENT_CLASS(nfs4_xdr_event,
370f23f6584SChuck Lever 		TP_PROTO(
37162a92ba9SChuck Lever 			const struct xdr_stream *xdr,
372f23f6584SChuck Lever 			u32 op,
373118b6292STrond Myklebust 			u32 error
374f23f6584SChuck Lever 		),
375f23f6584SChuck Lever 
37662a92ba9SChuck Lever 		TP_ARGS(xdr, op, error),
377f23f6584SChuck Lever 
378f23f6584SChuck Lever 		TP_STRUCT__entry(
37962a92ba9SChuck Lever 			__field(unsigned int, task_id)
38062a92ba9SChuck Lever 			__field(unsigned int, client_id)
38162a92ba9SChuck Lever 			__field(u32, xid)
382f23f6584SChuck Lever 			__field(u32, op)
38396650e2eSChuck Lever 			__field(unsigned long, error)
384f23f6584SChuck Lever 		),
385f23f6584SChuck Lever 
386f23f6584SChuck Lever 		TP_fast_assign(
38762a92ba9SChuck Lever 			const struct rpc_rqst *rqstp = xdr->rqst;
38862a92ba9SChuck Lever 			const struct rpc_task *task = rqstp->rq_task;
38962a92ba9SChuck Lever 
39062a92ba9SChuck Lever 			__entry->task_id = task->tk_pid;
39162a92ba9SChuck Lever 			__entry->client_id = task->tk_client->cl_clid;
39262a92ba9SChuck Lever 			__entry->xid = be32_to_cpu(rqstp->rq_xid);
393f23f6584SChuck Lever 			__entry->op = op;
39496650e2eSChuck Lever 			__entry->error = error;
395f23f6584SChuck Lever 		),
396f23f6584SChuck Lever 
397b4776a34SChuck Lever 		TP_printk(SUNRPC_TRACE_TASK_SPECIFIER
398b4776a34SChuck Lever 			  " xid=0x%08x error=%ld (%s) operation=%u",
39962a92ba9SChuck Lever 			__entry->task_id, __entry->client_id, __entry->xid,
4008791545eSChuck Lever 			-__entry->error, show_nfs4_status(__entry->error),
40196650e2eSChuck Lever 			__entry->op
402f23f6584SChuck Lever 		)
403f23f6584SChuck Lever );
4043d66bae1STrond Myklebust #define DEFINE_NFS4_XDR_EVENT(name) \
4053d66bae1STrond Myklebust 	DEFINE_EVENT(nfs4_xdr_event, name, \
4063d66bae1STrond Myklebust 			TP_PROTO( \
4073d66bae1STrond Myklebust 				const struct xdr_stream *xdr, \
4083d66bae1STrond Myklebust 				u32 op, \
4093d66bae1STrond Myklebust 				u32 error \
4103d66bae1STrond Myklebust 			), \
4113d66bae1STrond Myklebust 			TP_ARGS(xdr, op, error))
4123d66bae1STrond Myklebust DEFINE_NFS4_XDR_EVENT(nfs4_xdr_status);
413eb3d58c6STrond Myklebust DEFINE_NFS4_XDR_EVENT(nfs4_xdr_bad_filehandle);
414f23f6584SChuck Lever 
4152bb50aabSChuck Lever DECLARE_EVENT_CLASS(nfs4_cb_error_class,
4162bb50aabSChuck Lever 		TP_PROTO(
4172bb50aabSChuck Lever 			__be32 xid,
4182bb50aabSChuck Lever 			u32 cb_ident
4192bb50aabSChuck Lever 		),
4202bb50aabSChuck Lever 
4212bb50aabSChuck Lever 		TP_ARGS(xid, cb_ident),
4222bb50aabSChuck Lever 
4232bb50aabSChuck Lever 		TP_STRUCT__entry(
4242bb50aabSChuck Lever 			__field(u32, xid)
4252bb50aabSChuck Lever 			__field(u32, cbident)
4262bb50aabSChuck Lever 		),
4272bb50aabSChuck Lever 
4282bb50aabSChuck Lever 		TP_fast_assign(
4292bb50aabSChuck Lever 			__entry->xid = be32_to_cpu(xid);
4302bb50aabSChuck Lever 			__entry->cbident = cb_ident;
4312bb50aabSChuck Lever 		),
4322bb50aabSChuck Lever 
4332bb50aabSChuck Lever 		TP_printk(
4342bb50aabSChuck Lever 			"xid=0x%08x cb_ident=0x%08x",
4352bb50aabSChuck Lever 			__entry->xid, __entry->cbident
4362bb50aabSChuck Lever 		)
4372bb50aabSChuck Lever );
4382bb50aabSChuck Lever 
4392bb50aabSChuck Lever #define DEFINE_CB_ERROR_EVENT(name) \
4402bb50aabSChuck Lever 	DEFINE_EVENT(nfs4_cb_error_class, nfs_cb_##name, \
4412bb50aabSChuck Lever 			TP_PROTO( \
4422bb50aabSChuck Lever 				__be32 xid, \
4432bb50aabSChuck Lever 				u32 cb_ident \
4442bb50aabSChuck Lever 			), \
4452bb50aabSChuck Lever 			TP_ARGS(xid, cb_ident))
4462bb50aabSChuck Lever 
4472bb50aabSChuck Lever DEFINE_CB_ERROR_EVENT(no_clp);
4482bb50aabSChuck Lever DEFINE_CB_ERROR_EVENT(badprinc);
4492bb50aabSChuck Lever 
45042113a75STrond Myklebust DECLARE_EVENT_CLASS(nfs4_open_event,
45142113a75STrond Myklebust 		TP_PROTO(
45242113a75STrond Myklebust 			const struct nfs_open_context *ctx,
45342113a75STrond Myklebust 			int flags,
45442113a75STrond Myklebust 			int error
45542113a75STrond Myklebust 		),
45642113a75STrond Myklebust 
45742113a75STrond Myklebust 		TP_ARGS(ctx, flags, error),
45842113a75STrond Myklebust 
45942113a75STrond Myklebust 		TP_STRUCT__entry(
46096650e2eSChuck Lever 			__field(unsigned long, error)
4619d2d48bbSChuck Lever 			__field(unsigned long, flags)
4629d2d48bbSChuck Lever 			__field(unsigned long, fmode)
46342113a75STrond Myklebust 			__field(dev_t, dev)
46442113a75STrond Myklebust 			__field(u32, fhandle)
46542113a75STrond Myklebust 			__field(u64, fileid)
46642113a75STrond Myklebust 			__field(u64, dir)
46742113a75STrond Myklebust 			__string(name, ctx->dentry->d_name.name)
46848c9579aSOlga Kornievskaia 			__field(int, stateid_seq)
46948c9579aSOlga Kornievskaia 			__field(u32, stateid_hash)
47048c9579aSOlga Kornievskaia 			__field(int, openstateid_seq)
47148c9579aSOlga Kornievskaia 			__field(u32, openstateid_hash)
47242113a75STrond Myklebust 		),
47342113a75STrond Myklebust 
47442113a75STrond Myklebust 		TP_fast_assign(
47542113a75STrond Myklebust 			const struct nfs4_state *state = ctx->state;
47642113a75STrond Myklebust 			const struct inode *inode = NULL;
47742113a75STrond Myklebust 
47896650e2eSChuck Lever 			__entry->error = -error;
47942113a75STrond Myklebust 			__entry->flags = flags;
4809d2d48bbSChuck Lever 			__entry->fmode = (__force unsigned long)ctx->mode;
48142113a75STrond Myklebust 			__entry->dev = ctx->dentry->d_sb->s_dev;
48248c9579aSOlga Kornievskaia 			if (!IS_ERR_OR_NULL(state)) {
48342113a75STrond Myklebust 				inode = state->inode;
48448c9579aSOlga Kornievskaia 				__entry->stateid_seq =
48548c9579aSOlga Kornievskaia 					be32_to_cpu(state->stateid.seqid);
48648c9579aSOlga Kornievskaia 				__entry->stateid_hash =
48748c9579aSOlga Kornievskaia 					nfs_stateid_hash(&state->stateid);
48848c9579aSOlga Kornievskaia 				__entry->openstateid_seq =
48948c9579aSOlga Kornievskaia 					be32_to_cpu(state->open_stateid.seqid);
49048c9579aSOlga Kornievskaia 				__entry->openstateid_hash =
49148c9579aSOlga Kornievskaia 					nfs_stateid_hash(&state->open_stateid);
49248c9579aSOlga Kornievskaia 			} else {
49348c9579aSOlga Kornievskaia 				__entry->stateid_seq = 0;
49448c9579aSOlga Kornievskaia 				__entry->stateid_hash = 0;
49548c9579aSOlga Kornievskaia 				__entry->openstateid_seq = 0;
49648c9579aSOlga Kornievskaia 				__entry->openstateid_hash = 0;
49748c9579aSOlga Kornievskaia 			}
49842113a75STrond Myklebust 			if (inode != NULL) {
49942113a75STrond Myklebust 				__entry->fileid = NFS_FILEID(inode);
50042113a75STrond Myklebust 				__entry->fhandle = nfs_fhandle_hash(NFS_FH(inode));
50142113a75STrond Myklebust 			} else {
50242113a75STrond Myklebust 				__entry->fileid = 0;
50342113a75STrond Myklebust 				__entry->fhandle = 0;
50442113a75STrond Myklebust 			}
5052b0143b5SDavid Howells 			__entry->dir = NFS_FILEID(d_inode(ctx->dentry->d_parent));
50642113a75STrond Myklebust 			__assign_str(name, ctx->dentry->d_name.name);
50742113a75STrond Myklebust 		),
50842113a75STrond Myklebust 
50942113a75STrond Myklebust 		TP_printk(
5109d2d48bbSChuck Lever 			"error=%ld (%s) flags=%lu (%s) fmode=%s "
51142113a75STrond Myklebust 			"fileid=%02x:%02x:%llu fhandle=0x%08x "
51248c9579aSOlga Kornievskaia 			"name=%02x:%02x:%llu/%s stateid=%d:0x%08x "
51348c9579aSOlga Kornievskaia 			"openstateid=%d:0x%08x",
51496650e2eSChuck Lever 			 -__entry->error,
5158791545eSChuck Lever 			 show_nfs4_status(__entry->error),
51642113a75STrond Myklebust 			 __entry->flags,
5179d2d48bbSChuck Lever 			 show_fs_fcntl_open_flags(__entry->flags),
5189d2d48bbSChuck Lever 			 show_fs_fmode_flags(__entry->fmode),
51942113a75STrond Myklebust 			 MAJOR(__entry->dev), MINOR(__entry->dev),
52042113a75STrond Myklebust 			 (unsigned long long)__entry->fileid,
52142113a75STrond Myklebust 			 __entry->fhandle,
52242113a75STrond Myklebust 			 MAJOR(__entry->dev), MINOR(__entry->dev),
52342113a75STrond Myklebust 			 (unsigned long long)__entry->dir,
52448c9579aSOlga Kornievskaia 			 __get_str(name),
52548c9579aSOlga Kornievskaia 			 __entry->stateid_seq, __entry->stateid_hash,
52648c9579aSOlga Kornievskaia 			 __entry->openstateid_seq, __entry->openstateid_hash
52742113a75STrond Myklebust 		)
52842113a75STrond Myklebust );
52942113a75STrond Myklebust 
53042113a75STrond Myklebust #define DEFINE_NFS4_OPEN_EVENT(name) \
53142113a75STrond Myklebust 	DEFINE_EVENT(nfs4_open_event, name, \
53242113a75STrond Myklebust 			TP_PROTO( \
53342113a75STrond Myklebust 				const struct nfs_open_context *ctx, \
53442113a75STrond Myklebust 				int flags, \
53542113a75STrond Myklebust 				int error \
53642113a75STrond Myklebust 			), \
53742113a75STrond Myklebust 			TP_ARGS(ctx, flags, error))
53842113a75STrond Myklebust DEFINE_NFS4_OPEN_EVENT(nfs4_open_reclaim);
53942113a75STrond Myklebust DEFINE_NFS4_OPEN_EVENT(nfs4_open_expired);
54042113a75STrond Myklebust DEFINE_NFS4_OPEN_EVENT(nfs4_open_file);
54142113a75STrond Myklebust 
5429759b0fbSOlga Kornievskaia TRACE_EVENT(nfs4_cached_open,
5439759b0fbSOlga Kornievskaia 		TP_PROTO(
5449759b0fbSOlga Kornievskaia 			const struct nfs4_state *state
5459759b0fbSOlga Kornievskaia 		),
5469759b0fbSOlga Kornievskaia 		TP_ARGS(state),
5479759b0fbSOlga Kornievskaia 		TP_STRUCT__entry(
5489759b0fbSOlga Kornievskaia 			__field(dev_t, dev)
5499759b0fbSOlga Kornievskaia 			__field(u32, fhandle)
5509759b0fbSOlga Kornievskaia 			__field(u64, fileid)
5519759b0fbSOlga Kornievskaia 			__field(unsigned int, fmode)
5529759b0fbSOlga Kornievskaia 			__field(int, stateid_seq)
5539759b0fbSOlga Kornievskaia 			__field(u32, stateid_hash)
5549759b0fbSOlga Kornievskaia 		),
5559759b0fbSOlga Kornievskaia 
5569759b0fbSOlga Kornievskaia 		TP_fast_assign(
5579759b0fbSOlga Kornievskaia 			const struct inode *inode = state->inode;
5589759b0fbSOlga Kornievskaia 
5599759b0fbSOlga Kornievskaia 			__entry->dev = inode->i_sb->s_dev;
5609759b0fbSOlga Kornievskaia 			__entry->fileid = NFS_FILEID(inode);
5619759b0fbSOlga Kornievskaia 			__entry->fhandle = nfs_fhandle_hash(NFS_FH(inode));
5629759b0fbSOlga Kornievskaia 			__entry->fmode = (__force unsigned int)state->state;
5639759b0fbSOlga Kornievskaia 			__entry->stateid_seq =
5649759b0fbSOlga Kornievskaia 				be32_to_cpu(state->stateid.seqid);
5659759b0fbSOlga Kornievskaia 			__entry->stateid_hash =
5669759b0fbSOlga Kornievskaia 				nfs_stateid_hash(&state->stateid);
5679759b0fbSOlga Kornievskaia 		),
5689759b0fbSOlga Kornievskaia 
5699759b0fbSOlga Kornievskaia 		TP_printk(
5709759b0fbSOlga Kornievskaia 			"fmode=%s fileid=%02x:%02x:%llu "
5719759b0fbSOlga Kornievskaia 			"fhandle=0x%08x stateid=%d:0x%08x",
5729d2d48bbSChuck Lever 			__entry->fmode ?  show_fs_fmode_flags(__entry->fmode) :
5739759b0fbSOlga Kornievskaia 					  "closed",
5749759b0fbSOlga Kornievskaia 			MAJOR(__entry->dev), MINOR(__entry->dev),
5759759b0fbSOlga Kornievskaia 			(unsigned long long)__entry->fileid,
5769759b0fbSOlga Kornievskaia 			__entry->fhandle,
5779759b0fbSOlga Kornievskaia 			__entry->stateid_seq, __entry->stateid_hash
5789759b0fbSOlga Kornievskaia 		)
5799759b0fbSOlga Kornievskaia );
5809759b0fbSOlga Kornievskaia 
58142113a75STrond Myklebust TRACE_EVENT(nfs4_close,
58242113a75STrond Myklebust 		TP_PROTO(
58342113a75STrond Myklebust 			const struct nfs4_state *state,
58442113a75STrond Myklebust 			const struct nfs_closeargs *args,
58542113a75STrond Myklebust 			const struct nfs_closeres *res,
58642113a75STrond Myklebust 			int error
58742113a75STrond Myklebust 		),
58842113a75STrond Myklebust 
58942113a75STrond Myklebust 		TP_ARGS(state, args, res, error),
59042113a75STrond Myklebust 
59142113a75STrond Myklebust 		TP_STRUCT__entry(
59242113a75STrond Myklebust 			__field(dev_t, dev)
59342113a75STrond Myklebust 			__field(u32, fhandle)
59442113a75STrond Myklebust 			__field(u64, fileid)
59542113a75STrond Myklebust 			__field(unsigned int, fmode)
59696650e2eSChuck Lever 			__field(unsigned long, error)
59748c9579aSOlga Kornievskaia 			__field(int, stateid_seq)
59848c9579aSOlga Kornievskaia 			__field(u32, stateid_hash)
59942113a75STrond Myklebust 		),
60042113a75STrond Myklebust 
60142113a75STrond Myklebust 		TP_fast_assign(
60242113a75STrond Myklebust 			const struct inode *inode = state->inode;
60342113a75STrond Myklebust 
60442113a75STrond Myklebust 			__entry->dev = inode->i_sb->s_dev;
60542113a75STrond Myklebust 			__entry->fileid = NFS_FILEID(inode);
60642113a75STrond Myklebust 			__entry->fhandle = nfs_fhandle_hash(NFS_FH(inode));
60742113a75STrond Myklebust 			__entry->fmode = (__force unsigned int)state->state;
608118b6292STrond Myklebust 			__entry->error = error < 0 ? -error : 0;
60948c9579aSOlga Kornievskaia 			__entry->stateid_seq =
61048c9579aSOlga Kornievskaia 				be32_to_cpu(args->stateid.seqid);
61148c9579aSOlga Kornievskaia 			__entry->stateid_hash =
61248c9579aSOlga Kornievskaia 				nfs_stateid_hash(&args->stateid);
61342113a75STrond Myklebust 		),
61442113a75STrond Myklebust 
61542113a75STrond Myklebust 		TP_printk(
61696650e2eSChuck Lever 			"error=%ld (%s) fmode=%s fileid=%02x:%02x:%llu "
61748c9579aSOlga Kornievskaia 			"fhandle=0x%08x openstateid=%d:0x%08x",
61896650e2eSChuck Lever 			-__entry->error,
6198791545eSChuck Lever 			show_nfs4_status(__entry->error),
6209d2d48bbSChuck Lever 			__entry->fmode ?  show_fs_fmode_flags(__entry->fmode) :
62142113a75STrond Myklebust 					  "closed",
62242113a75STrond Myklebust 			MAJOR(__entry->dev), MINOR(__entry->dev),
62342113a75STrond Myklebust 			(unsigned long long)__entry->fileid,
62448c9579aSOlga Kornievskaia 			__entry->fhandle,
62548c9579aSOlga Kornievskaia 			__entry->stateid_seq, __entry->stateid_hash
62642113a75STrond Myklebust 		)
62742113a75STrond Myklebust );
62842113a75STrond Myklebust 
629d1b748a5STrond Myklebust DECLARE_EVENT_CLASS(nfs4_lock_event,
630d1b748a5STrond Myklebust 		TP_PROTO(
631d1b748a5STrond Myklebust 			const struct file_lock *request,
632d1b748a5STrond Myklebust 			const struct nfs4_state *state,
633d1b748a5STrond Myklebust 			int cmd,
634d1b748a5STrond Myklebust 			int error
635d1b748a5STrond Myklebust 		),
636d1b748a5STrond Myklebust 
637d1b748a5STrond Myklebust 		TP_ARGS(request, state, cmd, error),
638d1b748a5STrond Myklebust 
639d1b748a5STrond Myklebust 		TP_STRUCT__entry(
64096650e2eSChuck Lever 			__field(unsigned long, error)
6419d2d48bbSChuck Lever 			__field(unsigned long, cmd)
6429d2d48bbSChuck Lever 			__field(unsigned long, type)
643d1b748a5STrond Myklebust 			__field(loff_t, start)
644d1b748a5STrond Myklebust 			__field(loff_t, end)
645d1b748a5STrond Myklebust 			__field(dev_t, dev)
646d1b748a5STrond Myklebust 			__field(u32, fhandle)
647d1b748a5STrond Myklebust 			__field(u64, fileid)
64848c9579aSOlga Kornievskaia 			__field(int, stateid_seq)
64948c9579aSOlga Kornievskaia 			__field(u32, stateid_hash)
650d1b748a5STrond Myklebust 		),
651d1b748a5STrond Myklebust 
652d1b748a5STrond Myklebust 		TP_fast_assign(
653d1b748a5STrond Myklebust 			const struct inode *inode = state->inode;
654d1b748a5STrond Myklebust 
655118b6292STrond Myklebust 			__entry->error = error < 0 ? -error : 0;
656d1b748a5STrond Myklebust 			__entry->cmd = cmd;
657d1b748a5STrond Myklebust 			__entry->type = request->fl_type;
658d1b748a5STrond Myklebust 			__entry->start = request->fl_start;
659d1b748a5STrond Myklebust 			__entry->end = request->fl_end;
660d1b748a5STrond Myklebust 			__entry->dev = inode->i_sb->s_dev;
661d1b748a5STrond Myklebust 			__entry->fileid = NFS_FILEID(inode);
662d1b748a5STrond Myklebust 			__entry->fhandle = nfs_fhandle_hash(NFS_FH(inode));
66348c9579aSOlga Kornievskaia 			__entry->stateid_seq =
66448c9579aSOlga Kornievskaia 				be32_to_cpu(state->stateid.seqid);
66548c9579aSOlga Kornievskaia 			__entry->stateid_hash =
66648c9579aSOlga Kornievskaia 				nfs_stateid_hash(&state->stateid);
667d1b748a5STrond Myklebust 		),
668d1b748a5STrond Myklebust 
669d1b748a5STrond Myklebust 		TP_printk(
67096650e2eSChuck Lever 			"error=%ld (%s) cmd=%s:%s range=%lld:%lld "
67148c9579aSOlga Kornievskaia 			"fileid=%02x:%02x:%llu fhandle=0x%08x "
67248c9579aSOlga Kornievskaia 			"stateid=%d:0x%08x",
67396650e2eSChuck Lever 			-__entry->error,
6748791545eSChuck Lever 			show_nfs4_status(__entry->error),
6759d2d48bbSChuck Lever 			show_fs_fcntl_cmd(__entry->cmd),
6769d2d48bbSChuck Lever 			show_fs_fcntl_lock_type(__entry->type),
677d1b748a5STrond Myklebust 			(long long)__entry->start,
678d1b748a5STrond Myklebust 			(long long)__entry->end,
679d1b748a5STrond Myklebust 			MAJOR(__entry->dev), MINOR(__entry->dev),
680d1b748a5STrond Myklebust 			(unsigned long long)__entry->fileid,
68148c9579aSOlga Kornievskaia 			__entry->fhandle,
68248c9579aSOlga Kornievskaia 			__entry->stateid_seq, __entry->stateid_hash
683d1b748a5STrond Myklebust 		)
684d1b748a5STrond Myklebust );
685d1b748a5STrond Myklebust 
686d1b748a5STrond Myklebust #define DEFINE_NFS4_LOCK_EVENT(name) \
687d1b748a5STrond Myklebust 	DEFINE_EVENT(nfs4_lock_event, name, \
688d1b748a5STrond Myklebust 			TP_PROTO( \
689d1b748a5STrond Myklebust 				const struct file_lock *request, \
690d1b748a5STrond Myklebust 				const struct nfs4_state *state, \
691d1b748a5STrond Myklebust 				int cmd, \
692d1b748a5STrond Myklebust 				int error \
693d1b748a5STrond Myklebust 			), \
694d1b748a5STrond Myklebust 			TP_ARGS(request, state, cmd, error))
695d1b748a5STrond Myklebust DEFINE_NFS4_LOCK_EVENT(nfs4_get_lock);
696d1b748a5STrond Myklebust DEFINE_NFS4_LOCK_EVENT(nfs4_unlock);
697d1b748a5STrond Myklebust 
69848c9579aSOlga Kornievskaia TRACE_EVENT(nfs4_set_lock,
69948c9579aSOlga Kornievskaia 		TP_PROTO(
70048c9579aSOlga Kornievskaia 			const struct file_lock *request,
70148c9579aSOlga Kornievskaia 			const struct nfs4_state *state,
70248c9579aSOlga Kornievskaia 			const nfs4_stateid *lockstateid,
70348c9579aSOlga Kornievskaia 			int cmd,
70448c9579aSOlga Kornievskaia 			int error
70548c9579aSOlga Kornievskaia 		),
70648c9579aSOlga Kornievskaia 
70748c9579aSOlga Kornievskaia 		TP_ARGS(request, state, lockstateid, cmd, error),
70848c9579aSOlga Kornievskaia 
70948c9579aSOlga Kornievskaia 		TP_STRUCT__entry(
71096650e2eSChuck Lever 			__field(unsigned long, error)
7119d2d48bbSChuck Lever 			__field(unsigned long, cmd)
7129d2d48bbSChuck Lever 			__field(unsigned long, type)
71348c9579aSOlga Kornievskaia 			__field(loff_t, start)
71448c9579aSOlga Kornievskaia 			__field(loff_t, end)
71548c9579aSOlga Kornievskaia 			__field(dev_t, dev)
71648c9579aSOlga Kornievskaia 			__field(u32, fhandle)
71748c9579aSOlga Kornievskaia 			__field(u64, fileid)
71848c9579aSOlga Kornievskaia 			__field(int, stateid_seq)
71948c9579aSOlga Kornievskaia 			__field(u32, stateid_hash)
72048c9579aSOlga Kornievskaia 			__field(int, lockstateid_seq)
72148c9579aSOlga Kornievskaia 			__field(u32, lockstateid_hash)
72248c9579aSOlga Kornievskaia 		),
72348c9579aSOlga Kornievskaia 
72448c9579aSOlga Kornievskaia 		TP_fast_assign(
72548c9579aSOlga Kornievskaia 			const struct inode *inode = state->inode;
72648c9579aSOlga Kornievskaia 
727118b6292STrond Myklebust 			__entry->error = error < 0 ? -error : 0;
72848c9579aSOlga Kornievskaia 			__entry->cmd = cmd;
72948c9579aSOlga Kornievskaia 			__entry->type = request->fl_type;
73048c9579aSOlga Kornievskaia 			__entry->start = request->fl_start;
73148c9579aSOlga Kornievskaia 			__entry->end = request->fl_end;
73248c9579aSOlga Kornievskaia 			__entry->dev = inode->i_sb->s_dev;
73348c9579aSOlga Kornievskaia 			__entry->fileid = NFS_FILEID(inode);
73448c9579aSOlga Kornievskaia 			__entry->fhandle = nfs_fhandle_hash(NFS_FH(inode));
73548c9579aSOlga Kornievskaia 			__entry->stateid_seq =
73648c9579aSOlga Kornievskaia 				be32_to_cpu(state->stateid.seqid);
73748c9579aSOlga Kornievskaia 			__entry->stateid_hash =
73848c9579aSOlga Kornievskaia 				nfs_stateid_hash(&state->stateid);
73948c9579aSOlga Kornievskaia 			__entry->lockstateid_seq =
74048c9579aSOlga Kornievskaia 				be32_to_cpu(lockstateid->seqid);
74148c9579aSOlga Kornievskaia 			__entry->lockstateid_hash =
74248c9579aSOlga Kornievskaia 				nfs_stateid_hash(lockstateid);
74348c9579aSOlga Kornievskaia 		),
74448c9579aSOlga Kornievskaia 
74548c9579aSOlga Kornievskaia 		TP_printk(
74696650e2eSChuck Lever 			"error=%ld (%s) cmd=%s:%s range=%lld:%lld "
74748c9579aSOlga Kornievskaia 			"fileid=%02x:%02x:%llu fhandle=0x%08x "
74848c9579aSOlga Kornievskaia 			"stateid=%d:0x%08x lockstateid=%d:0x%08x",
74996650e2eSChuck Lever 			-__entry->error,
7508791545eSChuck Lever 			show_nfs4_status(__entry->error),
7519d2d48bbSChuck Lever 			show_fs_fcntl_cmd(__entry->cmd),
7529d2d48bbSChuck Lever 			show_fs_fcntl_lock_type(__entry->type),
75348c9579aSOlga Kornievskaia 			(long long)__entry->start,
75448c9579aSOlga Kornievskaia 			(long long)__entry->end,
75548c9579aSOlga Kornievskaia 			MAJOR(__entry->dev), MINOR(__entry->dev),
75648c9579aSOlga Kornievskaia 			(unsigned long long)__entry->fileid,
75748c9579aSOlga Kornievskaia 			__entry->fhandle,
75848c9579aSOlga Kornievskaia 			__entry->stateid_seq, __entry->stateid_hash,
75948c9579aSOlga Kornievskaia 			__entry->lockstateid_seq, __entry->lockstateid_hash
76048c9579aSOlga Kornievskaia 		)
76148c9579aSOlga Kornievskaia );
76248c9579aSOlga Kornievskaia 
76321f86d2dSChuck Lever TRACE_DEFINE_ENUM(LK_STATE_IN_USE);
76421f86d2dSChuck Lever TRACE_DEFINE_ENUM(NFS_DELEGATED_STATE);
76521f86d2dSChuck Lever TRACE_DEFINE_ENUM(NFS_OPEN_STATE);
76621f86d2dSChuck Lever TRACE_DEFINE_ENUM(NFS_O_RDONLY_STATE);
76721f86d2dSChuck Lever TRACE_DEFINE_ENUM(NFS_O_WRONLY_STATE);
76821f86d2dSChuck Lever TRACE_DEFINE_ENUM(NFS_O_RDWR_STATE);
76921f86d2dSChuck Lever TRACE_DEFINE_ENUM(NFS_STATE_RECLAIM_REBOOT);
77021f86d2dSChuck Lever TRACE_DEFINE_ENUM(NFS_STATE_RECLAIM_NOGRACE);
77121f86d2dSChuck Lever TRACE_DEFINE_ENUM(NFS_STATE_POSIX_LOCKS);
77221f86d2dSChuck Lever TRACE_DEFINE_ENUM(NFS_STATE_RECOVERY_FAILED);
77321f86d2dSChuck Lever TRACE_DEFINE_ENUM(NFS_STATE_MAY_NOTIFY_LOCK);
77421f86d2dSChuck Lever TRACE_DEFINE_ENUM(NFS_STATE_CHANGE_WAIT);
77521f86d2dSChuck Lever TRACE_DEFINE_ENUM(NFS_CLNT_DST_SSC_COPY_STATE);
77621f86d2dSChuck Lever TRACE_DEFINE_ENUM(NFS_CLNT_SRC_SSC_COPY_STATE);
77721f86d2dSChuck Lever TRACE_DEFINE_ENUM(NFS_SRV_SSC_COPY_STATE);
77821f86d2dSChuck Lever 
77921f86d2dSChuck Lever #define show_nfs4_state_flags(flags) \
78021f86d2dSChuck Lever 	__print_flags(flags, "|", \
78121f86d2dSChuck Lever 		{ LK_STATE_IN_USE,		"IN_USE" }, \
78221f86d2dSChuck Lever 		{ NFS_DELEGATED_STATE,		"DELEGATED" }, \
78321f86d2dSChuck Lever 		{ NFS_OPEN_STATE,		"OPEN" }, \
78421f86d2dSChuck Lever 		{ NFS_O_RDONLY_STATE,		"O_RDONLY" }, \
78521f86d2dSChuck Lever 		{ NFS_O_WRONLY_STATE,		"O_WRONLY" }, \
78621f86d2dSChuck Lever 		{ NFS_O_RDWR_STATE,		"O_RDWR" }, \
78721f86d2dSChuck Lever 		{ NFS_STATE_RECLAIM_REBOOT,	"RECLAIM_REBOOT" }, \
78821f86d2dSChuck Lever 		{ NFS_STATE_RECLAIM_NOGRACE,	"RECLAIM_NOGRACE" }, \
78921f86d2dSChuck Lever 		{ NFS_STATE_POSIX_LOCKS,	"POSIX_LOCKS" }, \
79021f86d2dSChuck Lever 		{ NFS_STATE_RECOVERY_FAILED,	"RECOVERY_FAILED" }, \
79121f86d2dSChuck Lever 		{ NFS_STATE_MAY_NOTIFY_LOCK,	"MAY_NOTIFY_LOCK" }, \
79221f86d2dSChuck Lever 		{ NFS_STATE_CHANGE_WAIT,	"CHANGE_WAIT" }, \
79321f86d2dSChuck Lever 		{ NFS_CLNT_DST_SSC_COPY_STATE,	"CLNT_DST_SSC_COPY" }, \
79421f86d2dSChuck Lever 		{ NFS_CLNT_SRC_SSC_COPY_STATE,	"CLNT_SRC_SSC_COPY" }, \
79521f86d2dSChuck Lever 		{ NFS_SRV_SSC_COPY_STATE,	"SRV_SSC_COPY" })
79621f86d2dSChuck Lever 
79721f86d2dSChuck Lever #define show_nfs4_lock_flags(flags) \
79821f86d2dSChuck Lever 	__print_flags(flags, "|", \
79921f86d2dSChuck Lever 		{ BIT(NFS_LOCK_INITIALIZED),	"INITIALIZED" }, \
80021f86d2dSChuck Lever 		{ BIT(NFS_LOCK_LOST),		"LOST" })
80121f86d2dSChuck Lever 
80221f86d2dSChuck Lever TRACE_EVENT(nfs4_state_lock_reclaim,
80321f86d2dSChuck Lever 		TP_PROTO(
80421f86d2dSChuck Lever 			const struct nfs4_state *state,
80521f86d2dSChuck Lever 			const struct nfs4_lock_state *lock
80621f86d2dSChuck Lever 		),
80721f86d2dSChuck Lever 
80821f86d2dSChuck Lever 		TP_ARGS(state, lock),
80921f86d2dSChuck Lever 
81021f86d2dSChuck Lever 		TP_STRUCT__entry(
81121f86d2dSChuck Lever 			__field(dev_t, dev)
81221f86d2dSChuck Lever 			__field(u32, fhandle)
81321f86d2dSChuck Lever 			__field(u64, fileid)
81421f86d2dSChuck Lever 			__field(unsigned long, state_flags)
81521f86d2dSChuck Lever 			__field(unsigned long, lock_flags)
81621f86d2dSChuck Lever 			__field(int, stateid_seq)
81721f86d2dSChuck Lever 			__field(u32, stateid_hash)
81821f86d2dSChuck Lever 		),
81921f86d2dSChuck Lever 
82021f86d2dSChuck Lever 		TP_fast_assign(
82121f86d2dSChuck Lever 			const struct inode *inode = state->inode;
82221f86d2dSChuck Lever 
82321f86d2dSChuck Lever 			__entry->dev = inode->i_sb->s_dev;
82421f86d2dSChuck Lever 			__entry->fileid = NFS_FILEID(inode);
82521f86d2dSChuck Lever 			__entry->fhandle = nfs_fhandle_hash(NFS_FH(inode));
82621f86d2dSChuck Lever 			__entry->state_flags = state->flags;
82721f86d2dSChuck Lever 			__entry->lock_flags = lock->ls_flags;
82821f86d2dSChuck Lever 			__entry->stateid_seq =
82921f86d2dSChuck Lever 				be32_to_cpu(state->stateid.seqid);
83021f86d2dSChuck Lever 			__entry->stateid_hash =
83121f86d2dSChuck Lever 				nfs_stateid_hash(&state->stateid);
83221f86d2dSChuck Lever 		),
83321f86d2dSChuck Lever 
83421f86d2dSChuck Lever 		TP_printk(
83521f86d2dSChuck Lever 			"fileid=%02x:%02x:%llu fhandle=0x%08x "
83621f86d2dSChuck Lever 			"stateid=%d:0x%08x state_flags=%s lock_flags=%s",
83721f86d2dSChuck Lever 			MAJOR(__entry->dev), MINOR(__entry->dev),
83821f86d2dSChuck Lever 			(unsigned long long)__entry->fileid, __entry->fhandle,
83921f86d2dSChuck Lever 			__entry->stateid_seq, __entry->stateid_hash,
84021f86d2dSChuck Lever 			show_nfs4_state_flags(__entry->state_flags),
84121f86d2dSChuck Lever 			show_nfs4_lock_flags(__entry->lock_flags)
84221f86d2dSChuck Lever 		)
84321f86d2dSChuck Lever )
84421f86d2dSChuck Lever 
845ca8acf8dSTrond Myklebust DECLARE_EVENT_CLASS(nfs4_set_delegation_event,
846ca8acf8dSTrond Myklebust 		TP_PROTO(
847ca8acf8dSTrond Myklebust 			const struct inode *inode,
848ca8acf8dSTrond Myklebust 			fmode_t fmode
849ca8acf8dSTrond Myklebust 		),
850ca8acf8dSTrond Myklebust 
851ca8acf8dSTrond Myklebust 		TP_ARGS(inode, fmode),
852ca8acf8dSTrond Myklebust 
853ca8acf8dSTrond Myklebust 		TP_STRUCT__entry(
854ca8acf8dSTrond Myklebust 			__field(dev_t, dev)
855ca8acf8dSTrond Myklebust 			__field(u32, fhandle)
856ca8acf8dSTrond Myklebust 			__field(u64, fileid)
857ca8acf8dSTrond Myklebust 			__field(unsigned int, fmode)
858ca8acf8dSTrond Myklebust 		),
859ca8acf8dSTrond Myklebust 
860ca8acf8dSTrond Myklebust 		TP_fast_assign(
861ca8acf8dSTrond Myklebust 			__entry->dev = inode->i_sb->s_dev;
862ca8acf8dSTrond Myklebust 			__entry->fileid = NFS_FILEID(inode);
863ca8acf8dSTrond Myklebust 			__entry->fhandle = nfs_fhandle_hash(NFS_FH(inode));
864ca8acf8dSTrond Myklebust 			__entry->fmode = (__force unsigned int)fmode;
865ca8acf8dSTrond Myklebust 		),
866ca8acf8dSTrond Myklebust 
867ca8acf8dSTrond Myklebust 		TP_printk(
868ca8acf8dSTrond Myklebust 			"fmode=%s fileid=%02x:%02x:%llu fhandle=0x%08x",
8699d2d48bbSChuck Lever 			show_fs_fmode_flags(__entry->fmode),
870ca8acf8dSTrond Myklebust 			MAJOR(__entry->dev), MINOR(__entry->dev),
871ca8acf8dSTrond Myklebust 			(unsigned long long)__entry->fileid,
872ca8acf8dSTrond Myklebust 			__entry->fhandle
873ca8acf8dSTrond Myklebust 		)
874ca8acf8dSTrond Myklebust );
875ca8acf8dSTrond Myklebust #define DEFINE_NFS4_SET_DELEGATION_EVENT(name) \
876ca8acf8dSTrond Myklebust 	DEFINE_EVENT(nfs4_set_delegation_event, name, \
877ca8acf8dSTrond Myklebust 			TP_PROTO( \
878ca8acf8dSTrond Myklebust 				const struct inode *inode, \
879ca8acf8dSTrond Myklebust 				fmode_t fmode \
880ca8acf8dSTrond Myklebust 			), \
881ca8acf8dSTrond Myklebust 			TP_ARGS(inode, fmode))
882ca8acf8dSTrond Myklebust DEFINE_NFS4_SET_DELEGATION_EVENT(nfs4_set_delegation);
883ca8acf8dSTrond Myklebust DEFINE_NFS4_SET_DELEGATION_EVENT(nfs4_reclaim_delegation);
884ca8acf8dSTrond Myklebust 
885ca8acf8dSTrond Myklebust TRACE_EVENT(nfs4_delegreturn_exit,
886ca8acf8dSTrond Myklebust 		TP_PROTO(
887ca8acf8dSTrond Myklebust 			const struct nfs4_delegreturnargs *args,
888ca8acf8dSTrond Myklebust 			const struct nfs4_delegreturnres *res,
889ca8acf8dSTrond Myklebust 			int error
890ca8acf8dSTrond Myklebust 		),
891ca8acf8dSTrond Myklebust 
892ca8acf8dSTrond Myklebust 		TP_ARGS(args, res, error),
893ca8acf8dSTrond Myklebust 
894ca8acf8dSTrond Myklebust 		TP_STRUCT__entry(
895ca8acf8dSTrond Myklebust 			__field(dev_t, dev)
896ca8acf8dSTrond Myklebust 			__field(u32, fhandle)
89796650e2eSChuck Lever 			__field(unsigned long, error)
89848c9579aSOlga Kornievskaia 			__field(int, stateid_seq)
89948c9579aSOlga Kornievskaia 			__field(u32, stateid_hash)
900ca8acf8dSTrond Myklebust 		),
901ca8acf8dSTrond Myklebust 
902ca8acf8dSTrond Myklebust 		TP_fast_assign(
903ca8acf8dSTrond Myklebust 			__entry->dev = res->server->s_dev;
904ca8acf8dSTrond Myklebust 			__entry->fhandle = nfs_fhandle_hash(args->fhandle);
905118b6292STrond Myklebust 			__entry->error = error < 0 ? -error : 0;
90648c9579aSOlga Kornievskaia 			__entry->stateid_seq =
90748c9579aSOlga Kornievskaia 				be32_to_cpu(args->stateid->seqid);
90848c9579aSOlga Kornievskaia 			__entry->stateid_hash =
90948c9579aSOlga Kornievskaia 				nfs_stateid_hash(args->stateid);
910ca8acf8dSTrond Myklebust 		),
911ca8acf8dSTrond Myklebust 
912ca8acf8dSTrond Myklebust 		TP_printk(
91396650e2eSChuck Lever 			"error=%ld (%s) dev=%02x:%02x fhandle=0x%08x "
91448c9579aSOlga Kornievskaia 			"stateid=%d:0x%08x",
91596650e2eSChuck Lever 			-__entry->error,
9168791545eSChuck Lever 			show_nfs4_status(__entry->error),
917ca8acf8dSTrond Myklebust 			MAJOR(__entry->dev), MINOR(__entry->dev),
91848c9579aSOlga Kornievskaia 			__entry->fhandle,
91948c9579aSOlga Kornievskaia 			__entry->stateid_seq, __entry->stateid_hash
920ca8acf8dSTrond Myklebust 		)
921ca8acf8dSTrond Myklebust );
922ca8acf8dSTrond Myklebust 
92308cb47faSTrond Myklebust #ifdef CONFIG_NFS_V4_1
92408cb47faSTrond Myklebust DECLARE_EVENT_CLASS(nfs4_test_stateid_event,
92508cb47faSTrond Myklebust 		TP_PROTO(
92608cb47faSTrond Myklebust 			const struct nfs4_state *state,
92708cb47faSTrond Myklebust 			const struct nfs4_lock_state *lsp,
92808cb47faSTrond Myklebust 			int error
92908cb47faSTrond Myklebust 		),
93008cb47faSTrond Myklebust 
93108cb47faSTrond Myklebust 		TP_ARGS(state, lsp, error),
93208cb47faSTrond Myklebust 
93308cb47faSTrond Myklebust 		TP_STRUCT__entry(
93496650e2eSChuck Lever 			__field(unsigned long, error)
93508cb47faSTrond Myklebust 			__field(dev_t, dev)
93608cb47faSTrond Myklebust 			__field(u32, fhandle)
93708cb47faSTrond Myklebust 			__field(u64, fileid)
93848c9579aSOlga Kornievskaia 			__field(int, stateid_seq)
93948c9579aSOlga Kornievskaia 			__field(u32, stateid_hash)
94008cb47faSTrond Myklebust 		),
94108cb47faSTrond Myklebust 
94208cb47faSTrond Myklebust 		TP_fast_assign(
94308cb47faSTrond Myklebust 			const struct inode *inode = state->inode;
94408cb47faSTrond Myklebust 
945118b6292STrond Myklebust 			__entry->error = error < 0 ? -error : 0;
94608cb47faSTrond Myklebust 			__entry->dev = inode->i_sb->s_dev;
94708cb47faSTrond Myklebust 			__entry->fileid = NFS_FILEID(inode);
94808cb47faSTrond Myklebust 			__entry->fhandle = nfs_fhandle_hash(NFS_FH(inode));
94948c9579aSOlga Kornievskaia 			__entry->stateid_seq =
95048c9579aSOlga Kornievskaia 				be32_to_cpu(state->stateid.seqid);
95148c9579aSOlga Kornievskaia 			__entry->stateid_hash =
95248c9579aSOlga Kornievskaia 				nfs_stateid_hash(&state->stateid);
95308cb47faSTrond Myklebust 		),
95408cb47faSTrond Myklebust 
95508cb47faSTrond Myklebust 		TP_printk(
95696650e2eSChuck Lever 			"error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x "
95748c9579aSOlga Kornievskaia 			"stateid=%d:0x%08x",
95896650e2eSChuck Lever 			-__entry->error,
9598791545eSChuck Lever 			show_nfs4_status(__entry->error),
96008cb47faSTrond Myklebust 			MAJOR(__entry->dev), MINOR(__entry->dev),
96108cb47faSTrond Myklebust 			(unsigned long long)__entry->fileid,
96248c9579aSOlga Kornievskaia 			__entry->fhandle,
96348c9579aSOlga Kornievskaia 			__entry->stateid_seq, __entry->stateid_hash
96408cb47faSTrond Myklebust 		)
96508cb47faSTrond Myklebust );
96608cb47faSTrond Myklebust 
96708cb47faSTrond Myklebust #define DEFINE_NFS4_TEST_STATEID_EVENT(name) \
96808cb47faSTrond Myklebust 	DEFINE_EVENT(nfs4_test_stateid_event, name, \
96908cb47faSTrond Myklebust 			TP_PROTO( \
97008cb47faSTrond Myklebust 				const struct nfs4_state *state, \
97108cb47faSTrond Myklebust 				const struct nfs4_lock_state *lsp, \
97208cb47faSTrond Myklebust 				int error \
97308cb47faSTrond Myklebust 			), \
97408cb47faSTrond Myklebust 			TP_ARGS(state, lsp, error))
97508cb47faSTrond Myklebust DEFINE_NFS4_TEST_STATEID_EVENT(nfs4_test_delegation_stateid);
97608cb47faSTrond Myklebust DEFINE_NFS4_TEST_STATEID_EVENT(nfs4_test_open_stateid);
97708cb47faSTrond Myklebust DEFINE_NFS4_TEST_STATEID_EVENT(nfs4_test_lock_stateid);
97808cb47faSTrond Myklebust #endif /* CONFIG_NFS_V4_1 */
97908cb47faSTrond Myklebust 
980078ea3dfSTrond Myklebust DECLARE_EVENT_CLASS(nfs4_lookup_event,
981078ea3dfSTrond Myklebust 		TP_PROTO(
982078ea3dfSTrond Myklebust 			const struct inode *dir,
983078ea3dfSTrond Myklebust 			const struct qstr *name,
984078ea3dfSTrond Myklebust 			int error
985078ea3dfSTrond Myklebust 		),
986078ea3dfSTrond Myklebust 
987078ea3dfSTrond Myklebust 		TP_ARGS(dir, name, error),
988078ea3dfSTrond Myklebust 
989078ea3dfSTrond Myklebust 		TP_STRUCT__entry(
990078ea3dfSTrond Myklebust 			__field(dev_t, dev)
99196650e2eSChuck Lever 			__field(unsigned long, error)
992078ea3dfSTrond Myklebust 			__field(u64, dir)
993078ea3dfSTrond Myklebust 			__string(name, name->name)
994078ea3dfSTrond Myklebust 		),
995078ea3dfSTrond Myklebust 
996078ea3dfSTrond Myklebust 		TP_fast_assign(
997078ea3dfSTrond Myklebust 			__entry->dev = dir->i_sb->s_dev;
998078ea3dfSTrond Myklebust 			__entry->dir = NFS_FILEID(dir);
99996650e2eSChuck Lever 			__entry->error = -error;
1000078ea3dfSTrond Myklebust 			__assign_str(name, name->name);
1001078ea3dfSTrond Myklebust 		),
1002078ea3dfSTrond Myklebust 
1003078ea3dfSTrond Myklebust 		TP_printk(
100496650e2eSChuck Lever 			"error=%ld (%s) name=%02x:%02x:%llu/%s",
100596650e2eSChuck Lever 			-__entry->error,
10068791545eSChuck Lever 			show_nfs4_status(__entry->error),
1007078ea3dfSTrond Myklebust 			MAJOR(__entry->dev), MINOR(__entry->dev),
1008078ea3dfSTrond Myklebust 			(unsigned long long)__entry->dir,
1009078ea3dfSTrond Myklebust 			__get_str(name)
1010078ea3dfSTrond Myklebust 		)
1011078ea3dfSTrond Myklebust );
1012078ea3dfSTrond Myklebust 
1013078ea3dfSTrond Myklebust #define DEFINE_NFS4_LOOKUP_EVENT(name) \
1014078ea3dfSTrond Myklebust 	DEFINE_EVENT(nfs4_lookup_event, name, \
1015078ea3dfSTrond Myklebust 			TP_PROTO( \
1016078ea3dfSTrond Myklebust 				const struct inode *dir, \
1017078ea3dfSTrond Myklebust 				const struct qstr *name, \
1018078ea3dfSTrond Myklebust 				int error \
1019078ea3dfSTrond Myklebust 			), \
1020078ea3dfSTrond Myklebust 			TP_ARGS(dir, name, error))
1021078ea3dfSTrond Myklebust 
1022078ea3dfSTrond Myklebust DEFINE_NFS4_LOOKUP_EVENT(nfs4_lookup);
1023078ea3dfSTrond Myklebust DEFINE_NFS4_LOOKUP_EVENT(nfs4_symlink);
1024078ea3dfSTrond Myklebust DEFINE_NFS4_LOOKUP_EVENT(nfs4_mkdir);
1025078ea3dfSTrond Myklebust DEFINE_NFS4_LOOKUP_EVENT(nfs4_mknod);
1026078ea3dfSTrond Myklebust DEFINE_NFS4_LOOKUP_EVENT(nfs4_remove);
1027078ea3dfSTrond Myklebust DEFINE_NFS4_LOOKUP_EVENT(nfs4_get_fs_locations);
1028078ea3dfSTrond Myklebust DEFINE_NFS4_LOOKUP_EVENT(nfs4_secinfo);
1029078ea3dfSTrond Myklebust 
10305b5faaf6SJeff Layton TRACE_EVENT(nfs4_lookupp,
10315b5faaf6SJeff Layton 		TP_PROTO(
10325b5faaf6SJeff Layton 			const struct inode *inode,
10335b5faaf6SJeff Layton 			int error
10345b5faaf6SJeff Layton 		),
10355b5faaf6SJeff Layton 
10365b5faaf6SJeff Layton 		TP_ARGS(inode, error),
10375b5faaf6SJeff Layton 
10385b5faaf6SJeff Layton 		TP_STRUCT__entry(
10395b5faaf6SJeff Layton 			__field(dev_t, dev)
10405b5faaf6SJeff Layton 			__field(u64, ino)
104196650e2eSChuck Lever 			__field(unsigned long, error)
10425b5faaf6SJeff Layton 		),
10435b5faaf6SJeff Layton 
10445b5faaf6SJeff Layton 		TP_fast_assign(
10455b5faaf6SJeff Layton 			__entry->dev = inode->i_sb->s_dev;
10465b5faaf6SJeff Layton 			__entry->ino = NFS_FILEID(inode);
1047118b6292STrond Myklebust 			__entry->error = error < 0 ? -error : 0;
10485b5faaf6SJeff Layton 		),
10495b5faaf6SJeff Layton 
10505b5faaf6SJeff Layton 		TP_printk(
105196650e2eSChuck Lever 			"error=%ld (%s) inode=%02x:%02x:%llu",
105296650e2eSChuck Lever 			-__entry->error,
10538791545eSChuck Lever 			show_nfs4_status(__entry->error),
10545b5faaf6SJeff Layton 			MAJOR(__entry->dev), MINOR(__entry->dev),
10555b5faaf6SJeff Layton 			(unsigned long long)__entry->ino
10565b5faaf6SJeff Layton 		)
10575b5faaf6SJeff Layton );
10585b5faaf6SJeff Layton 
1059fbc6f7c2STrond Myklebust TRACE_EVENT(nfs4_rename,
1060fbc6f7c2STrond Myklebust 		TP_PROTO(
1061fbc6f7c2STrond Myklebust 			const struct inode *olddir,
1062fbc6f7c2STrond Myklebust 			const struct qstr *oldname,
1063fbc6f7c2STrond Myklebust 			const struct inode *newdir,
1064fbc6f7c2STrond Myklebust 			const struct qstr *newname,
1065fbc6f7c2STrond Myklebust 			int error
1066fbc6f7c2STrond Myklebust 		),
1067fbc6f7c2STrond Myklebust 
1068fbc6f7c2STrond Myklebust 		TP_ARGS(olddir, oldname, newdir, newname, error),
1069fbc6f7c2STrond Myklebust 
1070fbc6f7c2STrond Myklebust 		TP_STRUCT__entry(
1071fbc6f7c2STrond Myklebust 			__field(dev_t, dev)
107296650e2eSChuck Lever 			__field(unsigned long, error)
1073fbc6f7c2STrond Myklebust 			__field(u64, olddir)
1074fbc6f7c2STrond Myklebust 			__string(oldname, oldname->name)
1075fbc6f7c2STrond Myklebust 			__field(u64, newdir)
1076fbc6f7c2STrond Myklebust 			__string(newname, newname->name)
1077fbc6f7c2STrond Myklebust 		),
1078fbc6f7c2STrond Myklebust 
1079fbc6f7c2STrond Myklebust 		TP_fast_assign(
1080fbc6f7c2STrond Myklebust 			__entry->dev = olddir->i_sb->s_dev;
1081fbc6f7c2STrond Myklebust 			__entry->olddir = NFS_FILEID(olddir);
1082fbc6f7c2STrond Myklebust 			__entry->newdir = NFS_FILEID(newdir);
1083118b6292STrond Myklebust 			__entry->error = error < 0 ? -error : 0;
1084fbc6f7c2STrond Myklebust 			__assign_str(oldname, oldname->name);
1085fbc6f7c2STrond Myklebust 			__assign_str(newname, newname->name);
1086fbc6f7c2STrond Myklebust 		),
1087fbc6f7c2STrond Myklebust 
1088fbc6f7c2STrond Myklebust 		TP_printk(
108996650e2eSChuck Lever 			"error=%ld (%s) oldname=%02x:%02x:%llu/%s "
1090fbc6f7c2STrond Myklebust 			"newname=%02x:%02x:%llu/%s",
109196650e2eSChuck Lever 			-__entry->error,
10928791545eSChuck Lever 			show_nfs4_status(__entry->error),
1093fbc6f7c2STrond Myklebust 			MAJOR(__entry->dev), MINOR(__entry->dev),
1094fbc6f7c2STrond Myklebust 			(unsigned long long)__entry->olddir,
1095fbc6f7c2STrond Myklebust 			__get_str(oldname),
1096fbc6f7c2STrond Myklebust 			MAJOR(__entry->dev), MINOR(__entry->dev),
1097fbc6f7c2STrond Myklebust 			(unsigned long long)__entry->newdir,
1098fbc6f7c2STrond Myklebust 			__get_str(newname)
1099fbc6f7c2STrond Myklebust 		)
1100fbc6f7c2STrond Myklebust );
1101fbc6f7c2STrond Myklebust 
1102c1578b76STrond Myklebust DECLARE_EVENT_CLASS(nfs4_inode_event,
1103c1578b76STrond Myklebust 		TP_PROTO(
1104c1578b76STrond Myklebust 			const struct inode *inode,
1105c1578b76STrond Myklebust 			int error
1106c1578b76STrond Myklebust 		),
1107c1578b76STrond Myklebust 
1108c1578b76STrond Myklebust 		TP_ARGS(inode, error),
1109c1578b76STrond Myklebust 
1110c1578b76STrond Myklebust 		TP_STRUCT__entry(
1111c1578b76STrond Myklebust 			__field(dev_t, dev)
1112c1578b76STrond Myklebust 			__field(u32, fhandle)
1113c1578b76STrond Myklebust 			__field(u64, fileid)
111496650e2eSChuck Lever 			__field(unsigned long, error)
1115c1578b76STrond Myklebust 		),
1116c1578b76STrond Myklebust 
1117c1578b76STrond Myklebust 		TP_fast_assign(
1118c1578b76STrond Myklebust 			__entry->dev = inode->i_sb->s_dev;
1119c1578b76STrond Myklebust 			__entry->fileid = NFS_FILEID(inode);
1120c1578b76STrond Myklebust 			__entry->fhandle = nfs_fhandle_hash(NFS_FH(inode));
112196650e2eSChuck Lever 			__entry->error = error < 0 ? -error : 0;
1122c1578b76STrond Myklebust 		),
1123c1578b76STrond Myklebust 
1124c1578b76STrond Myklebust 		TP_printk(
112596650e2eSChuck Lever 			"error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x",
112696650e2eSChuck Lever 			-__entry->error,
11278791545eSChuck Lever 			show_nfs4_status(__entry->error),
1128c1578b76STrond Myklebust 			MAJOR(__entry->dev), MINOR(__entry->dev),
1129c1578b76STrond Myklebust 			(unsigned long long)__entry->fileid,
1130c1578b76STrond Myklebust 			__entry->fhandle
1131c1578b76STrond Myklebust 		)
1132c1578b76STrond Myklebust );
1133c1578b76STrond Myklebust 
1134c1578b76STrond Myklebust #define DEFINE_NFS4_INODE_EVENT(name) \
1135c1578b76STrond Myklebust 	DEFINE_EVENT(nfs4_inode_event, name, \
1136c1578b76STrond Myklebust 			TP_PROTO( \
1137c1578b76STrond Myklebust 				const struct inode *inode, \
1138c1578b76STrond Myklebust 				int error \
1139c1578b76STrond Myklebust 			), \
1140c1578b76STrond Myklebust 			TP_ARGS(inode, error))
1141c1578b76STrond Myklebust 
1142c1578b76STrond Myklebust DEFINE_NFS4_INODE_EVENT(nfs4_access);
1143c1578b76STrond Myklebust DEFINE_NFS4_INODE_EVENT(nfs4_readlink);
1144c1578b76STrond Myklebust DEFINE_NFS4_INODE_EVENT(nfs4_readdir);
1145c1578b76STrond Myklebust DEFINE_NFS4_INODE_EVENT(nfs4_get_acl);
1146c1578b76STrond Myklebust DEFINE_NFS4_INODE_EVENT(nfs4_set_acl);
1147c1578b76STrond Myklebust #ifdef CONFIG_NFS_V4_SECURITY_LABEL
1148c1578b76STrond Myklebust DEFINE_NFS4_INODE_EVENT(nfs4_get_security_label);
1149c1578b76STrond Myklebust DEFINE_NFS4_INODE_EVENT(nfs4_set_security_label);
1150c1578b76STrond Myklebust #endif /* CONFIG_NFS_V4_SECURITY_LABEL */
115148c9579aSOlga Kornievskaia 
115248c9579aSOlga Kornievskaia DECLARE_EVENT_CLASS(nfs4_inode_stateid_event,
115348c9579aSOlga Kornievskaia 		TP_PROTO(
115448c9579aSOlga Kornievskaia 			const struct inode *inode,
115548c9579aSOlga Kornievskaia 			const nfs4_stateid *stateid,
115648c9579aSOlga Kornievskaia 			int error
115748c9579aSOlga Kornievskaia 		),
115848c9579aSOlga Kornievskaia 
115948c9579aSOlga Kornievskaia 		TP_ARGS(inode, stateid, error),
116048c9579aSOlga Kornievskaia 
116148c9579aSOlga Kornievskaia 		TP_STRUCT__entry(
116248c9579aSOlga Kornievskaia 			__field(dev_t, dev)
116348c9579aSOlga Kornievskaia 			__field(u32, fhandle)
116448c9579aSOlga Kornievskaia 			__field(u64, fileid)
116596650e2eSChuck Lever 			__field(unsigned long, error)
116648c9579aSOlga Kornievskaia 			__field(int, stateid_seq)
116748c9579aSOlga Kornievskaia 			__field(u32, stateid_hash)
116848c9579aSOlga Kornievskaia 		),
116948c9579aSOlga Kornievskaia 
117048c9579aSOlga Kornievskaia 		TP_fast_assign(
117148c9579aSOlga Kornievskaia 			__entry->dev = inode->i_sb->s_dev;
117248c9579aSOlga Kornievskaia 			__entry->fileid = NFS_FILEID(inode);
117348c9579aSOlga Kornievskaia 			__entry->fhandle = nfs_fhandle_hash(NFS_FH(inode));
1174118b6292STrond Myklebust 			__entry->error = error < 0 ? -error : 0;
117548c9579aSOlga Kornievskaia 			__entry->stateid_seq =
117648c9579aSOlga Kornievskaia 				be32_to_cpu(stateid->seqid);
117748c9579aSOlga Kornievskaia 			__entry->stateid_hash =
117848c9579aSOlga Kornievskaia 				nfs_stateid_hash(stateid);
117948c9579aSOlga Kornievskaia 		),
118048c9579aSOlga Kornievskaia 
118148c9579aSOlga Kornievskaia 		TP_printk(
118296650e2eSChuck Lever 			"error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x "
118348c9579aSOlga Kornievskaia 			"stateid=%d:0x%08x",
118496650e2eSChuck Lever 			-__entry->error,
11858791545eSChuck Lever 			show_nfs4_status(__entry->error),
118648c9579aSOlga Kornievskaia 			MAJOR(__entry->dev), MINOR(__entry->dev),
118748c9579aSOlga Kornievskaia 			(unsigned long long)__entry->fileid,
118848c9579aSOlga Kornievskaia 			__entry->fhandle,
118948c9579aSOlga Kornievskaia 			__entry->stateid_seq, __entry->stateid_hash
119048c9579aSOlga Kornievskaia 		)
119148c9579aSOlga Kornievskaia );
119248c9579aSOlga Kornievskaia 
119348c9579aSOlga Kornievskaia #define DEFINE_NFS4_INODE_STATEID_EVENT(name) \
119448c9579aSOlga Kornievskaia 	DEFINE_EVENT(nfs4_inode_stateid_event, name, \
119548c9579aSOlga Kornievskaia 			TP_PROTO( \
119648c9579aSOlga Kornievskaia 				const struct inode *inode, \
119748c9579aSOlga Kornievskaia 				const nfs4_stateid *stateid, \
119848c9579aSOlga Kornievskaia 				int error \
119948c9579aSOlga Kornievskaia 			), \
120048c9579aSOlga Kornievskaia 			TP_ARGS(inode, stateid, error))
120148c9579aSOlga Kornievskaia 
120248c9579aSOlga Kornievskaia DEFINE_NFS4_INODE_STATEID_EVENT(nfs4_setattr);
120348c9579aSOlga Kornievskaia DEFINE_NFS4_INODE_STATEID_EVENT(nfs4_delegreturn);
1204ad9e02dcSTrond Myklebust DEFINE_NFS4_INODE_STATEID_EVENT(nfs4_open_stateid_update);
1205ad9e02dcSTrond Myklebust DEFINE_NFS4_INODE_STATEID_EVENT(nfs4_open_stateid_update_wait);
1206b4868b44SBenjamin Coddington DEFINE_NFS4_INODE_STATEID_EVENT(nfs4_close_stateid_update_wait);
1207c1578b76STrond Myklebust 
1208b5f875a9STrond Myklebust DECLARE_EVENT_CLASS(nfs4_getattr_event,
1209b5f875a9STrond Myklebust 		TP_PROTO(
1210b5f875a9STrond Myklebust 			const struct nfs_server *server,
1211b5f875a9STrond Myklebust 			const struct nfs_fh *fhandle,
1212b5f875a9STrond Myklebust 			const struct nfs_fattr *fattr,
1213b5f875a9STrond Myklebust 			int error
1214b5f875a9STrond Myklebust 		),
1215b5f875a9STrond Myklebust 
1216b5f875a9STrond Myklebust 		TP_ARGS(server, fhandle, fattr, error),
1217b5f875a9STrond Myklebust 
1218b5f875a9STrond Myklebust 		TP_STRUCT__entry(
1219b5f875a9STrond Myklebust 			__field(dev_t, dev)
1220b5f875a9STrond Myklebust 			__field(u32, fhandle)
1221b5f875a9STrond Myklebust 			__field(u64, fileid)
1222b5f875a9STrond Myklebust 			__field(unsigned int, valid)
122396650e2eSChuck Lever 			__field(unsigned long, error)
1224b5f875a9STrond Myklebust 		),
1225b5f875a9STrond Myklebust 
1226b5f875a9STrond Myklebust 		TP_fast_assign(
1227b5f875a9STrond Myklebust 			__entry->dev = server->s_dev;
1228b5f875a9STrond Myklebust 			__entry->valid = fattr->valid;
1229b5f875a9STrond Myklebust 			__entry->fhandle = nfs_fhandle_hash(fhandle);
1230b5f875a9STrond Myklebust 			__entry->fileid = (fattr->valid & NFS_ATTR_FATTR_FILEID) ? fattr->fileid : 0;
1231118b6292STrond Myklebust 			__entry->error = error < 0 ? -error : 0;
1232b5f875a9STrond Myklebust 		),
1233b5f875a9STrond Myklebust 
1234b5f875a9STrond Myklebust 		TP_printk(
123596650e2eSChuck Lever 			"error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x "
1236b5f875a9STrond Myklebust 			"valid=%s",
123796650e2eSChuck Lever 			-__entry->error,
12388791545eSChuck Lever 			show_nfs4_status(__entry->error),
1239b5f875a9STrond Myklebust 			MAJOR(__entry->dev), MINOR(__entry->dev),
1240b5f875a9STrond Myklebust 			(unsigned long long)__entry->fileid,
1241b5f875a9STrond Myklebust 			__entry->fhandle,
1242b5f875a9STrond Myklebust 			show_nfs_fattr_flags(__entry->valid)
1243b5f875a9STrond Myklebust 		)
1244b5f875a9STrond Myklebust );
1245b5f875a9STrond Myklebust 
1246b5f875a9STrond Myklebust #define DEFINE_NFS4_GETATTR_EVENT(name) \
1247b5f875a9STrond Myklebust 	DEFINE_EVENT(nfs4_getattr_event, name, \
1248b5f875a9STrond Myklebust 			TP_PROTO( \
1249b5f875a9STrond Myklebust 				const struct nfs_server *server, \
1250b5f875a9STrond Myklebust 				const struct nfs_fh *fhandle, \
1251b5f875a9STrond Myklebust 				const struct nfs_fattr *fattr, \
1252b5f875a9STrond Myklebust 				int error \
1253b5f875a9STrond Myklebust 			), \
1254b5f875a9STrond Myklebust 			TP_ARGS(server, fhandle, fattr, error))
1255b5f875a9STrond Myklebust DEFINE_NFS4_GETATTR_EVENT(nfs4_getattr);
1256b5f875a9STrond Myklebust DEFINE_NFS4_GETATTR_EVENT(nfs4_lookup_root);
1257b5f875a9STrond Myklebust DEFINE_NFS4_GETATTR_EVENT(nfs4_fsinfo);
1258b5f875a9STrond Myklebust 
12597cd14861STrond Myklebust DECLARE_EVENT_CLASS(nfs4_inode_callback_event,
12607cd14861STrond Myklebust 		TP_PROTO(
12617cd14861STrond Myklebust 			const struct nfs_client *clp,
12627cd14861STrond Myklebust 			const struct nfs_fh *fhandle,
12637cd14861STrond Myklebust 			const struct inode *inode,
12647cd14861STrond Myklebust 			int error
12657cd14861STrond Myklebust 		),
12667cd14861STrond Myklebust 
12677cd14861STrond Myklebust 		TP_ARGS(clp, fhandle, inode, error),
12687cd14861STrond Myklebust 
12697cd14861STrond Myklebust 		TP_STRUCT__entry(
127096650e2eSChuck Lever 			__field(unsigned long, error)
12717cd14861STrond Myklebust 			__field(dev_t, dev)
12727cd14861STrond Myklebust 			__field(u32, fhandle)
12737cd14861STrond Myklebust 			__field(u64, fileid)
12743944369dSAnna Schumaker 			__string(dstaddr, clp ? clp->cl_hostname : "unknown")
12757cd14861STrond Myklebust 		),
12767cd14861STrond Myklebust 
12777cd14861STrond Myklebust 		TP_fast_assign(
1278118b6292STrond Myklebust 			__entry->error = error < 0 ? -error : 0;
12797cd14861STrond Myklebust 			__entry->fhandle = nfs_fhandle_hash(fhandle);
12802edaead6STrond Myklebust 			if (!IS_ERR_OR_NULL(inode)) {
12817cd14861STrond Myklebust 				__entry->fileid = NFS_FILEID(inode);
12827cd14861STrond Myklebust 				__entry->dev = inode->i_sb->s_dev;
12837cd14861STrond Myklebust 			} else {
12847cd14861STrond Myklebust 				__entry->fileid = 0;
12857cd14861STrond Myklebust 				__entry->dev = 0;
12867cd14861STrond Myklebust 			}
128778c14b38SJoe Perches 			__assign_str(dstaddr, clp ? clp->cl_hostname : "unknown");
12887cd14861STrond Myklebust 		),
12897cd14861STrond Myklebust 
12907cd14861STrond Myklebust 		TP_printk(
129196650e2eSChuck Lever 			"error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x "
12927cd14861STrond Myklebust 			"dstaddr=%s",
129396650e2eSChuck Lever 			-__entry->error,
12948791545eSChuck Lever 			show_nfs4_status(__entry->error),
12957cd14861STrond Myklebust 			MAJOR(__entry->dev), MINOR(__entry->dev),
12967cd14861STrond Myklebust 			(unsigned long long)__entry->fileid,
12977cd14861STrond Myklebust 			__entry->fhandle,
12987cd14861STrond Myklebust 			__get_str(dstaddr)
12997cd14861STrond Myklebust 		)
13007cd14861STrond Myklebust );
13017cd14861STrond Myklebust 
13027cd14861STrond Myklebust #define DEFINE_NFS4_INODE_CALLBACK_EVENT(name) \
13037cd14861STrond Myklebust 	DEFINE_EVENT(nfs4_inode_callback_event, name, \
13047cd14861STrond Myklebust 			TP_PROTO( \
13057cd14861STrond Myklebust 				const struct nfs_client *clp, \
13067cd14861STrond Myklebust 				const struct nfs_fh *fhandle, \
13077cd14861STrond Myklebust 				const struct inode *inode, \
13087cd14861STrond Myklebust 				int error \
13097cd14861STrond Myklebust 			), \
13107cd14861STrond Myklebust 			TP_ARGS(clp, fhandle, inode, error))
13117cd14861STrond Myklebust DEFINE_NFS4_INODE_CALLBACK_EVENT(nfs4_cb_getattr);
13127cd14861STrond Myklebust 
1313e07db907STrond Myklebust DECLARE_EVENT_CLASS(nfs4_inode_stateid_callback_event,
1314e07db907STrond Myklebust 		TP_PROTO(
1315e07db907STrond Myklebust 			const struct nfs_client *clp,
1316e07db907STrond Myklebust 			const struct nfs_fh *fhandle,
1317e07db907STrond Myklebust 			const struct inode *inode,
1318e07db907STrond Myklebust 			const nfs4_stateid *stateid,
1319e07db907STrond Myklebust 			int error
1320e07db907STrond Myklebust 		),
1321e07db907STrond Myklebust 
1322e07db907STrond Myklebust 		TP_ARGS(clp, fhandle, inode, stateid, error),
1323e07db907STrond Myklebust 
1324e07db907STrond Myklebust 		TP_STRUCT__entry(
132596650e2eSChuck Lever 			__field(unsigned long, error)
1326e07db907STrond Myklebust 			__field(dev_t, dev)
1327e07db907STrond Myklebust 			__field(u32, fhandle)
1328e07db907STrond Myklebust 			__field(u64, fileid)
13293944369dSAnna Schumaker 			__string(dstaddr, clp ? clp->cl_hostname : "unknown")
1330e07db907STrond Myklebust 			__field(int, stateid_seq)
1331e07db907STrond Myklebust 			__field(u32, stateid_hash)
1332e07db907STrond Myklebust 		),
1333e07db907STrond Myklebust 
1334e07db907STrond Myklebust 		TP_fast_assign(
1335118b6292STrond Myklebust 			__entry->error = error < 0 ? -error : 0;
1336e07db907STrond Myklebust 			__entry->fhandle = nfs_fhandle_hash(fhandle);
13372a534a74STrond Myklebust 			if (!IS_ERR_OR_NULL(inode)) {
1338e07db907STrond Myklebust 				__entry->fileid = NFS_FILEID(inode);
1339e07db907STrond Myklebust 				__entry->dev = inode->i_sb->s_dev;
1340e07db907STrond Myklebust 			} else {
1341e07db907STrond Myklebust 				__entry->fileid = 0;
1342e07db907STrond Myklebust 				__entry->dev = 0;
1343e07db907STrond Myklebust 			}
134478c14b38SJoe Perches 			__assign_str(dstaddr, clp ? clp->cl_hostname : "unknown");
1345e07db907STrond Myklebust 			__entry->stateid_seq =
1346e07db907STrond Myklebust 				be32_to_cpu(stateid->seqid);
1347e07db907STrond Myklebust 			__entry->stateid_hash =
1348e07db907STrond Myklebust 				nfs_stateid_hash(stateid);
1349e07db907STrond Myklebust 		),
1350e07db907STrond Myklebust 
1351e07db907STrond Myklebust 		TP_printk(
135296650e2eSChuck Lever 			"error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x "
1353e07db907STrond Myklebust 			"stateid=%d:0x%08x dstaddr=%s",
135496650e2eSChuck Lever 			-__entry->error,
13558791545eSChuck Lever 			show_nfs4_status(__entry->error),
1356e07db907STrond Myklebust 			MAJOR(__entry->dev), MINOR(__entry->dev),
1357e07db907STrond Myklebust 			(unsigned long long)__entry->fileid,
1358e07db907STrond Myklebust 			__entry->fhandle,
1359e07db907STrond Myklebust 			__entry->stateid_seq, __entry->stateid_hash,
1360e07db907STrond Myklebust 			__get_str(dstaddr)
1361e07db907STrond Myklebust 		)
1362e07db907STrond Myklebust );
1363e07db907STrond Myklebust 
1364e07db907STrond Myklebust #define DEFINE_NFS4_INODE_STATEID_CALLBACK_EVENT(name) \
1365e07db907STrond Myklebust 	DEFINE_EVENT(nfs4_inode_stateid_callback_event, name, \
1366e07db907STrond Myklebust 			TP_PROTO( \
1367e07db907STrond Myklebust 				const struct nfs_client *clp, \
1368e07db907STrond Myklebust 				const struct nfs_fh *fhandle, \
1369e07db907STrond Myklebust 				const struct inode *inode, \
1370e07db907STrond Myklebust 				const nfs4_stateid *stateid, \
1371e07db907STrond Myklebust 				int error \
1372e07db907STrond Myklebust 			), \
1373e07db907STrond Myklebust 			TP_ARGS(clp, fhandle, inode, stateid, error))
1374e07db907STrond Myklebust DEFINE_NFS4_INODE_STATEID_CALLBACK_EVENT(nfs4_cb_recall);
1375e07db907STrond Myklebust DEFINE_NFS4_INODE_STATEID_CALLBACK_EVENT(nfs4_cb_layoutrecall_file);
13767cd14861STrond Myklebust 
13771f2d30b5STrond Myklebust DECLARE_EVENT_CLASS(nfs4_idmap_event,
13781f2d30b5STrond Myklebust 		TP_PROTO(
13791f2d30b5STrond Myklebust 			const char *name,
13801f2d30b5STrond Myklebust 			int len,
13811f2d30b5STrond Myklebust 			u32 id,
13821f2d30b5STrond Myklebust 			int error
13831f2d30b5STrond Myklebust 		),
13841f2d30b5STrond Myklebust 
13851f2d30b5STrond Myklebust 		TP_ARGS(name, len, id, error),
13861f2d30b5STrond Myklebust 
13871f2d30b5STrond Myklebust 		TP_STRUCT__entry(
138896650e2eSChuck Lever 			__field(unsigned long, error)
13891f2d30b5STrond Myklebust 			__field(u32, id)
13901f2d30b5STrond Myklebust 			__dynamic_array(char, name, len > 0 ? len + 1 : 1)
13911f2d30b5STrond Myklebust 		),
13921f2d30b5STrond Myklebust 
13931f2d30b5STrond Myklebust 		TP_fast_assign(
13941f2d30b5STrond Myklebust 			if (len < 0)
13951f2d30b5STrond Myklebust 				len = 0;
13961f2d30b5STrond Myklebust 			__entry->error = error < 0 ? error : 0;
13971f2d30b5STrond Myklebust 			__entry->id = id;
1398752d596bSDaniel Bristot de Oliveira 			memcpy(__get_str(name), name, len);
1399752d596bSDaniel Bristot de Oliveira 			__get_str(name)[len] = 0;
14001f2d30b5STrond Myklebust 		),
14011f2d30b5STrond Myklebust 
14021f2d30b5STrond Myklebust 		TP_printk(
140396650e2eSChuck Lever 			"error=%ld (%s) id=%u name=%s",
14048791545eSChuck Lever 			-__entry->error, show_nfs4_status(__entry->error),
14051f2d30b5STrond Myklebust 			__entry->id,
14061f2d30b5STrond Myklebust 			__get_str(name)
14071f2d30b5STrond Myklebust 		)
14081f2d30b5STrond Myklebust );
14091f2d30b5STrond Myklebust #define DEFINE_NFS4_IDMAP_EVENT(name) \
14101f2d30b5STrond Myklebust 	DEFINE_EVENT(nfs4_idmap_event, name, \
14111f2d30b5STrond Myklebust 			TP_PROTO( \
14121f2d30b5STrond Myklebust 				const char *name, \
14131f2d30b5STrond Myklebust 				int len, \
14141f2d30b5STrond Myklebust 				u32 id, \
14151f2d30b5STrond Myklebust 				int error \
14161f2d30b5STrond Myklebust 			), \
14171f2d30b5STrond Myklebust 			TP_ARGS(name, len, id, error))
14181f2d30b5STrond Myklebust DEFINE_NFS4_IDMAP_EVENT(nfs4_map_name_to_uid);
14191f2d30b5STrond Myklebust DEFINE_NFS4_IDMAP_EVENT(nfs4_map_group_to_gid);
14201f2d30b5STrond Myklebust DEFINE_NFS4_IDMAP_EVENT(nfs4_map_uid_to_name);
14211f2d30b5STrond Myklebust DEFINE_NFS4_IDMAP_EVENT(nfs4_map_gid_to_group);
14221f2d30b5STrond Myklebust 
142354898f70STrond Myklebust #ifdef CONFIG_NFS_V4_1
142454898f70STrond Myklebust #define NFS4_LSEG_LAYOUT_STATEID_HASH(lseg) \
142554898f70STrond Myklebust 	(lseg ? nfs_stateid_hash(&lseg->pls_layout->plh_stateid) : 0)
142654898f70STrond Myklebust #else
142754898f70STrond Myklebust #define NFS4_LSEG_LAYOUT_STATEID_HASH(lseg) (0)
142854898f70STrond Myklebust #endif
142954898f70STrond Myklebust 
1430cc668ab3STrond Myklebust DECLARE_EVENT_CLASS(nfs4_read_event,
1431cc668ab3STrond Myklebust 		TP_PROTO(
1432d45f60c6SWeston Andros Adamson 			const struct nfs_pgio_header *hdr,
1433cc668ab3STrond Myklebust 			int error
1434cc668ab3STrond Myklebust 		),
1435cc668ab3STrond Myklebust 
1436d45f60c6SWeston Andros Adamson 		TP_ARGS(hdr, error),
1437cc668ab3STrond Myklebust 
1438cc668ab3STrond Myklebust 		TP_STRUCT__entry(
1439cc668ab3STrond Myklebust 			__field(dev_t, dev)
1440cc668ab3STrond Myklebust 			__field(u32, fhandle)
1441cc668ab3STrond Myklebust 			__field(u64, fileid)
1442cc668ab3STrond Myklebust 			__field(loff_t, offset)
144325925b00STrond Myklebust 			__field(u32, arg_count)
144425925b00STrond Myklebust 			__field(u32, res_count)
144596650e2eSChuck Lever 			__field(unsigned long, error)
144648c9579aSOlga Kornievskaia 			__field(int, stateid_seq)
144748c9579aSOlga Kornievskaia 			__field(u32, stateid_hash)
144854898f70STrond Myklebust 			__field(int, layoutstateid_seq)
144954898f70STrond Myklebust 			__field(u32, layoutstateid_hash)
1450cc668ab3STrond Myklebust 		),
1451cc668ab3STrond Myklebust 
1452cc668ab3STrond Myklebust 		TP_fast_assign(
1453d45f60c6SWeston Andros Adamson 			const struct inode *inode = hdr->inode;
145425925b00STrond Myklebust 			const struct nfs_inode *nfsi = NFS_I(inode);
145525925b00STrond Myklebust 			const struct nfs_fh *fh = hdr->args.fh ?
145625925b00STrond Myklebust 						  hdr->args.fh : &nfsi->fh;
145748c9579aSOlga Kornievskaia 			const struct nfs4_state *state =
145848c9579aSOlga Kornievskaia 				hdr->args.context->state;
145954898f70STrond Myklebust 			const struct pnfs_layout_segment *lseg = hdr->lseg;
146025925b00STrond Myklebust 
1461cc668ab3STrond Myklebust 			__entry->dev = inode->i_sb->s_dev;
146225925b00STrond Myklebust 			__entry->fileid = nfsi->fileid;
146325925b00STrond Myklebust 			__entry->fhandle = nfs_fhandle_hash(fh);
1464d45f60c6SWeston Andros Adamson 			__entry->offset = hdr->args.offset;
146525925b00STrond Myklebust 			__entry->arg_count = hdr->args.count;
146625925b00STrond Myklebust 			__entry->res_count = hdr->res.count;
146796650e2eSChuck Lever 			__entry->error = error < 0 ? -error : 0;
146848c9579aSOlga Kornievskaia 			__entry->stateid_seq =
146948c9579aSOlga Kornievskaia 				be32_to_cpu(state->stateid.seqid);
147048c9579aSOlga Kornievskaia 			__entry->stateid_hash =
147148c9579aSOlga Kornievskaia 				nfs_stateid_hash(&state->stateid);
147254898f70STrond Myklebust 			__entry->layoutstateid_seq = lseg ? lseg->pls_seq : 0;
147354898f70STrond Myklebust 			__entry->layoutstateid_hash =
147454898f70STrond Myklebust 				NFS4_LSEG_LAYOUT_STATEID_HASH(lseg);
1475cc668ab3STrond Myklebust 		),
1476cc668ab3STrond Myklebust 
1477cc668ab3STrond Myklebust 		TP_printk(
147896650e2eSChuck Lever 			"error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x "
147954898f70STrond Myklebust 			"offset=%lld count=%u res=%u stateid=%d:0x%08x "
148054898f70STrond Myklebust 			"layoutstateid=%d:0x%08x",
148196650e2eSChuck Lever 			-__entry->error,
14828791545eSChuck Lever 			show_nfs4_status(__entry->error),
1483cc668ab3STrond Myklebust 			MAJOR(__entry->dev), MINOR(__entry->dev),
1484cc668ab3STrond Myklebust 			(unsigned long long)__entry->fileid,
1485cc668ab3STrond Myklebust 			__entry->fhandle,
1486cc668ab3STrond Myklebust 			(long long)__entry->offset,
148725925b00STrond Myklebust 			__entry->arg_count, __entry->res_count,
148854898f70STrond Myklebust 			__entry->stateid_seq, __entry->stateid_hash,
148954898f70STrond Myklebust 			__entry->layoutstateid_seq, __entry->layoutstateid_hash
1490cc668ab3STrond Myklebust 		)
1491cc668ab3STrond Myklebust );
1492cc668ab3STrond Myklebust #define DEFINE_NFS4_READ_EVENT(name) \
1493cc668ab3STrond Myklebust 	DEFINE_EVENT(nfs4_read_event, name, \
1494cc668ab3STrond Myklebust 			TP_PROTO( \
1495d45f60c6SWeston Andros Adamson 				const struct nfs_pgio_header *hdr, \
1496cc668ab3STrond Myklebust 				int error \
1497cc668ab3STrond Myklebust 			), \
1498d45f60c6SWeston Andros Adamson 			TP_ARGS(hdr, error))
1499cc668ab3STrond Myklebust DEFINE_NFS4_READ_EVENT(nfs4_read);
1500cc668ab3STrond Myklebust #ifdef CONFIG_NFS_V4_1
1501cc668ab3STrond Myklebust DEFINE_NFS4_READ_EVENT(nfs4_pnfs_read);
1502cc668ab3STrond Myklebust #endif /* CONFIG_NFS_V4_1 */
1503cc668ab3STrond Myklebust 
1504cc668ab3STrond Myklebust DECLARE_EVENT_CLASS(nfs4_write_event,
1505cc668ab3STrond Myklebust 		TP_PROTO(
1506d45f60c6SWeston Andros Adamson 			const struct nfs_pgio_header *hdr,
1507cc668ab3STrond Myklebust 			int error
1508cc668ab3STrond Myklebust 		),
1509cc668ab3STrond Myklebust 
1510d45f60c6SWeston Andros Adamson 		TP_ARGS(hdr, error),
1511cc668ab3STrond Myklebust 
1512cc668ab3STrond Myklebust 		TP_STRUCT__entry(
1513cc668ab3STrond Myklebust 			__field(dev_t, dev)
1514cc668ab3STrond Myklebust 			__field(u32, fhandle)
1515cc668ab3STrond Myklebust 			__field(u64, fileid)
1516cc668ab3STrond Myklebust 			__field(loff_t, offset)
151725925b00STrond Myklebust 			__field(u32, arg_count)
151825925b00STrond Myklebust 			__field(u32, res_count)
151996650e2eSChuck Lever 			__field(unsigned long, error)
152048c9579aSOlga Kornievskaia 			__field(int, stateid_seq)
152148c9579aSOlga Kornievskaia 			__field(u32, stateid_hash)
152254898f70STrond Myklebust 			__field(int, layoutstateid_seq)
152354898f70STrond Myklebust 			__field(u32, layoutstateid_hash)
1524cc668ab3STrond Myklebust 		),
1525cc668ab3STrond Myklebust 
1526cc668ab3STrond Myklebust 		TP_fast_assign(
1527d45f60c6SWeston Andros Adamson 			const struct inode *inode = hdr->inode;
152825925b00STrond Myklebust 			const struct nfs_inode *nfsi = NFS_I(inode);
152925925b00STrond Myklebust 			const struct nfs_fh *fh = hdr->args.fh ?
153025925b00STrond Myklebust 						  hdr->args.fh : &nfsi->fh;
153148c9579aSOlga Kornievskaia 			const struct nfs4_state *state =
153248c9579aSOlga Kornievskaia 				hdr->args.context->state;
153354898f70STrond Myklebust 			const struct pnfs_layout_segment *lseg = hdr->lseg;
153425925b00STrond Myklebust 
1535cc668ab3STrond Myklebust 			__entry->dev = inode->i_sb->s_dev;
153625925b00STrond Myklebust 			__entry->fileid = nfsi->fileid;
153725925b00STrond Myklebust 			__entry->fhandle = nfs_fhandle_hash(fh);
1538d45f60c6SWeston Andros Adamson 			__entry->offset = hdr->args.offset;
153925925b00STrond Myklebust 			__entry->arg_count = hdr->args.count;
154025925b00STrond Myklebust 			__entry->res_count = hdr->res.count;
154196650e2eSChuck Lever 			__entry->error = error < 0 ? -error : 0;
154248c9579aSOlga Kornievskaia 			__entry->stateid_seq =
154348c9579aSOlga Kornievskaia 				be32_to_cpu(state->stateid.seqid);
154448c9579aSOlga Kornievskaia 			__entry->stateid_hash =
154548c9579aSOlga Kornievskaia 				nfs_stateid_hash(&state->stateid);
154654898f70STrond Myklebust 			__entry->layoutstateid_seq = lseg ? lseg->pls_seq : 0;
154754898f70STrond Myklebust 			__entry->layoutstateid_hash =
154854898f70STrond Myklebust 				NFS4_LSEG_LAYOUT_STATEID_HASH(lseg);
1549cc668ab3STrond Myklebust 		),
1550cc668ab3STrond Myklebust 
1551cc668ab3STrond Myklebust 		TP_printk(
155296650e2eSChuck Lever 			"error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x "
155354898f70STrond Myklebust 			"offset=%lld count=%u res=%u stateid=%d:0x%08x "
155454898f70STrond Myklebust 			"layoutstateid=%d:0x%08x",
155596650e2eSChuck Lever 			-__entry->error,
15568791545eSChuck Lever 			show_nfs4_status(__entry->error),
1557cc668ab3STrond Myklebust 			MAJOR(__entry->dev), MINOR(__entry->dev),
1558cc668ab3STrond Myklebust 			(unsigned long long)__entry->fileid,
1559cc668ab3STrond Myklebust 			__entry->fhandle,
1560cc668ab3STrond Myklebust 			(long long)__entry->offset,
156125925b00STrond Myklebust 			__entry->arg_count, __entry->res_count,
156254898f70STrond Myklebust 			__entry->stateid_seq, __entry->stateid_hash,
156354898f70STrond Myklebust 			__entry->layoutstateid_seq, __entry->layoutstateid_hash
1564cc668ab3STrond Myklebust 		)
1565cc668ab3STrond Myklebust );
1566cc668ab3STrond Myklebust 
1567cc668ab3STrond Myklebust #define DEFINE_NFS4_WRITE_EVENT(name) \
1568cc668ab3STrond Myklebust 	DEFINE_EVENT(nfs4_write_event, name, \
1569cc668ab3STrond Myklebust 			TP_PROTO( \
1570d45f60c6SWeston Andros Adamson 				const struct nfs_pgio_header *hdr, \
1571cc668ab3STrond Myklebust 				int error \
1572cc668ab3STrond Myklebust 			), \
1573d45f60c6SWeston Andros Adamson 			TP_ARGS(hdr, error))
1574cc668ab3STrond Myklebust DEFINE_NFS4_WRITE_EVENT(nfs4_write);
1575cc668ab3STrond Myklebust #ifdef CONFIG_NFS_V4_1
1576cc668ab3STrond Myklebust DEFINE_NFS4_WRITE_EVENT(nfs4_pnfs_write);
1577cc668ab3STrond Myklebust #endif /* CONFIG_NFS_V4_1 */
1578cc668ab3STrond Myklebust 
1579cc668ab3STrond Myklebust DECLARE_EVENT_CLASS(nfs4_commit_event,
1580cc668ab3STrond Myklebust 		TP_PROTO(
1581cc668ab3STrond Myklebust 			const struct nfs_commit_data *data,
1582cc668ab3STrond Myklebust 			int error
1583cc668ab3STrond Myklebust 		),
1584cc668ab3STrond Myklebust 
1585cc668ab3STrond Myklebust 		TP_ARGS(data, error),
1586cc668ab3STrond Myklebust 
1587cc668ab3STrond Myklebust 		TP_STRUCT__entry(
1588cc668ab3STrond Myklebust 			__field(dev_t, dev)
1589cc668ab3STrond Myklebust 			__field(u32, fhandle)
1590cc668ab3STrond Myklebust 			__field(u64, fileid)
159196650e2eSChuck Lever 			__field(unsigned long, error)
159225925b00STrond Myklebust 			__field(loff_t, offset)
159325925b00STrond Myklebust 			__field(u32, count)
159454898f70STrond Myklebust 			__field(int, layoutstateid_seq)
159554898f70STrond Myklebust 			__field(u32, layoutstateid_hash)
1596cc668ab3STrond Myklebust 		),
1597cc668ab3STrond Myklebust 
1598cc668ab3STrond Myklebust 		TP_fast_assign(
1599cc668ab3STrond Myklebust 			const struct inode *inode = data->inode;
160025925b00STrond Myklebust 			const struct nfs_inode *nfsi = NFS_I(inode);
160125925b00STrond Myklebust 			const struct nfs_fh *fh = data->args.fh ?
160225925b00STrond Myklebust 						  data->args.fh : &nfsi->fh;
160354898f70STrond Myklebust 			const struct pnfs_layout_segment *lseg = data->lseg;
160425925b00STrond Myklebust 
1605cc668ab3STrond Myklebust 			__entry->dev = inode->i_sb->s_dev;
160625925b00STrond Myklebust 			__entry->fileid = nfsi->fileid;
160725925b00STrond Myklebust 			__entry->fhandle = nfs_fhandle_hash(fh);
1608cc668ab3STrond Myklebust 			__entry->offset = data->args.offset;
1609cc668ab3STrond Myklebust 			__entry->count = data->args.count;
161025925b00STrond Myklebust 			__entry->error = error < 0 ? -error : 0;
161154898f70STrond Myklebust 			__entry->layoutstateid_seq = lseg ? lseg->pls_seq : 0;
161254898f70STrond Myklebust 			__entry->layoutstateid_hash =
161354898f70STrond Myklebust 				NFS4_LSEG_LAYOUT_STATEID_HASH(lseg);
1614cc668ab3STrond Myklebust 		),
1615cc668ab3STrond Myklebust 
1616cc668ab3STrond Myklebust 		TP_printk(
161796650e2eSChuck Lever 			"error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x "
161854898f70STrond Myklebust 			"offset=%lld count=%u layoutstateid=%d:0x%08x",
161996650e2eSChuck Lever 			-__entry->error,
16208791545eSChuck Lever 			show_nfs4_status(__entry->error),
1621cc668ab3STrond Myklebust 			MAJOR(__entry->dev), MINOR(__entry->dev),
1622cc668ab3STrond Myklebust 			(unsigned long long)__entry->fileid,
1623cc668ab3STrond Myklebust 			__entry->fhandle,
1624cc668ab3STrond Myklebust 			(long long)__entry->offset,
162554898f70STrond Myklebust 			__entry->count,
162654898f70STrond Myklebust 			__entry->layoutstateid_seq, __entry->layoutstateid_hash
1627cc668ab3STrond Myklebust 		)
1628cc668ab3STrond Myklebust );
1629cc668ab3STrond Myklebust #define DEFINE_NFS4_COMMIT_EVENT(name) \
1630cc668ab3STrond Myklebust 	DEFINE_EVENT(nfs4_commit_event, name, \
1631cc668ab3STrond Myklebust 			TP_PROTO( \
1632cc668ab3STrond Myklebust 				const struct nfs_commit_data *data, \
1633cc668ab3STrond Myklebust 				int error \
1634cc668ab3STrond Myklebust 			), \
1635cc668ab3STrond Myklebust 			TP_ARGS(data, error))
1636cc668ab3STrond Myklebust DEFINE_NFS4_COMMIT_EVENT(nfs4_commit);
1637cc668ab3STrond Myklebust #ifdef CONFIG_NFS_V4_1
1638cc668ab3STrond Myklebust DEFINE_NFS4_COMMIT_EVENT(nfs4_pnfs_commit_ds);
16391037e6eaSTrond Myklebust 
16401037e6eaSTrond Myklebust TRACE_EVENT(nfs4_layoutget,
16411037e6eaSTrond Myklebust 		TP_PROTO(
16421037e6eaSTrond Myklebust 			const struct nfs_open_context *ctx,
16431037e6eaSTrond Myklebust 			const struct pnfs_layout_range *args,
16441037e6eaSTrond Myklebust 			const struct pnfs_layout_range *res,
164548c9579aSOlga Kornievskaia 			const nfs4_stateid *layout_stateid,
16461037e6eaSTrond Myklebust 			int error
16471037e6eaSTrond Myklebust 		),
16481037e6eaSTrond Myklebust 
164948c9579aSOlga Kornievskaia 		TP_ARGS(ctx, args, res, layout_stateid, error),
16501037e6eaSTrond Myklebust 
16511037e6eaSTrond Myklebust 		TP_STRUCT__entry(
16521037e6eaSTrond Myklebust 			__field(dev_t, dev)
16531037e6eaSTrond Myklebust 			__field(u32, fhandle)
16541037e6eaSTrond Myklebust 			__field(u64, fileid)
16551037e6eaSTrond Myklebust 			__field(u32, iomode)
16561037e6eaSTrond Myklebust 			__field(u64, offset)
16571037e6eaSTrond Myklebust 			__field(u64, count)
165896650e2eSChuck Lever 			__field(unsigned long, error)
165948c9579aSOlga Kornievskaia 			__field(int, stateid_seq)
166048c9579aSOlga Kornievskaia 			__field(u32, stateid_hash)
166148c9579aSOlga Kornievskaia 			__field(int, layoutstateid_seq)
166248c9579aSOlga Kornievskaia 			__field(u32, layoutstateid_hash)
16631037e6eaSTrond Myklebust 		),
16641037e6eaSTrond Myklebust 
16651037e6eaSTrond Myklebust 		TP_fast_assign(
16662b0143b5SDavid Howells 			const struct inode *inode = d_inode(ctx->dentry);
166748c9579aSOlga Kornievskaia 			const struct nfs4_state *state = ctx->state;
16681037e6eaSTrond Myklebust 			__entry->dev = inode->i_sb->s_dev;
16691037e6eaSTrond Myklebust 			__entry->fileid = NFS_FILEID(inode);
16701037e6eaSTrond Myklebust 			__entry->fhandle = nfs_fhandle_hash(NFS_FH(inode));
16711037e6eaSTrond Myklebust 			__entry->iomode = args->iomode;
16721037e6eaSTrond Myklebust 			__entry->offset = args->offset;
16731037e6eaSTrond Myklebust 			__entry->count = args->length;
1674118b6292STrond Myklebust 			__entry->error = error < 0 ? -error : 0;
167548c9579aSOlga Kornievskaia 			__entry->stateid_seq =
167648c9579aSOlga Kornievskaia 				be32_to_cpu(state->stateid.seqid);
167748c9579aSOlga Kornievskaia 			__entry->stateid_hash =
167848c9579aSOlga Kornievskaia 				nfs_stateid_hash(&state->stateid);
167948c9579aSOlga Kornievskaia 			if (!error) {
168048c9579aSOlga Kornievskaia 				__entry->layoutstateid_seq =
168148c9579aSOlga Kornievskaia 				be32_to_cpu(layout_stateid->seqid);
168248c9579aSOlga Kornievskaia 				__entry->layoutstateid_hash =
168348c9579aSOlga Kornievskaia 				nfs_stateid_hash(layout_stateid);
168448c9579aSOlga Kornievskaia 			} else {
168548c9579aSOlga Kornievskaia 				__entry->layoutstateid_seq = 0;
168648c9579aSOlga Kornievskaia 				__entry->layoutstateid_hash = 0;
168748c9579aSOlga Kornievskaia 			}
16881037e6eaSTrond Myklebust 		),
16891037e6eaSTrond Myklebust 
16901037e6eaSTrond Myklebust 		TP_printk(
169196650e2eSChuck Lever 			"error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x "
169248c9579aSOlga Kornievskaia 			"iomode=%s offset=%llu count=%llu stateid=%d:0x%08x "
169348c9579aSOlga Kornievskaia 			"layoutstateid=%d:0x%08x",
169496650e2eSChuck Lever 			-__entry->error,
16958791545eSChuck Lever 			show_nfs4_status(__entry->error),
16961037e6eaSTrond Myklebust 			MAJOR(__entry->dev), MINOR(__entry->dev),
16971037e6eaSTrond Myklebust 			(unsigned long long)__entry->fileid,
16981037e6eaSTrond Myklebust 			__entry->fhandle,
16998791545eSChuck Lever 			show_pnfs_layout_iomode(__entry->iomode),
17001037e6eaSTrond Myklebust 			(unsigned long long)__entry->offset,
170148c9579aSOlga Kornievskaia 			(unsigned long long)__entry->count,
170248c9579aSOlga Kornievskaia 			__entry->stateid_seq, __entry->stateid_hash,
170348c9579aSOlga Kornievskaia 			__entry->layoutstateid_seq, __entry->layoutstateid_hash
17041037e6eaSTrond Myklebust 		)
17051037e6eaSTrond Myklebust );
17061037e6eaSTrond Myklebust 
170748c9579aSOlga Kornievskaia DEFINE_NFS4_INODE_STATEID_EVENT(nfs4_layoutcommit);
170848c9579aSOlga Kornievskaia DEFINE_NFS4_INODE_STATEID_EVENT(nfs4_layoutreturn);
1709a19b4785STrond Myklebust DEFINE_NFS4_INODE_STATEID_EVENT(nfs4_layoutreturn_on_close);
1710638037b1STrond Myklebust DEFINE_NFS4_INODE_STATEID_EVENT(nfs4_layouterror);
1711638037b1STrond Myklebust DEFINE_NFS4_INODE_STATEID_EVENT(nfs4_layoutstats);
17121037e6eaSTrond Myklebust 
17135b2095d0SChuck Lever TRACE_DEFINE_ENUM(PNFS_UPDATE_LAYOUT_UNKNOWN);
17145b2095d0SChuck Lever TRACE_DEFINE_ENUM(PNFS_UPDATE_LAYOUT_NO_PNFS);
17155b2095d0SChuck Lever TRACE_DEFINE_ENUM(PNFS_UPDATE_LAYOUT_RD_ZEROLEN);
17165b2095d0SChuck Lever TRACE_DEFINE_ENUM(PNFS_UPDATE_LAYOUT_MDSTHRESH);
17175b2095d0SChuck Lever TRACE_DEFINE_ENUM(PNFS_UPDATE_LAYOUT_NOMEM);
17185b2095d0SChuck Lever TRACE_DEFINE_ENUM(PNFS_UPDATE_LAYOUT_BULK_RECALL);
17195b2095d0SChuck Lever TRACE_DEFINE_ENUM(PNFS_UPDATE_LAYOUT_IO_TEST_FAIL);
17205b2095d0SChuck Lever TRACE_DEFINE_ENUM(PNFS_UPDATE_LAYOUT_FOUND_CACHED);
17215b2095d0SChuck Lever TRACE_DEFINE_ENUM(PNFS_UPDATE_LAYOUT_RETURN);
17225b2095d0SChuck Lever TRACE_DEFINE_ENUM(PNFS_UPDATE_LAYOUT_BLOCKED);
17235b2095d0SChuck Lever TRACE_DEFINE_ENUM(PNFS_UPDATE_LAYOUT_INVALID_OPEN);
17245b2095d0SChuck Lever TRACE_DEFINE_ENUM(PNFS_UPDATE_LAYOUT_RETRY);
17255b2095d0SChuck Lever TRACE_DEFINE_ENUM(PNFS_UPDATE_LAYOUT_SEND_LAYOUTGET);
1726d5b9216fSTrond Myklebust TRACE_DEFINE_ENUM(PNFS_UPDATE_LAYOUT_EXIT);
17275b2095d0SChuck Lever 
17289a4bf31dSJeff Layton #define show_pnfs_update_layout_reason(reason)				\
17299a4bf31dSJeff Layton 	__print_symbolic(reason,					\
17309a4bf31dSJeff Layton 		{ PNFS_UPDATE_LAYOUT_UNKNOWN, "unknown" },		\
17319a4bf31dSJeff Layton 		{ PNFS_UPDATE_LAYOUT_NO_PNFS, "no pnfs" },		\
17329a4bf31dSJeff Layton 		{ PNFS_UPDATE_LAYOUT_RD_ZEROLEN, "read+zerolen" },	\
17339a4bf31dSJeff Layton 		{ PNFS_UPDATE_LAYOUT_MDSTHRESH, "mdsthresh" },		\
17349a4bf31dSJeff Layton 		{ PNFS_UPDATE_LAYOUT_NOMEM, "nomem" },			\
17359a4bf31dSJeff Layton 		{ PNFS_UPDATE_LAYOUT_BULK_RECALL, "bulk recall" },	\
17369a4bf31dSJeff Layton 		{ PNFS_UPDATE_LAYOUT_IO_TEST_FAIL, "io test fail" },	\
17379a4bf31dSJeff Layton 		{ PNFS_UPDATE_LAYOUT_FOUND_CACHED, "found cached" },	\
17389a4bf31dSJeff Layton 		{ PNFS_UPDATE_LAYOUT_RETURN, "layoutreturn" },		\
17399a4bf31dSJeff Layton 		{ PNFS_UPDATE_LAYOUT_BLOCKED, "layouts blocked" },	\
1740183d9e7bSJeff Layton 		{ PNFS_UPDATE_LAYOUT_INVALID_OPEN, "invalid open" },	\
1741183d9e7bSJeff Layton 		{ PNFS_UPDATE_LAYOUT_RETRY, "retrying" },	\
1742d5b9216fSTrond Myklebust 		{ PNFS_UPDATE_LAYOUT_SEND_LAYOUTGET, "sent layoutget" }, \
1743d5b9216fSTrond Myklebust 		{ PNFS_UPDATE_LAYOUT_EXIT, "exit" })
17449a4bf31dSJeff Layton 
17459a4bf31dSJeff Layton TRACE_EVENT(pnfs_update_layout,
17469a4bf31dSJeff Layton 		TP_PROTO(struct inode *inode,
17479a4bf31dSJeff Layton 			loff_t pos,
17489a4bf31dSJeff Layton 			u64 count,
17499a4bf31dSJeff Layton 			enum pnfs_iomode iomode,
1750f4848303STrond Myklebust 			struct pnfs_layout_hdr *lo,
1751183d9e7bSJeff Layton 			struct pnfs_layout_segment *lseg,
17529a4bf31dSJeff Layton 			enum pnfs_update_layout_reason reason
17539a4bf31dSJeff Layton 		),
1754183d9e7bSJeff Layton 		TP_ARGS(inode, pos, count, iomode, lo, lseg, reason),
17559a4bf31dSJeff Layton 		TP_STRUCT__entry(
17569a4bf31dSJeff Layton 			__field(dev_t, dev)
17579a4bf31dSJeff Layton 			__field(u64, fileid)
17589a4bf31dSJeff Layton 			__field(u32, fhandle)
17599a4bf31dSJeff Layton 			__field(loff_t, pos)
17609a4bf31dSJeff Layton 			__field(u64, count)
17619a4bf31dSJeff Layton 			__field(enum pnfs_iomode, iomode)
1762f4848303STrond Myklebust 			__field(int, layoutstateid_seq)
1763f4848303STrond Myklebust 			__field(u32, layoutstateid_hash)
1764183d9e7bSJeff Layton 			__field(long, lseg)
17659a4bf31dSJeff Layton 			__field(enum pnfs_update_layout_reason, reason)
17669a4bf31dSJeff Layton 		),
17679a4bf31dSJeff Layton 		TP_fast_assign(
17689a4bf31dSJeff Layton 			__entry->dev = inode->i_sb->s_dev;
17699a4bf31dSJeff Layton 			__entry->fileid = NFS_FILEID(inode);
17709a4bf31dSJeff Layton 			__entry->fhandle = nfs_fhandle_hash(NFS_FH(inode));
17719a4bf31dSJeff Layton 			__entry->pos = pos;
17729a4bf31dSJeff Layton 			__entry->count = count;
17739a4bf31dSJeff Layton 			__entry->iomode = iomode;
17749a4bf31dSJeff Layton 			__entry->reason = reason;
1775f4848303STrond Myklebust 			if (lo != NULL) {
1776f4848303STrond Myklebust 				__entry->layoutstateid_seq =
1777f4848303STrond Myklebust 				be32_to_cpu(lo->plh_stateid.seqid);
1778f4848303STrond Myklebust 				__entry->layoutstateid_hash =
1779f4848303STrond Myklebust 				nfs_stateid_hash(&lo->plh_stateid);
1780f4848303STrond Myklebust 			} else {
1781f4848303STrond Myklebust 				__entry->layoutstateid_seq = 0;
1782f4848303STrond Myklebust 				__entry->layoutstateid_hash = 0;
1783f4848303STrond Myklebust 			}
1784183d9e7bSJeff Layton 			__entry->lseg = (long)lseg;
17859a4bf31dSJeff Layton 		),
17869a4bf31dSJeff Layton 		TP_printk(
17879a4bf31dSJeff Layton 			"fileid=%02x:%02x:%llu fhandle=0x%08x "
1788f4848303STrond Myklebust 			"iomode=%s pos=%llu count=%llu "
1789183d9e7bSJeff Layton 			"layoutstateid=%d:0x%08x lseg=0x%lx (%s)",
17909a4bf31dSJeff Layton 			MAJOR(__entry->dev), MINOR(__entry->dev),
17919a4bf31dSJeff Layton 			(unsigned long long)__entry->fileid,
17929a4bf31dSJeff Layton 			__entry->fhandle,
17938791545eSChuck Lever 			show_pnfs_layout_iomode(__entry->iomode),
17949a4bf31dSJeff Layton 			(unsigned long long)__entry->pos,
1795f4848303STrond Myklebust 			(unsigned long long)__entry->count,
1796f4848303STrond Myklebust 			__entry->layoutstateid_seq, __entry->layoutstateid_hash,
1797183d9e7bSJeff Layton 			__entry->lseg,
17989a4bf31dSJeff Layton 			show_pnfs_update_layout_reason(__entry->reason)
17999a4bf31dSJeff Layton 		)
18009a4bf31dSJeff Layton );
18019a4bf31dSJeff Layton 
1802d5b9216fSTrond Myklebust DECLARE_EVENT_CLASS(pnfs_layout_event,
1803d5b9216fSTrond Myklebust 		TP_PROTO(struct inode *inode,
1804d5b9216fSTrond Myklebust 			loff_t pos,
1805d5b9216fSTrond Myklebust 			u64 count,
1806d5b9216fSTrond Myklebust 			enum pnfs_iomode iomode,
1807d5b9216fSTrond Myklebust 			struct pnfs_layout_hdr *lo,
1808d5b9216fSTrond Myklebust 			struct pnfs_layout_segment *lseg
1809d5b9216fSTrond Myklebust 		),
1810d5b9216fSTrond Myklebust 		TP_ARGS(inode, pos, count, iomode, lo, lseg),
1811d5b9216fSTrond Myklebust 		TP_STRUCT__entry(
1812d5b9216fSTrond Myklebust 			__field(dev_t, dev)
1813d5b9216fSTrond Myklebust 			__field(u64, fileid)
1814d5b9216fSTrond Myklebust 			__field(u32, fhandle)
1815d5b9216fSTrond Myklebust 			__field(loff_t, pos)
1816d5b9216fSTrond Myklebust 			__field(u64, count)
1817d5b9216fSTrond Myklebust 			__field(enum pnfs_iomode, iomode)
1818d5b9216fSTrond Myklebust 			__field(int, layoutstateid_seq)
1819d5b9216fSTrond Myklebust 			__field(u32, layoutstateid_hash)
1820d5b9216fSTrond Myklebust 			__field(long, lseg)
1821d5b9216fSTrond Myklebust 		),
1822d5b9216fSTrond Myklebust 		TP_fast_assign(
1823d5b9216fSTrond Myklebust 			__entry->dev = inode->i_sb->s_dev;
1824d5b9216fSTrond Myklebust 			__entry->fileid = NFS_FILEID(inode);
1825d5b9216fSTrond Myklebust 			__entry->fhandle = nfs_fhandle_hash(NFS_FH(inode));
1826d5b9216fSTrond Myklebust 			__entry->pos = pos;
1827d5b9216fSTrond Myklebust 			__entry->count = count;
1828d5b9216fSTrond Myklebust 			__entry->iomode = iomode;
1829d5b9216fSTrond Myklebust 			if (lo != NULL) {
1830d5b9216fSTrond Myklebust 				__entry->layoutstateid_seq =
1831d5b9216fSTrond Myklebust 				be32_to_cpu(lo->plh_stateid.seqid);
1832d5b9216fSTrond Myklebust 				__entry->layoutstateid_hash =
1833d5b9216fSTrond Myklebust 				nfs_stateid_hash(&lo->plh_stateid);
1834d5b9216fSTrond Myklebust 			} else {
1835d5b9216fSTrond Myklebust 				__entry->layoutstateid_seq = 0;
1836d5b9216fSTrond Myklebust 				__entry->layoutstateid_hash = 0;
1837d5b9216fSTrond Myklebust 			}
1838d5b9216fSTrond Myklebust 			__entry->lseg = (long)lseg;
1839d5b9216fSTrond Myklebust 		),
1840d5b9216fSTrond Myklebust 		TP_printk(
1841d5b9216fSTrond Myklebust 			"fileid=%02x:%02x:%llu fhandle=0x%08x "
1842d5b9216fSTrond Myklebust 			"iomode=%s pos=%llu count=%llu "
1843d5b9216fSTrond Myklebust 			"layoutstateid=%d:0x%08x lseg=0x%lx",
1844d5b9216fSTrond Myklebust 			MAJOR(__entry->dev), MINOR(__entry->dev),
1845d5b9216fSTrond Myklebust 			(unsigned long long)__entry->fileid,
1846d5b9216fSTrond Myklebust 			__entry->fhandle,
18478791545eSChuck Lever 			show_pnfs_layout_iomode(__entry->iomode),
1848d5b9216fSTrond Myklebust 			(unsigned long long)__entry->pos,
1849d5b9216fSTrond Myklebust 			(unsigned long long)__entry->count,
1850d5b9216fSTrond Myklebust 			__entry->layoutstateid_seq, __entry->layoutstateid_hash,
1851d5b9216fSTrond Myklebust 			__entry->lseg
1852d5b9216fSTrond Myklebust 		)
1853d5b9216fSTrond Myklebust );
1854d5b9216fSTrond Myklebust 
1855d5b9216fSTrond Myklebust #define DEFINE_PNFS_LAYOUT_EVENT(name) \
1856d5b9216fSTrond Myklebust 	DEFINE_EVENT(pnfs_layout_event, name, \
1857d5b9216fSTrond Myklebust 		TP_PROTO(struct inode *inode, \
1858d5b9216fSTrond Myklebust 			loff_t pos, \
1859d5b9216fSTrond Myklebust 			u64 count, \
1860d5b9216fSTrond Myklebust 			enum pnfs_iomode iomode, \
1861d5b9216fSTrond Myklebust 			struct pnfs_layout_hdr *lo, \
1862d5b9216fSTrond Myklebust 			struct pnfs_layout_segment *lseg \
1863d5b9216fSTrond Myklebust 		), \
1864d5b9216fSTrond Myklebust 		TP_ARGS(inode, pos, count, iomode, lo, lseg))
1865d5b9216fSTrond Myklebust 
1866d5b9216fSTrond Myklebust DEFINE_PNFS_LAYOUT_EVENT(pnfs_mds_fallback_pg_init_read);
1867d5b9216fSTrond Myklebust DEFINE_PNFS_LAYOUT_EVENT(pnfs_mds_fallback_pg_init_write);
1868d5b9216fSTrond Myklebust DEFINE_PNFS_LAYOUT_EVENT(pnfs_mds_fallback_pg_get_mirror_count);
1869d5b9216fSTrond Myklebust DEFINE_PNFS_LAYOUT_EVENT(pnfs_mds_fallback_read_done);
1870d5b9216fSTrond Myklebust DEFINE_PNFS_LAYOUT_EVENT(pnfs_mds_fallback_write_done);
1871d5b9216fSTrond Myklebust DEFINE_PNFS_LAYOUT_EVENT(pnfs_mds_fallback_read_pagelist);
1872d5b9216fSTrond Myklebust DEFINE_PNFS_LAYOUT_EVENT(pnfs_mds_fallback_write_pagelist);
1873d5b9216fSTrond Myklebust 
1874cac1d3a2STrond Myklebust DECLARE_EVENT_CLASS(nfs4_deviceid_event,
1875cac1d3a2STrond Myklebust 		TP_PROTO(
1876cac1d3a2STrond Myklebust 			const struct nfs_client *clp,
1877cac1d3a2STrond Myklebust 			const struct nfs4_deviceid *deviceid
1878cac1d3a2STrond Myklebust 		),
1879cac1d3a2STrond Myklebust 
1880cac1d3a2STrond Myklebust 		TP_ARGS(clp, deviceid),
1881cac1d3a2STrond Myklebust 
1882cac1d3a2STrond Myklebust 		TP_STRUCT__entry(
1883cac1d3a2STrond Myklebust 			__string(dstaddr, clp->cl_hostname)
1884cac1d3a2STrond Myklebust 			__array(unsigned char, deviceid, NFS4_DEVICEID4_SIZE)
1885cac1d3a2STrond Myklebust 		),
1886cac1d3a2STrond Myklebust 
1887cac1d3a2STrond Myklebust 		TP_fast_assign(
1888cac1d3a2STrond Myklebust 			__assign_str(dstaddr, clp->cl_hostname);
1889cac1d3a2STrond Myklebust 			memcpy(__entry->deviceid, deviceid->data,
1890cac1d3a2STrond Myklebust 			       NFS4_DEVICEID4_SIZE);
1891cac1d3a2STrond Myklebust 		),
1892cac1d3a2STrond Myklebust 
1893cac1d3a2STrond Myklebust 		TP_printk(
1894cac1d3a2STrond Myklebust 			"deviceid=%s, dstaddr=%s",
1895cac1d3a2STrond Myklebust 			__print_hex(__entry->deviceid, NFS4_DEVICEID4_SIZE),
1896cac1d3a2STrond Myklebust 			__get_str(dstaddr)
1897cac1d3a2STrond Myklebust 		)
1898cac1d3a2STrond Myklebust );
1899cac1d3a2STrond Myklebust #define DEFINE_PNFS_DEVICEID_EVENT(name) \
1900cac1d3a2STrond Myklebust 	DEFINE_EVENT(nfs4_deviceid_event, name, \
1901cac1d3a2STrond Myklebust 			TP_PROTO(const struct nfs_client *clp, \
1902cac1d3a2STrond Myklebust 				const struct nfs4_deviceid *deviceid \
1903cac1d3a2STrond Myklebust 			), \
1904cac1d3a2STrond Myklebust 			TP_ARGS(clp, deviceid))
1905cac1d3a2STrond Myklebust DEFINE_PNFS_DEVICEID_EVENT(nfs4_deviceid_free);
1906cac1d3a2STrond Myklebust 
1907cac1d3a2STrond Myklebust DECLARE_EVENT_CLASS(nfs4_deviceid_status,
1908cac1d3a2STrond Myklebust 		TP_PROTO(
1909cac1d3a2STrond Myklebust 			const struct nfs_server *server,
1910cac1d3a2STrond Myklebust 			const struct nfs4_deviceid *deviceid,
1911cac1d3a2STrond Myklebust 			int status
1912cac1d3a2STrond Myklebust 		),
1913cac1d3a2STrond Myklebust 
1914cac1d3a2STrond Myklebust 		TP_ARGS(server, deviceid, status),
1915cac1d3a2STrond Myklebust 
1916cac1d3a2STrond Myklebust 		TP_STRUCT__entry(
1917cac1d3a2STrond Myklebust 			__field(dev_t, dev)
1918cac1d3a2STrond Myklebust 			__field(int, status)
1919cac1d3a2STrond Myklebust 			__string(dstaddr, server->nfs_client->cl_hostname)
1920cac1d3a2STrond Myklebust 			__array(unsigned char, deviceid, NFS4_DEVICEID4_SIZE)
1921cac1d3a2STrond Myklebust 		),
1922cac1d3a2STrond Myklebust 
1923cac1d3a2STrond Myklebust 		TP_fast_assign(
1924cac1d3a2STrond Myklebust 			__entry->dev = server->s_dev;
1925cac1d3a2STrond Myklebust 			__entry->status = status;
1926cac1d3a2STrond Myklebust 			__assign_str(dstaddr, server->nfs_client->cl_hostname);
1927cac1d3a2STrond Myklebust 			memcpy(__entry->deviceid, deviceid->data,
1928cac1d3a2STrond Myklebust 			       NFS4_DEVICEID4_SIZE);
1929cac1d3a2STrond Myklebust 		),
1930cac1d3a2STrond Myklebust 
1931cac1d3a2STrond Myklebust 		TP_printk(
1932cac1d3a2STrond Myklebust 			"dev=%02x:%02x: deviceid=%s, dstaddr=%s, status=%d",
1933cac1d3a2STrond Myklebust 			MAJOR(__entry->dev), MINOR(__entry->dev),
1934cac1d3a2STrond Myklebust 			__print_hex(__entry->deviceid, NFS4_DEVICEID4_SIZE),
1935cac1d3a2STrond Myklebust 			__get_str(dstaddr),
1936cac1d3a2STrond Myklebust 			__entry->status
1937cac1d3a2STrond Myklebust 		)
1938cac1d3a2STrond Myklebust );
1939cac1d3a2STrond Myklebust #define DEFINE_PNFS_DEVICEID_STATUS(name) \
1940cac1d3a2STrond Myklebust 	DEFINE_EVENT(nfs4_deviceid_status, name, \
1941cac1d3a2STrond Myklebust 			TP_PROTO(const struct nfs_server *server, \
1942cac1d3a2STrond Myklebust 				const struct nfs4_deviceid *deviceid, \
1943cac1d3a2STrond Myklebust 				int status \
1944cac1d3a2STrond Myklebust 			), \
1945cac1d3a2STrond Myklebust 			TP_ARGS(server, deviceid, status))
1946cac1d3a2STrond Myklebust DEFINE_PNFS_DEVICEID_STATUS(nfs4_getdeviceinfo);
1947cac1d3a2STrond Myklebust DEFINE_PNFS_DEVICEID_STATUS(nfs4_find_deviceid);
1948cac1d3a2STrond Myklebust 
1949088f3e68STrond Myklebust DECLARE_EVENT_CLASS(nfs4_flexfiles_io_event,
1950088f3e68STrond Myklebust 		TP_PROTO(
1951088f3e68STrond Myklebust 			const struct nfs_pgio_header *hdr
1952088f3e68STrond Myklebust 		),
1953088f3e68STrond Myklebust 
1954088f3e68STrond Myklebust 		TP_ARGS(hdr),
1955088f3e68STrond Myklebust 
1956088f3e68STrond Myklebust 		TP_STRUCT__entry(
1957088f3e68STrond Myklebust 			__field(unsigned long, error)
1958088f3e68STrond Myklebust 			__field(dev_t, dev)
1959088f3e68STrond Myklebust 			__field(u32, fhandle)
1960088f3e68STrond Myklebust 			__field(u64, fileid)
1961088f3e68STrond Myklebust 			__field(loff_t, offset)
1962088f3e68STrond Myklebust 			__field(u32, count)
1963088f3e68STrond Myklebust 			__field(int, stateid_seq)
1964088f3e68STrond Myklebust 			__field(u32, stateid_hash)
1965088f3e68STrond Myklebust 			__string(dstaddr, hdr->ds_clp ?
1966088f3e68STrond Myklebust 				rpc_peeraddr2str(hdr->ds_clp->cl_rpcclient,
1967088f3e68STrond Myklebust 					RPC_DISPLAY_ADDR) : "unknown")
1968088f3e68STrond Myklebust 		),
1969088f3e68STrond Myklebust 
1970088f3e68STrond Myklebust 		TP_fast_assign(
1971088f3e68STrond Myklebust 			const struct inode *inode = hdr->inode;
1972088f3e68STrond Myklebust 
1973088f3e68STrond Myklebust 			__entry->error = hdr->res.op_status;
1974088f3e68STrond Myklebust 			__entry->fhandle = nfs_fhandle_hash(hdr->args.fh);
1975088f3e68STrond Myklebust 			__entry->fileid = NFS_FILEID(inode);
1976088f3e68STrond Myklebust 			__entry->dev = inode->i_sb->s_dev;
1977088f3e68STrond Myklebust 			__entry->offset = hdr->args.offset;
1978088f3e68STrond Myklebust 			__entry->count = hdr->args.count;
1979088f3e68STrond Myklebust 			__entry->stateid_seq =
1980088f3e68STrond Myklebust 				be32_to_cpu(hdr->args.stateid.seqid);
1981088f3e68STrond Myklebust 			__entry->stateid_hash =
1982088f3e68STrond Myklebust 				nfs_stateid_hash(&hdr->args.stateid);
1983088f3e68STrond Myklebust 			__assign_str(dstaddr, hdr->ds_clp ?
1984088f3e68STrond Myklebust 				rpc_peeraddr2str(hdr->ds_clp->cl_rpcclient,
1985088f3e68STrond Myklebust 					RPC_DISPLAY_ADDR) : "unknown");
1986088f3e68STrond Myklebust 		),
1987088f3e68STrond Myklebust 
1988088f3e68STrond Myklebust 		TP_printk(
1989088f3e68STrond Myklebust 			"error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x "
1990088f3e68STrond Myklebust 			"offset=%llu count=%u stateid=%d:0x%08x dstaddr=%s",
1991088f3e68STrond Myklebust 			-__entry->error,
19928791545eSChuck Lever 			show_nfs4_status(__entry->error),
1993088f3e68STrond Myklebust 			MAJOR(__entry->dev), MINOR(__entry->dev),
1994088f3e68STrond Myklebust 			(unsigned long long)__entry->fileid,
1995088f3e68STrond Myklebust 			__entry->fhandle,
1996088f3e68STrond Myklebust 			__entry->offset, __entry->count,
1997088f3e68STrond Myklebust 			__entry->stateid_seq, __entry->stateid_hash,
1998088f3e68STrond Myklebust 			__get_str(dstaddr)
1999088f3e68STrond Myklebust 		)
2000088f3e68STrond Myklebust );
2001088f3e68STrond Myklebust 
2002088f3e68STrond Myklebust #define DEFINE_NFS4_FLEXFILES_IO_EVENT(name) \
2003088f3e68STrond Myklebust 	DEFINE_EVENT(nfs4_flexfiles_io_event, name, \
2004088f3e68STrond Myklebust 			TP_PROTO( \
2005088f3e68STrond Myklebust 				const struct nfs_pgio_header *hdr \
2006088f3e68STrond Myklebust 			), \
2007088f3e68STrond Myklebust 			TP_ARGS(hdr))
2008088f3e68STrond Myklebust DEFINE_NFS4_FLEXFILES_IO_EVENT(ff_layout_read_error);
2009088f3e68STrond Myklebust DEFINE_NFS4_FLEXFILES_IO_EVENT(ff_layout_write_error);
2010088f3e68STrond Myklebust 
2011088f3e68STrond Myklebust TRACE_EVENT(ff_layout_commit_error,
2012088f3e68STrond Myklebust 		TP_PROTO(
2013088f3e68STrond Myklebust 			const struct nfs_commit_data *data
2014088f3e68STrond Myklebust 		),
2015088f3e68STrond Myklebust 
2016088f3e68STrond Myklebust 		TP_ARGS(data),
2017088f3e68STrond Myklebust 
2018088f3e68STrond Myklebust 		TP_STRUCT__entry(
2019088f3e68STrond Myklebust 			__field(unsigned long, error)
2020088f3e68STrond Myklebust 			__field(dev_t, dev)
2021088f3e68STrond Myklebust 			__field(u32, fhandle)
2022088f3e68STrond Myklebust 			__field(u64, fileid)
2023088f3e68STrond Myklebust 			__field(loff_t, offset)
2024088f3e68STrond Myklebust 			__field(u32, count)
2025088f3e68STrond Myklebust 			__string(dstaddr, data->ds_clp ?
2026088f3e68STrond Myklebust 				rpc_peeraddr2str(data->ds_clp->cl_rpcclient,
2027088f3e68STrond Myklebust 					RPC_DISPLAY_ADDR) : "unknown")
2028088f3e68STrond Myklebust 		),
2029088f3e68STrond Myklebust 
2030088f3e68STrond Myklebust 		TP_fast_assign(
2031088f3e68STrond Myklebust 			const struct inode *inode = data->inode;
2032088f3e68STrond Myklebust 
2033088f3e68STrond Myklebust 			__entry->error = data->res.op_status;
2034088f3e68STrond Myklebust 			__entry->fhandle = nfs_fhandle_hash(data->args.fh);
2035088f3e68STrond Myklebust 			__entry->fileid = NFS_FILEID(inode);
2036088f3e68STrond Myklebust 			__entry->dev = inode->i_sb->s_dev;
2037088f3e68STrond Myklebust 			__entry->offset = data->args.offset;
2038088f3e68STrond Myklebust 			__entry->count = data->args.count;
2039088f3e68STrond Myklebust 			__assign_str(dstaddr, data->ds_clp ?
2040088f3e68STrond Myklebust 				rpc_peeraddr2str(data->ds_clp->cl_rpcclient,
2041088f3e68STrond Myklebust 					RPC_DISPLAY_ADDR) : "unknown");
2042088f3e68STrond Myklebust 		),
2043088f3e68STrond Myklebust 
2044088f3e68STrond Myklebust 		TP_printk(
2045088f3e68STrond Myklebust 			"error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x "
2046088f3e68STrond Myklebust 			"offset=%llu count=%u dstaddr=%s",
2047088f3e68STrond Myklebust 			-__entry->error,
20488791545eSChuck Lever 			show_nfs4_status(__entry->error),
2049088f3e68STrond Myklebust 			MAJOR(__entry->dev), MINOR(__entry->dev),
2050088f3e68STrond Myklebust 			(unsigned long long)__entry->fileid,
2051088f3e68STrond Myklebust 			__entry->fhandle,
2052088f3e68STrond Myklebust 			__entry->offset, __entry->count,
2053088f3e68STrond Myklebust 			__get_str(dstaddr)
2054088f3e68STrond Myklebust 		)
2055088f3e68STrond Myklebust );
2056088f3e68STrond Myklebust 
2057*f628d462SOlga Kornievskaia TRACE_DEFINE_ENUM(NFS4_CONTENT_DATA);
2058*f628d462SOlga Kornievskaia TRACE_DEFINE_ENUM(NFS4_CONTENT_HOLE);
2059*f628d462SOlga Kornievskaia 
2060*f628d462SOlga Kornievskaia #define show_llseek_mode(what)			\
2061*f628d462SOlga Kornievskaia 	__print_symbolic(what,			\
2062*f628d462SOlga Kornievskaia 		{ NFS4_CONTENT_DATA, "DATA" },		\
2063*f628d462SOlga Kornievskaia 		{ NFS4_CONTENT_HOLE, "HOLE" })
2064*f628d462SOlga Kornievskaia 
2065*f628d462SOlga Kornievskaia #ifdef CONFIG_NFS_V4_2
2066*f628d462SOlga Kornievskaia TRACE_EVENT(nfs4_llseek,
2067*f628d462SOlga Kornievskaia 		TP_PROTO(
2068*f628d462SOlga Kornievskaia 			const struct inode *inode,
2069*f628d462SOlga Kornievskaia 			const struct nfs42_seek_args *args,
2070*f628d462SOlga Kornievskaia 			const struct nfs42_seek_res *res,
2071*f628d462SOlga Kornievskaia 			int error
2072*f628d462SOlga Kornievskaia 		),
2073*f628d462SOlga Kornievskaia 
2074*f628d462SOlga Kornievskaia 		TP_ARGS(inode, args, res, error),
2075*f628d462SOlga Kornievskaia 
2076*f628d462SOlga Kornievskaia 		TP_STRUCT__entry(
2077*f628d462SOlga Kornievskaia 			__field(unsigned long, error)
2078*f628d462SOlga Kornievskaia 			__field(u32, fhandle)
2079*f628d462SOlga Kornievskaia 			__field(u32, fileid)
2080*f628d462SOlga Kornievskaia 			__field(dev_t, dev)
2081*f628d462SOlga Kornievskaia 			__field(int, stateid_seq)
2082*f628d462SOlga Kornievskaia 			__field(u32, stateid_hash)
2083*f628d462SOlga Kornievskaia 			__field(loff_t, offset_s)
2084*f628d462SOlga Kornievskaia 			__field(u32, what)
2085*f628d462SOlga Kornievskaia 			__field(loff_t, offset_r)
2086*f628d462SOlga Kornievskaia 			__field(u32, eof)
2087*f628d462SOlga Kornievskaia 		),
2088*f628d462SOlga Kornievskaia 
2089*f628d462SOlga Kornievskaia 		TP_fast_assign(
2090*f628d462SOlga Kornievskaia 			const struct nfs_inode *nfsi = NFS_I(inode);
2091*f628d462SOlga Kornievskaia 			const struct nfs_fh *fh = args->sa_fh;
2092*f628d462SOlga Kornievskaia 
2093*f628d462SOlga Kornievskaia 			__entry->fileid = nfsi->fileid;
2094*f628d462SOlga Kornievskaia 			__entry->dev = inode->i_sb->s_dev;
2095*f628d462SOlga Kornievskaia 			__entry->fhandle = nfs_fhandle_hash(fh);
2096*f628d462SOlga Kornievskaia 			__entry->offset_s = args->sa_offset;
2097*f628d462SOlga Kornievskaia 			__entry->stateid_seq =
2098*f628d462SOlga Kornievskaia 				be32_to_cpu(args->sa_stateid.seqid);
2099*f628d462SOlga Kornievskaia 			__entry->stateid_hash =
2100*f628d462SOlga Kornievskaia 				nfs_stateid_hash(&args->sa_stateid);
2101*f628d462SOlga Kornievskaia 			__entry->what = args->sa_what;
2102*f628d462SOlga Kornievskaia 			if (error) {
2103*f628d462SOlga Kornievskaia 				__entry->error = -error;
2104*f628d462SOlga Kornievskaia 				__entry->offset_r = 0;
2105*f628d462SOlga Kornievskaia 				__entry->eof = 0;
2106*f628d462SOlga Kornievskaia 			} else {
2107*f628d462SOlga Kornievskaia 				__entry->error = 0;
2108*f628d462SOlga Kornievskaia 				__entry->offset_r = res->sr_offset;
2109*f628d462SOlga Kornievskaia 				__entry->eof = res->sr_eof;
2110*f628d462SOlga Kornievskaia 			}
2111*f628d462SOlga Kornievskaia 		),
2112*f628d462SOlga Kornievskaia 
2113*f628d462SOlga Kornievskaia 		TP_printk(
2114*f628d462SOlga Kornievskaia 			"error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x "
2115*f628d462SOlga Kornievskaia 			"stateid=%d:0x%08x offset_s=%llu what=%s "
2116*f628d462SOlga Kornievskaia 			"offset_r=%llu eof=%u",
2117*f628d462SOlga Kornievskaia 			-__entry->error,
2118*f628d462SOlga Kornievskaia 			show_nfs4_status(__entry->error),
2119*f628d462SOlga Kornievskaia 			MAJOR(__entry->dev), MINOR(__entry->dev),
2120*f628d462SOlga Kornievskaia 			(unsigned long long)__entry->fileid,
2121*f628d462SOlga Kornievskaia 			__entry->fhandle,
2122*f628d462SOlga Kornievskaia 			__entry->stateid_seq, __entry->stateid_hash,
2123*f628d462SOlga Kornievskaia 			__entry->offset_s,
2124*f628d462SOlga Kornievskaia 			show_llseek_mode(__entry->what),
2125*f628d462SOlga Kornievskaia 			__entry->offset_r,
2126*f628d462SOlga Kornievskaia 			__entry->eof
2127*f628d462SOlga Kornievskaia 		)
2128*f628d462SOlga Kornievskaia );
2129*f628d462SOlga Kornievskaia 
2130*f628d462SOlga Kornievskaia #endif /* CONFIG_NFS_V4_2 */
2131088f3e68STrond Myklebust 
2132cc668ab3STrond Myklebust #endif /* CONFIG_NFS_V4_1 */
2133cc668ab3STrond Myklebust 
2134c6d01c6fSTrond Myklebust #endif /* _TRACE_NFS4_H */
2135c6d01c6fSTrond Myklebust 
2136c6d01c6fSTrond Myklebust #undef TRACE_INCLUDE_PATH
2137c6d01c6fSTrond Myklebust #define TRACE_INCLUDE_PATH .
2138c6d01c6fSTrond Myklebust #define TRACE_INCLUDE_FILE nfs4trace
2139c6d01c6fSTrond Myklebust /* This part must be outside protection */
2140c6d01c6fSTrond Myklebust #include <trace/define_trace.h>
2141