xref: /openbmc/linux/fs/nfs/nfstrace.h (revision 1ac731c529cd4d6adbce134754b51ff7d822b145)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
2f4ce1299STrond Myklebust /*
3f4ce1299STrond Myklebust  * Copyright (c) 2013 Trond Myklebust <Trond.Myklebust@netapp.com>
4f4ce1299STrond Myklebust  */
5f4ce1299STrond Myklebust #undef TRACE_SYSTEM
6f4ce1299STrond Myklebust #define TRACE_SYSTEM nfs
7f4ce1299STrond Myklebust 
8f4ce1299STrond Myklebust #if !defined(_TRACE_NFS_H) || defined(TRACE_HEADER_MULTI_READ)
9f4ce1299STrond Myklebust #define _TRACE_NFS_H
10f4ce1299STrond Myklebust 
11f4ce1299STrond Myklebust #include <linux/tracepoint.h>
121eb5d98fSJeff Layton #include <linux/iversion.h>
13f4ce1299STrond Myklebust 
14247c01ffSChuck Lever #include <trace/misc/fs.h>
15247c01ffSChuck Lever #include <trace/misc/nfs.h>
16247c01ffSChuck Lever #include <trace/misc/sunrpc.h>
17b4776a34SChuck Lever 
18f4ce1299STrond Myklebust #define nfs_show_cache_validity(v) \
19f4ce1299STrond Myklebust 	__print_flags(v, "|", \
20f4ce1299STrond Myklebust 			{ NFS_INO_INVALID_DATA, "INVALID_DATA" }, \
21f4ce1299STrond Myklebust 			{ NFS_INO_INVALID_ATIME, "INVALID_ATIME" }, \
22f4ce1299STrond Myklebust 			{ NFS_INO_INVALID_ACCESS, "INVALID_ACCESS" }, \
23f4ce1299STrond Myklebust 			{ NFS_INO_INVALID_ACL, "INVALID_ACL" }, \
24f4ce1299STrond Myklebust 			{ NFS_INO_REVAL_FORCED, "REVAL_FORCED" }, \
257d4006c1SChuck Lever 			{ NFS_INO_INVALID_LABEL, "INVALID_LABEL" }, \
267d4006c1SChuck Lever 			{ NFS_INO_INVALID_CHANGE, "INVALID_CHANGE" }, \
277d4006c1SChuck Lever 			{ NFS_INO_INVALID_CTIME, "INVALID_CTIME" }, \
287d4006c1SChuck Lever 			{ NFS_INO_INVALID_MTIME, "INVALID_MTIME" }, \
297d4006c1SChuck Lever 			{ NFS_INO_INVALID_SIZE, "INVALID_SIZE" }, \
300f44da51SFrank van der Linden 			{ NFS_INO_INVALID_OTHER, "INVALID_OTHER" }, \
318a27c7ccSTrond Myklebust 			{ NFS_INO_DATA_INVAL_DEFER, "DATA_INVAL_DEFER" }, \
328a27c7ccSTrond Myklebust 			{ NFS_INO_INVALID_BLOCKS, "INVALID_BLOCKS" }, \
33fabf2b34STrond Myklebust 			{ NFS_INO_INVALID_XATTR, "INVALID_XATTR" }, \
34720869ebSTrond Myklebust 			{ NFS_INO_INVALID_NLINK, "INVALID_NLINK" }, \
35720869ebSTrond Myklebust 			{ NFS_INO_INVALID_MODE, "INVALID_MODE" })
367d4006c1SChuck Lever 
37f4ce1299STrond Myklebust #define nfs_show_nfsi_flags(v) \
38f4ce1299STrond Myklebust 	__print_flags(v, "|", \
397d4006c1SChuck Lever 			{ BIT(NFS_INO_STALE), "STALE" }, \
407d4006c1SChuck Lever 			{ BIT(NFS_INO_ACL_LRU_SET), "ACL_LRU_SET" }, \
417d4006c1SChuck Lever 			{ BIT(NFS_INO_INVALIDATING), "INVALIDATING" }, \
427d4006c1SChuck Lever 			{ BIT(NFS_INO_LAYOUTCOMMIT), "NEED_LAYOUTCOMMIT" }, \
437d4006c1SChuck Lever 			{ BIT(NFS_INO_LAYOUTCOMMITTING), "LAYOUTCOMMIT" }, \
447d4006c1SChuck Lever 			{ BIT(NFS_INO_LAYOUTSTATS), "LAYOUTSTATS" }, \
457d4006c1SChuck Lever 			{ BIT(NFS_INO_ODIRECT), "ODIRECT" })
46f4ce1299STrond Myklebust 
47f4ce1299STrond Myklebust DECLARE_EVENT_CLASS(nfs_inode_event,
48f4ce1299STrond Myklebust 		TP_PROTO(
49f4ce1299STrond Myklebust 			const struct inode *inode
50f4ce1299STrond Myklebust 		),
51f4ce1299STrond Myklebust 
52f4ce1299STrond Myklebust 		TP_ARGS(inode),
53f4ce1299STrond Myklebust 
54f4ce1299STrond Myklebust 		TP_STRUCT__entry(
55f4ce1299STrond Myklebust 			__field(dev_t, dev)
56f4ce1299STrond Myklebust 			__field(u32, fhandle)
57f4ce1299STrond Myklebust 			__field(u64, fileid)
58f4ce1299STrond Myklebust 			__field(u64, version)
59f4ce1299STrond Myklebust 		),
60f4ce1299STrond Myklebust 
61f4ce1299STrond Myklebust 		TP_fast_assign(
62f4ce1299STrond Myklebust 			const struct nfs_inode *nfsi = NFS_I(inode);
63f4ce1299STrond Myklebust 			__entry->dev = inode->i_sb->s_dev;
64f4ce1299STrond Myklebust 			__entry->fileid = nfsi->fileid;
65f4ce1299STrond Myklebust 			__entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
661eb5d98fSJeff Layton 			__entry->version = inode_peek_iversion_raw(inode);
67f4ce1299STrond Myklebust 		),
68f4ce1299STrond Myklebust 
69f4ce1299STrond Myklebust 		TP_printk(
70f4ce1299STrond Myklebust 			"fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu ",
71f4ce1299STrond Myklebust 			MAJOR(__entry->dev), MINOR(__entry->dev),
72f4ce1299STrond Myklebust 			(unsigned long long)__entry->fileid,
73f4ce1299STrond Myklebust 			__entry->fhandle,
74f4ce1299STrond Myklebust 			(unsigned long long)__entry->version
75f4ce1299STrond Myklebust 		)
76f4ce1299STrond Myklebust );
77f4ce1299STrond Myklebust 
78f4ce1299STrond Myklebust DECLARE_EVENT_CLASS(nfs_inode_event_done,
79f4ce1299STrond Myklebust 		TP_PROTO(
80f4ce1299STrond Myklebust 			const struct inode *inode,
81f4ce1299STrond Myklebust 			int error
82f4ce1299STrond Myklebust 		),
83f4ce1299STrond Myklebust 
84f4ce1299STrond Myklebust 		TP_ARGS(inode, error),
85f4ce1299STrond Myklebust 
86f4ce1299STrond Myklebust 		TP_STRUCT__entry(
8738a638a7SChuck Lever 			__field(unsigned long, error)
88f4ce1299STrond Myklebust 			__field(dev_t, dev)
89f4ce1299STrond Myklebust 			__field(u32, fhandle)
90f4ce1299STrond Myklebust 			__field(unsigned char, type)
91f4ce1299STrond Myklebust 			__field(u64, fileid)
92f4ce1299STrond Myklebust 			__field(u64, version)
93f4ce1299STrond Myklebust 			__field(loff_t, size)
94f4ce1299STrond Myklebust 			__field(unsigned long, nfsi_flags)
95f4ce1299STrond Myklebust 			__field(unsigned long, cache_validity)
96f4ce1299STrond Myklebust 		),
97f4ce1299STrond Myklebust 
98f4ce1299STrond Myklebust 		TP_fast_assign(
99f4ce1299STrond Myklebust 			const struct nfs_inode *nfsi = NFS_I(inode);
10038a638a7SChuck Lever 			__entry->error = error < 0 ? -error : 0;
101f4ce1299STrond Myklebust 			__entry->dev = inode->i_sb->s_dev;
102f4ce1299STrond Myklebust 			__entry->fileid = nfsi->fileid;
103f4ce1299STrond Myklebust 			__entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
104f4ce1299STrond Myklebust 			__entry->type = nfs_umode_to_dtype(inode->i_mode);
1051eb5d98fSJeff Layton 			__entry->version = inode_peek_iversion_raw(inode);
106f4ce1299STrond Myklebust 			__entry->size = i_size_read(inode);
107f4ce1299STrond Myklebust 			__entry->nfsi_flags = nfsi->flags;
108f4ce1299STrond Myklebust 			__entry->cache_validity = nfsi->cache_validity;
109f4ce1299STrond Myklebust 		),
110f4ce1299STrond Myklebust 
111f4ce1299STrond Myklebust 		TP_printk(
11238a638a7SChuck Lever 			"error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x "
113f4ce1299STrond Myklebust 			"type=%u (%s) version=%llu size=%lld "
1147d4006c1SChuck Lever 			"cache_validity=0x%lx (%s) nfs_flags=0x%lx (%s)",
1158791545eSChuck Lever 			-__entry->error, show_nfs_status(__entry->error),
116f4ce1299STrond Myklebust 			MAJOR(__entry->dev), MINOR(__entry->dev),
117f4ce1299STrond Myklebust 			(unsigned long long)__entry->fileid,
118f4ce1299STrond Myklebust 			__entry->fhandle,
119f4ce1299STrond Myklebust 			__entry->type,
1209d2d48bbSChuck Lever 			show_fs_dirent_type(__entry->type),
121f4ce1299STrond Myklebust 			(unsigned long long)__entry->version,
122f4ce1299STrond Myklebust 			(long long)__entry->size,
123f4ce1299STrond Myklebust 			__entry->cache_validity,
124f4ce1299STrond Myklebust 			nfs_show_cache_validity(__entry->cache_validity),
125f4ce1299STrond Myklebust 			__entry->nfsi_flags,
126f4ce1299STrond Myklebust 			nfs_show_nfsi_flags(__entry->nfsi_flags)
127f4ce1299STrond Myklebust 		)
128f4ce1299STrond Myklebust );
129f4ce1299STrond Myklebust 
130f4ce1299STrond Myklebust #define DEFINE_NFS_INODE_EVENT(name) \
131f4ce1299STrond Myklebust 	DEFINE_EVENT(nfs_inode_event, name, \
132f4ce1299STrond Myklebust 			TP_PROTO( \
133f4ce1299STrond Myklebust 				const struct inode *inode \
134f4ce1299STrond Myklebust 			), \
135f4ce1299STrond Myklebust 			TP_ARGS(inode))
136f4ce1299STrond Myklebust #define DEFINE_NFS_INODE_EVENT_DONE(name) \
137f4ce1299STrond Myklebust 	DEFINE_EVENT(nfs_inode_event_done, name, \
138f4ce1299STrond Myklebust 			TP_PROTO( \
139f4ce1299STrond Myklebust 				const struct inode *inode, \
140f4ce1299STrond Myklebust 				int error \
141f4ce1299STrond Myklebust 			), \
142f4ce1299STrond Myklebust 			TP_ARGS(inode, error))
14393ce4af7STrond Myklebust DEFINE_NFS_INODE_EVENT(nfs_set_inode_stale);
144f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT(nfs_refresh_inode_enter);
145f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT_DONE(nfs_refresh_inode_exit);
146f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT(nfs_revalidate_inode_enter);
147f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT_DONE(nfs_revalidate_inode_exit);
148f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT(nfs_invalidate_mapping_enter);
149f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT_DONE(nfs_invalidate_mapping_exit);
150f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT(nfs_getattr_enter);
151f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT_DONE(nfs_getattr_exit);
152f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT(nfs_setattr_enter);
153f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT_DONE(nfs_setattr_exit);
154f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT(nfs_writeback_inode_enter);
155f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT_DONE(nfs_writeback_inode_exit);
156f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT(nfs_fsync_enter);
157f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT_DONE(nfs_fsync_exit);
158f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT(nfs_access_enter);
15993c2e5e0SBenjamin Coddington DEFINE_NFS_INODE_EVENT_DONE(nfs_set_cache_invalid);
160b0365ccbSTrond Myklebust DEFINE_NFS_INODE_EVENT(nfs_readdir_force_readdirplus);
161310e3187STrond Myklebust DEFINE_NFS_INODE_EVENT_DONE(nfs_readdir_cache_fill_done);
162310e3187STrond Myklebust DEFINE_NFS_INODE_EVENT_DONE(nfs_readdir_uncached_done);
163e8194b7dSTrond Myklebust 
164e8194b7dSTrond Myklebust TRACE_EVENT(nfs_access_exit,
165e8194b7dSTrond Myklebust 		TP_PROTO(
166e8194b7dSTrond Myklebust 			const struct inode *inode,
167e8194b7dSTrond Myklebust 			unsigned int mask,
168e8194b7dSTrond Myklebust 			unsigned int permitted,
169e8194b7dSTrond Myklebust 			int error
170e8194b7dSTrond Myklebust 		),
171e8194b7dSTrond Myklebust 
172e8194b7dSTrond Myklebust 		TP_ARGS(inode, mask, permitted, error),
173e8194b7dSTrond Myklebust 
174e8194b7dSTrond Myklebust 		TP_STRUCT__entry(
175e8194b7dSTrond Myklebust 			__field(unsigned long, error)
176e8194b7dSTrond Myklebust 			__field(dev_t, dev)
177e8194b7dSTrond Myklebust 			__field(u32, fhandle)
178e8194b7dSTrond Myklebust 			__field(unsigned char, type)
179e8194b7dSTrond Myklebust 			__field(u64, fileid)
180e8194b7dSTrond Myklebust 			__field(u64, version)
181e8194b7dSTrond Myklebust 			__field(loff_t, size)
182e8194b7dSTrond Myklebust 			__field(unsigned long, nfsi_flags)
183e8194b7dSTrond Myklebust 			__field(unsigned long, cache_validity)
184e8194b7dSTrond Myklebust 			__field(unsigned int, mask)
185e8194b7dSTrond Myklebust 			__field(unsigned int, permitted)
186e8194b7dSTrond Myklebust 		),
187e8194b7dSTrond Myklebust 
188e8194b7dSTrond Myklebust 		TP_fast_assign(
189e8194b7dSTrond Myklebust 			const struct nfs_inode *nfsi = NFS_I(inode);
190e8194b7dSTrond Myklebust 			__entry->error = error < 0 ? -error : 0;
191e8194b7dSTrond Myklebust 			__entry->dev = inode->i_sb->s_dev;
192e8194b7dSTrond Myklebust 			__entry->fileid = nfsi->fileid;
193e8194b7dSTrond Myklebust 			__entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
194e8194b7dSTrond Myklebust 			__entry->type = nfs_umode_to_dtype(inode->i_mode);
195e8194b7dSTrond Myklebust 			__entry->version = inode_peek_iversion_raw(inode);
196e8194b7dSTrond Myklebust 			__entry->size = i_size_read(inode);
197e8194b7dSTrond Myklebust 			__entry->nfsi_flags = nfsi->flags;
198e8194b7dSTrond Myklebust 			__entry->cache_validity = nfsi->cache_validity;
199e8194b7dSTrond Myklebust 			__entry->mask = mask;
200e8194b7dSTrond Myklebust 			__entry->permitted = permitted;
201e8194b7dSTrond Myklebust 		),
202e8194b7dSTrond Myklebust 
203e8194b7dSTrond Myklebust 		TP_printk(
204e8194b7dSTrond Myklebust 			"error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x "
205e8194b7dSTrond Myklebust 			"type=%u (%s) version=%llu size=%lld "
206e8194b7dSTrond Myklebust 			"cache_validity=0x%lx (%s) nfs_flags=0x%lx (%s) "
207e8194b7dSTrond Myklebust 			"mask=0x%x permitted=0x%x",
2088791545eSChuck Lever 			-__entry->error, show_nfs_status(__entry->error),
209e8194b7dSTrond Myklebust 			MAJOR(__entry->dev), MINOR(__entry->dev),
210e8194b7dSTrond Myklebust 			(unsigned long long)__entry->fileid,
211e8194b7dSTrond Myklebust 			__entry->fhandle,
212e8194b7dSTrond Myklebust 			__entry->type,
2139d2d48bbSChuck Lever 			show_fs_dirent_type(__entry->type),
214e8194b7dSTrond Myklebust 			(unsigned long long)__entry->version,
215e8194b7dSTrond Myklebust 			(long long)__entry->size,
216e8194b7dSTrond Myklebust 			__entry->cache_validity,
217e8194b7dSTrond Myklebust 			nfs_show_cache_validity(__entry->cache_validity),
218e8194b7dSTrond Myklebust 			__entry->nfsi_flags,
219e8194b7dSTrond Myklebust 			nfs_show_nfsi_flags(__entry->nfsi_flags),
220e8194b7dSTrond Myklebust 			__entry->mask, __entry->permitted
221e8194b7dSTrond Myklebust 		)
222e8194b7dSTrond Myklebust );
223f4ce1299STrond Myklebust 
224110cb2d2SChuck Lever DECLARE_EVENT_CLASS(nfs_update_size_class,
225110cb2d2SChuck Lever 		TP_PROTO(
226110cb2d2SChuck Lever 			const struct inode *inode,
227110cb2d2SChuck Lever 			loff_t new_size
228110cb2d2SChuck Lever 		),
229110cb2d2SChuck Lever 
230110cb2d2SChuck Lever 		TP_ARGS(inode, new_size),
231110cb2d2SChuck Lever 
232110cb2d2SChuck Lever 		TP_STRUCT__entry(
233110cb2d2SChuck Lever 			__field(dev_t, dev)
234110cb2d2SChuck Lever 			__field(u32, fhandle)
235110cb2d2SChuck Lever 			__field(u64, fileid)
236110cb2d2SChuck Lever 			__field(u64, version)
237110cb2d2SChuck Lever 			__field(loff_t, cur_size)
238110cb2d2SChuck Lever 			__field(loff_t, new_size)
239110cb2d2SChuck Lever 		),
240110cb2d2SChuck Lever 
241110cb2d2SChuck Lever 		TP_fast_assign(
242110cb2d2SChuck Lever 			const struct nfs_inode *nfsi = NFS_I(inode);
243110cb2d2SChuck Lever 
244110cb2d2SChuck Lever 			__entry->dev = inode->i_sb->s_dev;
245110cb2d2SChuck Lever 			__entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
246110cb2d2SChuck Lever 			__entry->fileid = nfsi->fileid;
247110cb2d2SChuck Lever 			__entry->version = inode_peek_iversion_raw(inode);
248110cb2d2SChuck Lever 			__entry->cur_size = i_size_read(inode);
249110cb2d2SChuck Lever 			__entry->new_size = new_size;
250110cb2d2SChuck Lever 		),
251110cb2d2SChuck Lever 
252110cb2d2SChuck Lever 		TP_printk(
253110cb2d2SChuck Lever 			"fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu cursize=%lld newsize=%lld",
254110cb2d2SChuck Lever 			MAJOR(__entry->dev), MINOR(__entry->dev),
255110cb2d2SChuck Lever 			(unsigned long long)__entry->fileid,
256110cb2d2SChuck Lever 			__entry->fhandle, __entry->version,
257110cb2d2SChuck Lever 			__entry->cur_size, __entry->new_size
258110cb2d2SChuck Lever 		)
259110cb2d2SChuck Lever );
260110cb2d2SChuck Lever 
261110cb2d2SChuck Lever #define DEFINE_NFS_UPDATE_SIZE_EVENT(name) \
262110cb2d2SChuck Lever 	DEFINE_EVENT(nfs_update_size_class, nfs_size_##name, \
263110cb2d2SChuck Lever 			TP_PROTO( \
264110cb2d2SChuck Lever 				const struct inode *inode, \
265110cb2d2SChuck Lever 				loff_t new_size \
266110cb2d2SChuck Lever 			), \
267110cb2d2SChuck Lever 			TP_ARGS(inode, new_size))
268110cb2d2SChuck Lever 
269110cb2d2SChuck Lever DEFINE_NFS_UPDATE_SIZE_EVENT(truncate);
270110cb2d2SChuck Lever DEFINE_NFS_UPDATE_SIZE_EVENT(wcc);
271110cb2d2SChuck Lever DEFINE_NFS_UPDATE_SIZE_EVENT(update);
272110cb2d2SChuck Lever DEFINE_NFS_UPDATE_SIZE_EVENT(grow);
273110cb2d2SChuck Lever 
27411d03d0aSTrond Myklebust DECLARE_EVENT_CLASS(nfs_inode_range_event,
27511d03d0aSTrond Myklebust 		TP_PROTO(
27611d03d0aSTrond Myklebust 			const struct inode *inode,
27711d03d0aSTrond Myklebust 			loff_t range_start,
27811d03d0aSTrond Myklebust 			loff_t range_end
27911d03d0aSTrond Myklebust 		),
28011d03d0aSTrond Myklebust 
28111d03d0aSTrond Myklebust 		TP_ARGS(inode, range_start, range_end),
28211d03d0aSTrond Myklebust 
28311d03d0aSTrond Myklebust 		TP_STRUCT__entry(
28411d03d0aSTrond Myklebust 			__field(dev_t, dev)
28511d03d0aSTrond Myklebust 			__field(u32, fhandle)
28611d03d0aSTrond Myklebust 			__field(u64, fileid)
28711d03d0aSTrond Myklebust 			__field(u64, version)
28811d03d0aSTrond Myklebust 			__field(loff_t, range_start)
28911d03d0aSTrond Myklebust 			__field(loff_t, range_end)
29011d03d0aSTrond Myklebust 		),
29111d03d0aSTrond Myklebust 
29211d03d0aSTrond Myklebust 		TP_fast_assign(
29311d03d0aSTrond Myklebust 			const struct nfs_inode *nfsi = NFS_I(inode);
29411d03d0aSTrond Myklebust 
29511d03d0aSTrond Myklebust 			__entry->dev = inode->i_sb->s_dev;
29611d03d0aSTrond Myklebust 			__entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
29711d03d0aSTrond Myklebust 			__entry->fileid = nfsi->fileid;
29811d03d0aSTrond Myklebust 			__entry->version = inode_peek_iversion_raw(inode);
29911d03d0aSTrond Myklebust 			__entry->range_start = range_start;
30011d03d0aSTrond Myklebust 			__entry->range_end = range_end;
30111d03d0aSTrond Myklebust 		),
30211d03d0aSTrond Myklebust 
30311d03d0aSTrond Myklebust 		TP_printk(
30411d03d0aSTrond Myklebust 			"fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu "
30511d03d0aSTrond Myklebust 			"range=[%lld, %lld]",
30611d03d0aSTrond Myklebust 			MAJOR(__entry->dev), MINOR(__entry->dev),
30711d03d0aSTrond Myklebust 			(unsigned long long)__entry->fileid,
30811d03d0aSTrond Myklebust 			__entry->fhandle, __entry->version,
30911d03d0aSTrond Myklebust 			__entry->range_start, __entry->range_end
31011d03d0aSTrond Myklebust 		)
31111d03d0aSTrond Myklebust );
31211d03d0aSTrond Myklebust 
31311d03d0aSTrond Myklebust #define DEFINE_NFS_INODE_RANGE_EVENT(name) \
31411d03d0aSTrond Myklebust 	DEFINE_EVENT(nfs_inode_range_event, name, \
31511d03d0aSTrond Myklebust 			TP_PROTO( \
31611d03d0aSTrond Myklebust 				const struct inode *inode, \
31711d03d0aSTrond Myklebust 				loff_t range_start, \
31811d03d0aSTrond Myklebust 				loff_t range_end \
31911d03d0aSTrond Myklebust 			), \
32011d03d0aSTrond Myklebust 			TP_ARGS(inode, range_start, range_end))
32111d03d0aSTrond Myklebust 
32211d03d0aSTrond Myklebust DEFINE_NFS_INODE_RANGE_EVENT(nfs_readdir_invalidate_cache_range);
32311d03d0aSTrond Myklebust 
324310e3187STrond Myklebust DECLARE_EVENT_CLASS(nfs_readdir_event,
325310e3187STrond Myklebust 		TP_PROTO(
326310e3187STrond Myklebust 			const struct file *file,
327310e3187STrond Myklebust 			const __be32 *verifier,
328310e3187STrond Myklebust 			u64 cookie,
329310e3187STrond Myklebust 			pgoff_t page_index,
330310e3187STrond Myklebust 			unsigned int dtsize
331310e3187STrond Myklebust 		),
332310e3187STrond Myklebust 
333310e3187STrond Myklebust 		TP_ARGS(file, verifier, cookie, page_index, dtsize),
334310e3187STrond Myklebust 
335310e3187STrond Myklebust 		TP_STRUCT__entry(
336310e3187STrond Myklebust 			__field(dev_t, dev)
337310e3187STrond Myklebust 			__field(u32, fhandle)
338310e3187STrond Myklebust 			__field(u64, fileid)
339310e3187STrond Myklebust 			__field(u64, version)
340310e3187STrond Myklebust 			__array(char, verifier, NFS4_VERIFIER_SIZE)
341310e3187STrond Myklebust 			__field(u64, cookie)
342310e3187STrond Myklebust 			__field(pgoff_t, index)
343310e3187STrond Myklebust 			__field(unsigned int, dtsize)
344310e3187STrond Myklebust 		),
345310e3187STrond Myklebust 
346310e3187STrond Myklebust 		TP_fast_assign(
347310e3187STrond Myklebust 			const struct inode *dir = file_inode(file);
348310e3187STrond Myklebust 			const struct nfs_inode *nfsi = NFS_I(dir);
349310e3187STrond Myklebust 
350310e3187STrond Myklebust 			__entry->dev = dir->i_sb->s_dev;
351310e3187STrond Myklebust 			__entry->fileid = nfsi->fileid;
352310e3187STrond Myklebust 			__entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
353310e3187STrond Myklebust 			__entry->version = inode_peek_iversion_raw(dir);
354310e3187STrond Myklebust 			if (cookie != 0)
355310e3187STrond Myklebust 				memcpy(__entry->verifier, verifier,
356310e3187STrond Myklebust 				       NFS4_VERIFIER_SIZE);
357310e3187STrond Myklebust 			else
358310e3187STrond Myklebust 				memset(__entry->verifier, 0,
359310e3187STrond Myklebust 				       NFS4_VERIFIER_SIZE);
360310e3187STrond Myklebust 			__entry->cookie = cookie;
361310e3187STrond Myklebust 			__entry->index = page_index;
362310e3187STrond Myklebust 			__entry->dtsize = dtsize;
363310e3187STrond Myklebust 		),
364310e3187STrond Myklebust 
365310e3187STrond Myklebust 		TP_printk(
366310e3187STrond Myklebust 			"fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu "
367310e3187STrond Myklebust 			"cookie=%s:0x%llx cache_index=%lu dtsize=%u",
368310e3187STrond Myklebust 			MAJOR(__entry->dev), MINOR(__entry->dev),
369310e3187STrond Myklebust 			(unsigned long long)__entry->fileid, __entry->fhandle,
370310e3187STrond Myklebust 			__entry->version, show_nfs4_verifier(__entry->verifier),
371310e3187STrond Myklebust 			(unsigned long long)__entry->cookie, __entry->index,
372310e3187STrond Myklebust 			__entry->dtsize
373310e3187STrond Myklebust 		)
374310e3187STrond Myklebust );
375310e3187STrond Myklebust 
376310e3187STrond Myklebust #define DEFINE_NFS_READDIR_EVENT(name) \
377310e3187STrond Myklebust 	DEFINE_EVENT(nfs_readdir_event, name, \
378310e3187STrond Myklebust 			TP_PROTO( \
379310e3187STrond Myklebust 				const struct file *file, \
380310e3187STrond Myklebust 				const __be32 *verifier, \
381310e3187STrond Myklebust 				u64 cookie, \
382310e3187STrond Myklebust 				pgoff_t page_index, \
383310e3187STrond Myklebust 				unsigned int dtsize \
384310e3187STrond Myklebust 				), \
385310e3187STrond Myklebust 			TP_ARGS(file, verifier, cookie, page_index, dtsize))
386310e3187STrond Myklebust 
387310e3187STrond Myklebust DEFINE_NFS_READDIR_EVENT(nfs_readdir_cache_fill);
388310e3187STrond Myklebust DEFINE_NFS_READDIR_EVENT(nfs_readdir_uncached);
389310e3187STrond Myklebust 
3906e0d0be7STrond Myklebust DECLARE_EVENT_CLASS(nfs_lookup_event,
3916e0d0be7STrond Myklebust 		TP_PROTO(
3926e0d0be7STrond Myklebust 			const struct inode *dir,
3936e0d0be7STrond Myklebust 			const struct dentry *dentry,
3946e0d0be7STrond Myklebust 			unsigned int flags
3956e0d0be7STrond Myklebust 		),
3966e0d0be7STrond Myklebust 
3976e0d0be7STrond Myklebust 		TP_ARGS(dir, dentry, flags),
3986e0d0be7STrond Myklebust 
3996e0d0be7STrond Myklebust 		TP_STRUCT__entry(
4007d4006c1SChuck Lever 			__field(unsigned long, flags)
4016e0d0be7STrond Myklebust 			__field(dev_t, dev)
4026e0d0be7STrond Myklebust 			__field(u64, dir)
4036e0d0be7STrond Myklebust 			__string(name, dentry->d_name.name)
4046e0d0be7STrond Myklebust 		),
4056e0d0be7STrond Myklebust 
4066e0d0be7STrond Myklebust 		TP_fast_assign(
4076e0d0be7STrond Myklebust 			__entry->dev = dir->i_sb->s_dev;
4086e0d0be7STrond Myklebust 			__entry->dir = NFS_FILEID(dir);
4096e0d0be7STrond Myklebust 			__entry->flags = flags;
4106e0d0be7STrond Myklebust 			__assign_str(name, dentry->d_name.name);
4116e0d0be7STrond Myklebust 		),
4126e0d0be7STrond Myklebust 
4136e0d0be7STrond Myklebust 		TP_printk(
4147d4006c1SChuck Lever 			"flags=0x%lx (%s) name=%02x:%02x:%llu/%s",
4156e0d0be7STrond Myklebust 			__entry->flags,
4169d2d48bbSChuck Lever 			show_fs_lookup_flags(__entry->flags),
4176e0d0be7STrond Myklebust 			MAJOR(__entry->dev), MINOR(__entry->dev),
4186e0d0be7STrond Myklebust 			(unsigned long long)__entry->dir,
4196e0d0be7STrond Myklebust 			__get_str(name)
4206e0d0be7STrond Myklebust 		)
4216e0d0be7STrond Myklebust );
4226e0d0be7STrond Myklebust 
4236e0d0be7STrond Myklebust #define DEFINE_NFS_LOOKUP_EVENT(name) \
4246e0d0be7STrond Myklebust 	DEFINE_EVENT(nfs_lookup_event, name, \
4256e0d0be7STrond Myklebust 			TP_PROTO( \
4266e0d0be7STrond Myklebust 				const struct inode *dir, \
4276e0d0be7STrond Myklebust 				const struct dentry *dentry, \
4286e0d0be7STrond Myklebust 				unsigned int flags \
4296e0d0be7STrond Myklebust 			), \
4306e0d0be7STrond Myklebust 			TP_ARGS(dir, dentry, flags))
4316e0d0be7STrond Myklebust 
4326e0d0be7STrond Myklebust DECLARE_EVENT_CLASS(nfs_lookup_event_done,
4336e0d0be7STrond Myklebust 		TP_PROTO(
4346e0d0be7STrond Myklebust 			const struct inode *dir,
4356e0d0be7STrond Myklebust 			const struct dentry *dentry,
4366e0d0be7STrond Myklebust 			unsigned int flags,
4376e0d0be7STrond Myklebust 			int error
4386e0d0be7STrond Myklebust 		),
4396e0d0be7STrond Myklebust 
4406e0d0be7STrond Myklebust 		TP_ARGS(dir, dentry, flags, error),
4416e0d0be7STrond Myklebust 
4426e0d0be7STrond Myklebust 		TP_STRUCT__entry(
44338a638a7SChuck Lever 			__field(unsigned long, error)
4447d4006c1SChuck Lever 			__field(unsigned long, flags)
4456e0d0be7STrond Myklebust 			__field(dev_t, dev)
4466e0d0be7STrond Myklebust 			__field(u64, dir)
4476e0d0be7STrond Myklebust 			__string(name, dentry->d_name.name)
4486e0d0be7STrond Myklebust 		),
4496e0d0be7STrond Myklebust 
4506e0d0be7STrond Myklebust 		TP_fast_assign(
4516e0d0be7STrond Myklebust 			__entry->dev = dir->i_sb->s_dev;
4526e0d0be7STrond Myklebust 			__entry->dir = NFS_FILEID(dir);
45338a638a7SChuck Lever 			__entry->error = error < 0 ? -error : 0;
4546e0d0be7STrond Myklebust 			__entry->flags = flags;
4556e0d0be7STrond Myklebust 			__assign_str(name, dentry->d_name.name);
4566e0d0be7STrond Myklebust 		),
4576e0d0be7STrond Myklebust 
4586e0d0be7STrond Myklebust 		TP_printk(
4597d4006c1SChuck Lever 			"error=%ld (%s) flags=0x%lx (%s) name=%02x:%02x:%llu/%s",
4608791545eSChuck Lever 			-__entry->error, show_nfs_status(__entry->error),
4616e0d0be7STrond Myklebust 			__entry->flags,
4629d2d48bbSChuck Lever 			show_fs_lookup_flags(__entry->flags),
4636e0d0be7STrond Myklebust 			MAJOR(__entry->dev), MINOR(__entry->dev),
4646e0d0be7STrond Myklebust 			(unsigned long long)__entry->dir,
4656e0d0be7STrond Myklebust 			__get_str(name)
4666e0d0be7STrond Myklebust 		)
4676e0d0be7STrond Myklebust );
4686e0d0be7STrond Myklebust 
4696e0d0be7STrond Myklebust #define DEFINE_NFS_LOOKUP_EVENT_DONE(name) \
4706e0d0be7STrond Myklebust 	DEFINE_EVENT(nfs_lookup_event_done, name, \
4716e0d0be7STrond Myklebust 			TP_PROTO( \
4726e0d0be7STrond Myklebust 				const struct inode *dir, \
4736e0d0be7STrond Myklebust 				const struct dentry *dentry, \
4746e0d0be7STrond Myklebust 				unsigned int flags, \
4756e0d0be7STrond Myklebust 				int error \
4766e0d0be7STrond Myklebust 			), \
4776e0d0be7STrond Myklebust 			TP_ARGS(dir, dentry, flags, error))
4786e0d0be7STrond Myklebust 
4796e0d0be7STrond Myklebust DEFINE_NFS_LOOKUP_EVENT(nfs_lookup_enter);
4806e0d0be7STrond Myklebust DEFINE_NFS_LOOKUP_EVENT_DONE(nfs_lookup_exit);
4816e0d0be7STrond Myklebust DEFINE_NFS_LOOKUP_EVENT(nfs_lookup_revalidate_enter);
4826e0d0be7STrond Myklebust DEFINE_NFS_LOOKUP_EVENT_DONE(nfs_lookup_revalidate_exit);
483eace45a1STrond Myklebust DEFINE_NFS_LOOKUP_EVENT(nfs_readdir_lookup);
484eace45a1STrond Myklebust DEFINE_NFS_LOOKUP_EVENT(nfs_readdir_lookup_revalidate_failed);
485eace45a1STrond Myklebust DEFINE_NFS_LOOKUP_EVENT_DONE(nfs_readdir_lookup_revalidate);
4866e0d0be7STrond Myklebust 
4876e0d0be7STrond Myklebust TRACE_EVENT(nfs_atomic_open_enter,
4886e0d0be7STrond Myklebust 		TP_PROTO(
4896e0d0be7STrond Myklebust 			const struct inode *dir,
4906e0d0be7STrond Myklebust 			const struct nfs_open_context *ctx,
4916e0d0be7STrond Myklebust 			unsigned int flags
4926e0d0be7STrond Myklebust 		),
4936e0d0be7STrond Myklebust 
4946e0d0be7STrond Myklebust 		TP_ARGS(dir, ctx, flags),
4956e0d0be7STrond Myklebust 
4966e0d0be7STrond Myklebust 		TP_STRUCT__entry(
4977d4006c1SChuck Lever 			__field(unsigned long, flags)
4989d2d48bbSChuck Lever 			__field(unsigned long, fmode)
4996e0d0be7STrond Myklebust 			__field(dev_t, dev)
5006e0d0be7STrond Myklebust 			__field(u64, dir)
5016e0d0be7STrond Myklebust 			__string(name, ctx->dentry->d_name.name)
5026e0d0be7STrond Myklebust 		),
5036e0d0be7STrond Myklebust 
5046e0d0be7STrond Myklebust 		TP_fast_assign(
5056e0d0be7STrond Myklebust 			__entry->dev = dir->i_sb->s_dev;
5066e0d0be7STrond Myklebust 			__entry->dir = NFS_FILEID(dir);
5076e0d0be7STrond Myklebust 			__entry->flags = flags;
5089d2d48bbSChuck Lever 			__entry->fmode = (__force unsigned long)ctx->mode;
5096e0d0be7STrond Myklebust 			__assign_str(name, ctx->dentry->d_name.name);
5106e0d0be7STrond Myklebust 		),
5116e0d0be7STrond Myklebust 
5126e0d0be7STrond Myklebust 		TP_printk(
5137d4006c1SChuck Lever 			"flags=0x%lx (%s) fmode=%s name=%02x:%02x:%llu/%s",
5146e0d0be7STrond Myklebust 			__entry->flags,
5159d2d48bbSChuck Lever 			show_fs_fcntl_open_flags(__entry->flags),
5169d2d48bbSChuck Lever 			show_fs_fmode_flags(__entry->fmode),
5176e0d0be7STrond Myklebust 			MAJOR(__entry->dev), MINOR(__entry->dev),
5186e0d0be7STrond Myklebust 			(unsigned long long)__entry->dir,
5196e0d0be7STrond Myklebust 			__get_str(name)
5206e0d0be7STrond Myklebust 		)
5216e0d0be7STrond Myklebust );
5226e0d0be7STrond Myklebust 
5236e0d0be7STrond Myklebust TRACE_EVENT(nfs_atomic_open_exit,
5246e0d0be7STrond Myklebust 		TP_PROTO(
5256e0d0be7STrond Myklebust 			const struct inode *dir,
5266e0d0be7STrond Myklebust 			const struct nfs_open_context *ctx,
5276e0d0be7STrond Myklebust 			unsigned int flags,
5286e0d0be7STrond Myklebust 			int error
5296e0d0be7STrond Myklebust 		),
5306e0d0be7STrond Myklebust 
5316e0d0be7STrond Myklebust 		TP_ARGS(dir, ctx, flags, error),
5326e0d0be7STrond Myklebust 
5336e0d0be7STrond Myklebust 		TP_STRUCT__entry(
53438a638a7SChuck Lever 			__field(unsigned long, error)
5357d4006c1SChuck Lever 			__field(unsigned long, flags)
5369d2d48bbSChuck Lever 			__field(unsigned long, fmode)
5376e0d0be7STrond Myklebust 			__field(dev_t, dev)
5386e0d0be7STrond Myklebust 			__field(u64, dir)
5396e0d0be7STrond Myklebust 			__string(name, ctx->dentry->d_name.name)
5406e0d0be7STrond Myklebust 		),
5416e0d0be7STrond Myklebust 
5426e0d0be7STrond Myklebust 		TP_fast_assign(
54338a638a7SChuck Lever 			__entry->error = -error;
5446e0d0be7STrond Myklebust 			__entry->dev = dir->i_sb->s_dev;
5456e0d0be7STrond Myklebust 			__entry->dir = NFS_FILEID(dir);
5466e0d0be7STrond Myklebust 			__entry->flags = flags;
5479d2d48bbSChuck Lever 			__entry->fmode = (__force unsigned long)ctx->mode;
5486e0d0be7STrond Myklebust 			__assign_str(name, ctx->dentry->d_name.name);
5496e0d0be7STrond Myklebust 		),
5506e0d0be7STrond Myklebust 
5516e0d0be7STrond Myklebust 		TP_printk(
5527d4006c1SChuck Lever 			"error=%ld (%s) flags=0x%lx (%s) fmode=%s "
5536e0d0be7STrond Myklebust 			"name=%02x:%02x:%llu/%s",
5548791545eSChuck Lever 			-__entry->error, show_nfs_status(__entry->error),
5556e0d0be7STrond Myklebust 			__entry->flags,
5569d2d48bbSChuck Lever 			show_fs_fcntl_open_flags(__entry->flags),
5579d2d48bbSChuck Lever 			show_fs_fmode_flags(__entry->fmode),
5586e0d0be7STrond Myklebust 			MAJOR(__entry->dev), MINOR(__entry->dev),
5596e0d0be7STrond Myklebust 			(unsigned long long)__entry->dir,
5606e0d0be7STrond Myklebust 			__get_str(name)
5616e0d0be7STrond Myklebust 		)
5626e0d0be7STrond Myklebust );
5636e0d0be7STrond Myklebust 
5648b0ad3d4STrond Myklebust TRACE_EVENT(nfs_create_enter,
5658b0ad3d4STrond Myklebust 		TP_PROTO(
5668b0ad3d4STrond Myklebust 			const struct inode *dir,
5678b0ad3d4STrond Myklebust 			const struct dentry *dentry,
5688b0ad3d4STrond Myklebust 			unsigned int flags
5698b0ad3d4STrond Myklebust 		),
5708b0ad3d4STrond Myklebust 
5718b0ad3d4STrond Myklebust 		TP_ARGS(dir, dentry, flags),
5728b0ad3d4STrond Myklebust 
5738b0ad3d4STrond Myklebust 		TP_STRUCT__entry(
5747d4006c1SChuck Lever 			__field(unsigned long, flags)
5758b0ad3d4STrond Myklebust 			__field(dev_t, dev)
5768b0ad3d4STrond Myklebust 			__field(u64, dir)
5778b0ad3d4STrond Myklebust 			__string(name, dentry->d_name.name)
5788b0ad3d4STrond Myklebust 		),
5798b0ad3d4STrond Myklebust 
5808b0ad3d4STrond Myklebust 		TP_fast_assign(
5818b0ad3d4STrond Myklebust 			__entry->dev = dir->i_sb->s_dev;
5828b0ad3d4STrond Myklebust 			__entry->dir = NFS_FILEID(dir);
5838b0ad3d4STrond Myklebust 			__entry->flags = flags;
5848b0ad3d4STrond Myklebust 			__assign_str(name, dentry->d_name.name);
5858b0ad3d4STrond Myklebust 		),
5868b0ad3d4STrond Myklebust 
5878b0ad3d4STrond Myklebust 		TP_printk(
5887d4006c1SChuck Lever 			"flags=0x%lx (%s) name=%02x:%02x:%llu/%s",
5898b0ad3d4STrond Myklebust 			__entry->flags,
5909d2d48bbSChuck Lever 			show_fs_fcntl_open_flags(__entry->flags),
5918b0ad3d4STrond Myklebust 			MAJOR(__entry->dev), MINOR(__entry->dev),
5928b0ad3d4STrond Myklebust 			(unsigned long long)__entry->dir,
5938b0ad3d4STrond Myklebust 			__get_str(name)
5948b0ad3d4STrond Myklebust 		)
5958b0ad3d4STrond Myklebust );
5968b0ad3d4STrond Myklebust 
5978b0ad3d4STrond Myklebust TRACE_EVENT(nfs_create_exit,
5988b0ad3d4STrond Myklebust 		TP_PROTO(
5998b0ad3d4STrond Myklebust 			const struct inode *dir,
6008b0ad3d4STrond Myklebust 			const struct dentry *dentry,
6018b0ad3d4STrond Myklebust 			unsigned int flags,
6028b0ad3d4STrond Myklebust 			int error
6038b0ad3d4STrond Myklebust 		),
6048b0ad3d4STrond Myklebust 
6058b0ad3d4STrond Myklebust 		TP_ARGS(dir, dentry, flags, error),
6068b0ad3d4STrond Myklebust 
6078b0ad3d4STrond Myklebust 		TP_STRUCT__entry(
60838a638a7SChuck Lever 			__field(unsigned long, error)
6097d4006c1SChuck Lever 			__field(unsigned long, flags)
6108b0ad3d4STrond Myklebust 			__field(dev_t, dev)
6118b0ad3d4STrond Myklebust 			__field(u64, dir)
6128b0ad3d4STrond Myklebust 			__string(name, dentry->d_name.name)
6138b0ad3d4STrond Myklebust 		),
6148b0ad3d4STrond Myklebust 
6158b0ad3d4STrond Myklebust 		TP_fast_assign(
61638a638a7SChuck Lever 			__entry->error = -error;
6178b0ad3d4STrond Myklebust 			__entry->dev = dir->i_sb->s_dev;
6188b0ad3d4STrond Myklebust 			__entry->dir = NFS_FILEID(dir);
6198b0ad3d4STrond Myklebust 			__entry->flags = flags;
6208b0ad3d4STrond Myklebust 			__assign_str(name, dentry->d_name.name);
6218b0ad3d4STrond Myklebust 		),
6228b0ad3d4STrond Myklebust 
6238b0ad3d4STrond Myklebust 		TP_printk(
6247d4006c1SChuck Lever 			"error=%ld (%s) flags=0x%lx (%s) name=%02x:%02x:%llu/%s",
6258791545eSChuck Lever 			-__entry->error, show_nfs_status(__entry->error),
6268b0ad3d4STrond Myklebust 			__entry->flags,
6279d2d48bbSChuck Lever 			show_fs_fcntl_open_flags(__entry->flags),
6288b0ad3d4STrond Myklebust 			MAJOR(__entry->dev), MINOR(__entry->dev),
6298b0ad3d4STrond Myklebust 			(unsigned long long)__entry->dir,
6308b0ad3d4STrond Myklebust 			__get_str(name)
6318b0ad3d4STrond Myklebust 		)
6328b0ad3d4STrond Myklebust );
6338b0ad3d4STrond Myklebust 
6341ca42382STrond Myklebust DECLARE_EVENT_CLASS(nfs_directory_event,
6351ca42382STrond Myklebust 		TP_PROTO(
6361ca42382STrond Myklebust 			const struct inode *dir,
6371ca42382STrond Myklebust 			const struct dentry *dentry
6381ca42382STrond Myklebust 		),
6391ca42382STrond Myklebust 
6401ca42382STrond Myklebust 		TP_ARGS(dir, dentry),
6411ca42382STrond Myklebust 
6421ca42382STrond Myklebust 		TP_STRUCT__entry(
6431ca42382STrond Myklebust 			__field(dev_t, dev)
6441ca42382STrond Myklebust 			__field(u64, dir)
6451ca42382STrond Myklebust 			__string(name, dentry->d_name.name)
6461ca42382STrond Myklebust 		),
6471ca42382STrond Myklebust 
6481ca42382STrond Myklebust 		TP_fast_assign(
6491ca42382STrond Myklebust 			__entry->dev = dir->i_sb->s_dev;
6501ca42382STrond Myklebust 			__entry->dir = NFS_FILEID(dir);
6511ca42382STrond Myklebust 			__assign_str(name, dentry->d_name.name);
6521ca42382STrond Myklebust 		),
6531ca42382STrond Myklebust 
6541ca42382STrond Myklebust 		TP_printk(
6551ca42382STrond Myklebust 			"name=%02x:%02x:%llu/%s",
6561ca42382STrond Myklebust 			MAJOR(__entry->dev), MINOR(__entry->dev),
6571ca42382STrond Myklebust 			(unsigned long long)__entry->dir,
6581ca42382STrond Myklebust 			__get_str(name)
6591ca42382STrond Myklebust 		)
6601ca42382STrond Myklebust );
6611ca42382STrond Myklebust 
6621ca42382STrond Myklebust #define DEFINE_NFS_DIRECTORY_EVENT(name) \
6631ca42382STrond Myklebust 	DEFINE_EVENT(nfs_directory_event, name, \
6641ca42382STrond Myklebust 			TP_PROTO( \
6651ca42382STrond Myklebust 				const struct inode *dir, \
6661ca42382STrond Myklebust 				const struct dentry *dentry \
6671ca42382STrond Myklebust 			), \
6681ca42382STrond Myklebust 			TP_ARGS(dir, dentry))
6691ca42382STrond Myklebust 
6701ca42382STrond Myklebust DECLARE_EVENT_CLASS(nfs_directory_event_done,
6711ca42382STrond Myklebust 		TP_PROTO(
6721ca42382STrond Myklebust 			const struct inode *dir,
6731ca42382STrond Myklebust 			const struct dentry *dentry,
6741ca42382STrond Myklebust 			int error
6751ca42382STrond Myklebust 		),
6761ca42382STrond Myklebust 
6771ca42382STrond Myklebust 		TP_ARGS(dir, dentry, error),
6781ca42382STrond Myklebust 
6791ca42382STrond Myklebust 		TP_STRUCT__entry(
68038a638a7SChuck Lever 			__field(unsigned long, error)
6811ca42382STrond Myklebust 			__field(dev_t, dev)
6821ca42382STrond Myklebust 			__field(u64, dir)
6831ca42382STrond Myklebust 			__string(name, dentry->d_name.name)
6841ca42382STrond Myklebust 		),
6851ca42382STrond Myklebust 
6861ca42382STrond Myklebust 		TP_fast_assign(
6871ca42382STrond Myklebust 			__entry->dev = dir->i_sb->s_dev;
6881ca42382STrond Myklebust 			__entry->dir = NFS_FILEID(dir);
68938a638a7SChuck Lever 			__entry->error = error < 0 ? -error : 0;
6901ca42382STrond Myklebust 			__assign_str(name, dentry->d_name.name);
6911ca42382STrond Myklebust 		),
6921ca42382STrond Myklebust 
6931ca42382STrond Myklebust 		TP_printk(
69438a638a7SChuck Lever 			"error=%ld (%s) name=%02x:%02x:%llu/%s",
6958791545eSChuck Lever 			-__entry->error, show_nfs_status(__entry->error),
6961ca42382STrond Myklebust 			MAJOR(__entry->dev), MINOR(__entry->dev),
6971ca42382STrond Myklebust 			(unsigned long long)__entry->dir,
6981ca42382STrond Myklebust 			__get_str(name)
6991ca42382STrond Myklebust 		)
7001ca42382STrond Myklebust );
7011ca42382STrond Myklebust 
7021ca42382STrond Myklebust #define DEFINE_NFS_DIRECTORY_EVENT_DONE(name) \
7031ca42382STrond Myklebust 	DEFINE_EVENT(nfs_directory_event_done, name, \
7041ca42382STrond Myklebust 			TP_PROTO( \
7051ca42382STrond Myklebust 				const struct inode *dir, \
7061ca42382STrond Myklebust 				const struct dentry *dentry, \
7071ca42382STrond Myklebust 				int error \
7081ca42382STrond Myklebust 			), \
7091ca42382STrond Myklebust 			TP_ARGS(dir, dentry, error))
7101ca42382STrond Myklebust 
7111ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT(nfs_mknod_enter);
7121ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_mknod_exit);
7131ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT(nfs_mkdir_enter);
7141ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_mkdir_exit);
7151ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT(nfs_rmdir_enter);
7161ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_rmdir_exit);
7171ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT(nfs_remove_enter);
7181ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_remove_exit);
7191ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT(nfs_unlink_enter);
7201ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_unlink_exit);
7211ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT(nfs_symlink_enter);
7221ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_symlink_exit);
7231ca42382STrond Myklebust 
7241fd1085bSTrond Myklebust TRACE_EVENT(nfs_link_enter,
7251fd1085bSTrond Myklebust 		TP_PROTO(
7261fd1085bSTrond Myklebust 			const struct inode *inode,
7271fd1085bSTrond Myklebust 			const struct inode *dir,
7281fd1085bSTrond Myklebust 			const struct dentry *dentry
7291fd1085bSTrond Myklebust 		),
7301fd1085bSTrond Myklebust 
7311fd1085bSTrond Myklebust 		TP_ARGS(inode, dir, dentry),
7321fd1085bSTrond Myklebust 
7331fd1085bSTrond Myklebust 		TP_STRUCT__entry(
7341fd1085bSTrond Myklebust 			__field(dev_t, dev)
7351fd1085bSTrond Myklebust 			__field(u64, fileid)
7361fd1085bSTrond Myklebust 			__field(u64, dir)
7371fd1085bSTrond Myklebust 			__string(name, dentry->d_name.name)
7381fd1085bSTrond Myklebust 		),
7391fd1085bSTrond Myklebust 
7401fd1085bSTrond Myklebust 		TP_fast_assign(
7411fd1085bSTrond Myklebust 			__entry->dev = inode->i_sb->s_dev;
7421fd1085bSTrond Myklebust 			__entry->fileid = NFS_FILEID(inode);
7431fd1085bSTrond Myklebust 			__entry->dir = NFS_FILEID(dir);
7441fd1085bSTrond Myklebust 			__assign_str(name, dentry->d_name.name);
7451fd1085bSTrond Myklebust 		),
7461fd1085bSTrond Myklebust 
7471fd1085bSTrond Myklebust 		TP_printk(
7481fd1085bSTrond Myklebust 			"fileid=%02x:%02x:%llu name=%02x:%02x:%llu/%s",
7491fd1085bSTrond Myklebust 			MAJOR(__entry->dev), MINOR(__entry->dev),
7501fd1085bSTrond Myklebust 			__entry->fileid,
7511fd1085bSTrond Myklebust 			MAJOR(__entry->dev), MINOR(__entry->dev),
7521fd1085bSTrond Myklebust 			(unsigned long long)__entry->dir,
7531fd1085bSTrond Myklebust 			__get_str(name)
7541fd1085bSTrond Myklebust 		)
7551fd1085bSTrond Myklebust );
7561fd1085bSTrond Myklebust 
7571fd1085bSTrond Myklebust TRACE_EVENT(nfs_link_exit,
7581fd1085bSTrond Myklebust 		TP_PROTO(
7591fd1085bSTrond Myklebust 			const struct inode *inode,
7601fd1085bSTrond Myklebust 			const struct inode *dir,
7611fd1085bSTrond Myklebust 			const struct dentry *dentry,
7621fd1085bSTrond Myklebust 			int error
7631fd1085bSTrond Myklebust 		),
7641fd1085bSTrond Myklebust 
7651fd1085bSTrond Myklebust 		TP_ARGS(inode, dir, dentry, error),
7661fd1085bSTrond Myklebust 
7671fd1085bSTrond Myklebust 		TP_STRUCT__entry(
76838a638a7SChuck Lever 			__field(unsigned long, error)
7691fd1085bSTrond Myklebust 			__field(dev_t, dev)
7701fd1085bSTrond Myklebust 			__field(u64, fileid)
7711fd1085bSTrond Myklebust 			__field(u64, dir)
7721fd1085bSTrond Myklebust 			__string(name, dentry->d_name.name)
7731fd1085bSTrond Myklebust 		),
7741fd1085bSTrond Myklebust 
7751fd1085bSTrond Myklebust 		TP_fast_assign(
7761fd1085bSTrond Myklebust 			__entry->dev = inode->i_sb->s_dev;
7771fd1085bSTrond Myklebust 			__entry->fileid = NFS_FILEID(inode);
7781fd1085bSTrond Myklebust 			__entry->dir = NFS_FILEID(dir);
77938a638a7SChuck Lever 			__entry->error = error < 0 ? -error : 0;
7801fd1085bSTrond Myklebust 			__assign_str(name, dentry->d_name.name);
7811fd1085bSTrond Myklebust 		),
7821fd1085bSTrond Myklebust 
7831fd1085bSTrond Myklebust 		TP_printk(
78438a638a7SChuck Lever 			"error=%ld (%s) fileid=%02x:%02x:%llu name=%02x:%02x:%llu/%s",
7858791545eSChuck Lever 			-__entry->error, show_nfs_status(__entry->error),
7861fd1085bSTrond Myklebust 			MAJOR(__entry->dev), MINOR(__entry->dev),
7871fd1085bSTrond Myklebust 			__entry->fileid,
7881fd1085bSTrond Myklebust 			MAJOR(__entry->dev), MINOR(__entry->dev),
7891fd1085bSTrond Myklebust 			(unsigned long long)__entry->dir,
7901fd1085bSTrond Myklebust 			__get_str(name)
7911fd1085bSTrond Myklebust 		)
7921fd1085bSTrond Myklebust );
7931fd1085bSTrond Myklebust 
79470ded201STrond Myklebust DECLARE_EVENT_CLASS(nfs_rename_event,
79570ded201STrond Myklebust 		TP_PROTO(
79670ded201STrond Myklebust 			const struct inode *old_dir,
79770ded201STrond Myklebust 			const struct dentry *old_dentry,
79870ded201STrond Myklebust 			const struct inode *new_dir,
79970ded201STrond Myklebust 			const struct dentry *new_dentry
80070ded201STrond Myklebust 		),
80170ded201STrond Myklebust 
80270ded201STrond Myklebust 		TP_ARGS(old_dir, old_dentry, new_dir, new_dentry),
80370ded201STrond Myklebust 
80470ded201STrond Myklebust 		TP_STRUCT__entry(
80570ded201STrond Myklebust 			__field(dev_t, dev)
80670ded201STrond Myklebust 			__field(u64, old_dir)
80770ded201STrond Myklebust 			__field(u64, new_dir)
80870ded201STrond Myklebust 			__string(old_name, old_dentry->d_name.name)
80970ded201STrond Myklebust 			__string(new_name, new_dentry->d_name.name)
81070ded201STrond Myklebust 		),
81170ded201STrond Myklebust 
81270ded201STrond Myklebust 		TP_fast_assign(
81370ded201STrond Myklebust 			__entry->dev = old_dir->i_sb->s_dev;
81470ded201STrond Myklebust 			__entry->old_dir = NFS_FILEID(old_dir);
81570ded201STrond Myklebust 			__entry->new_dir = NFS_FILEID(new_dir);
81670ded201STrond Myklebust 			__assign_str(old_name, old_dentry->d_name.name);
81770ded201STrond Myklebust 			__assign_str(new_name, new_dentry->d_name.name);
81870ded201STrond Myklebust 		),
81970ded201STrond Myklebust 
82070ded201STrond Myklebust 		TP_printk(
82170ded201STrond Myklebust 			"old_name=%02x:%02x:%llu/%s new_name=%02x:%02x:%llu/%s",
82270ded201STrond Myklebust 			MAJOR(__entry->dev), MINOR(__entry->dev),
82370ded201STrond Myklebust 			(unsigned long long)__entry->old_dir,
82470ded201STrond Myklebust 			__get_str(old_name),
82570ded201STrond Myklebust 			MAJOR(__entry->dev), MINOR(__entry->dev),
82670ded201STrond Myklebust 			(unsigned long long)__entry->new_dir,
82770ded201STrond Myklebust 			__get_str(new_name)
82870ded201STrond Myklebust 		)
82970ded201STrond Myklebust );
83070ded201STrond Myklebust #define DEFINE_NFS_RENAME_EVENT(name) \
83170ded201STrond Myklebust 	DEFINE_EVENT(nfs_rename_event, name, \
83270ded201STrond Myklebust 			TP_PROTO( \
83370ded201STrond Myklebust 				const struct inode *old_dir, \
83470ded201STrond Myklebust 				const struct dentry *old_dentry, \
83570ded201STrond Myklebust 				const struct inode *new_dir, \
83670ded201STrond Myklebust 				const struct dentry *new_dentry \
83770ded201STrond Myklebust 			), \
83870ded201STrond Myklebust 			TP_ARGS(old_dir, old_dentry, new_dir, new_dentry))
83970ded201STrond Myklebust 
84070ded201STrond Myklebust DECLARE_EVENT_CLASS(nfs_rename_event_done,
84170ded201STrond Myklebust 		TP_PROTO(
84270ded201STrond Myklebust 			const struct inode *old_dir,
84370ded201STrond Myklebust 			const struct dentry *old_dentry,
84470ded201STrond Myklebust 			const struct inode *new_dir,
84570ded201STrond Myklebust 			const struct dentry *new_dentry,
84670ded201STrond Myklebust 			int error
84770ded201STrond Myklebust 		),
84870ded201STrond Myklebust 
84970ded201STrond Myklebust 		TP_ARGS(old_dir, old_dentry, new_dir, new_dentry, error),
85070ded201STrond Myklebust 
85170ded201STrond Myklebust 		TP_STRUCT__entry(
85270ded201STrond Myklebust 			__field(dev_t, dev)
85338a638a7SChuck Lever 			__field(unsigned long, error)
85470ded201STrond Myklebust 			__field(u64, old_dir)
85570ded201STrond Myklebust 			__string(old_name, old_dentry->d_name.name)
85670ded201STrond Myklebust 			__field(u64, new_dir)
85770ded201STrond Myklebust 			__string(new_name, new_dentry->d_name.name)
85870ded201STrond Myklebust 		),
85970ded201STrond Myklebust 
86070ded201STrond Myklebust 		TP_fast_assign(
86170ded201STrond Myklebust 			__entry->dev = old_dir->i_sb->s_dev;
86238a638a7SChuck Lever 			__entry->error = -error;
86370ded201STrond Myklebust 			__entry->old_dir = NFS_FILEID(old_dir);
86470ded201STrond Myklebust 			__entry->new_dir = NFS_FILEID(new_dir);
86570ded201STrond Myklebust 			__assign_str(old_name, old_dentry->d_name.name);
86670ded201STrond Myklebust 			__assign_str(new_name, new_dentry->d_name.name);
86770ded201STrond Myklebust 		),
86870ded201STrond Myklebust 
86970ded201STrond Myklebust 		TP_printk(
87038a638a7SChuck Lever 			"error=%ld (%s) old_name=%02x:%02x:%llu/%s "
87170ded201STrond Myklebust 			"new_name=%02x:%02x:%llu/%s",
8728791545eSChuck Lever 			-__entry->error, show_nfs_status(__entry->error),
87370ded201STrond Myklebust 			MAJOR(__entry->dev), MINOR(__entry->dev),
87470ded201STrond Myklebust 			(unsigned long long)__entry->old_dir,
87570ded201STrond Myklebust 			__get_str(old_name),
87670ded201STrond Myklebust 			MAJOR(__entry->dev), MINOR(__entry->dev),
87770ded201STrond Myklebust 			(unsigned long long)__entry->new_dir,
87870ded201STrond Myklebust 			__get_str(new_name)
87970ded201STrond Myklebust 		)
88070ded201STrond Myklebust );
88170ded201STrond Myklebust #define DEFINE_NFS_RENAME_EVENT_DONE(name) \
88270ded201STrond Myklebust 	DEFINE_EVENT(nfs_rename_event_done, name, \
88370ded201STrond Myklebust 			TP_PROTO( \
88470ded201STrond Myklebust 				const struct inode *old_dir, \
88570ded201STrond Myklebust 				const struct dentry *old_dentry, \
88670ded201STrond Myklebust 				const struct inode *new_dir, \
88770ded201STrond Myklebust 				const struct dentry *new_dentry, \
88870ded201STrond Myklebust 				int error \
88970ded201STrond Myklebust 			), \
89070ded201STrond Myklebust 			TP_ARGS(old_dir, old_dentry, new_dir, \
89170ded201STrond Myklebust 				new_dentry, error))
89270ded201STrond Myklebust 
89370ded201STrond Myklebust DEFINE_NFS_RENAME_EVENT(nfs_rename_enter);
89470ded201STrond Myklebust DEFINE_NFS_RENAME_EVENT_DONE(nfs_rename_exit);
89570ded201STrond Myklebust 
89670ded201STrond Myklebust DEFINE_NFS_RENAME_EVENT_DONE(nfs_sillyrename_rename);
89770ded201STrond Myklebust 
89870ded201STrond Myklebust TRACE_EVENT(nfs_sillyrename_unlink,
89970ded201STrond Myklebust 		TP_PROTO(
90070ded201STrond Myklebust 			const struct nfs_unlinkdata *data,
90170ded201STrond Myklebust 			int error
90270ded201STrond Myklebust 		),
90370ded201STrond Myklebust 
90470ded201STrond Myklebust 		TP_ARGS(data, error),
90570ded201STrond Myklebust 
90670ded201STrond Myklebust 		TP_STRUCT__entry(
90770ded201STrond Myklebust 			__field(dev_t, dev)
90838a638a7SChuck Lever 			__field(unsigned long, error)
90970ded201STrond Myklebust 			__field(u64, dir)
91070ded201STrond Myklebust 			__dynamic_array(char, name, data->args.name.len + 1)
91170ded201STrond Myklebust 		),
91270ded201STrond Myklebust 
91370ded201STrond Myklebust 		TP_fast_assign(
914884be175SAl Viro 			struct inode *dir = d_inode(data->dentry->d_parent);
91570ded201STrond Myklebust 			size_t len = data->args.name.len;
91670ded201STrond Myklebust 			__entry->dev = dir->i_sb->s_dev;
91770ded201STrond Myklebust 			__entry->dir = NFS_FILEID(dir);
91838a638a7SChuck Lever 			__entry->error = -error;
919752d596bSDaniel Bristot de Oliveira 			memcpy(__get_str(name),
92070ded201STrond Myklebust 				data->args.name.name, len);
921752d596bSDaniel Bristot de Oliveira 			__get_str(name)[len] = 0;
92270ded201STrond Myklebust 		),
92370ded201STrond Myklebust 
92470ded201STrond Myklebust 		TP_printk(
92538a638a7SChuck Lever 			"error=%ld (%s) name=%02x:%02x:%llu/%s",
9268791545eSChuck Lever 			-__entry->error, show_nfs_status(__entry->error),
92770ded201STrond Myklebust 			MAJOR(__entry->dev), MINOR(__entry->dev),
92870ded201STrond Myklebust 			(unsigned long long)__entry->dir,
92970ded201STrond Myklebust 			__get_str(name)
93070ded201STrond Myklebust 		)
93170ded201STrond Myklebust );
9328224b273SChuck Lever 
933eb5654b3STrond Myklebust DECLARE_EVENT_CLASS(nfs_folio_event,
934d9f87743SChuck Lever 		TP_PROTO(
935d9f87743SChuck Lever 			const struct inode *inode,
936ab75bff1STrond Myklebust 			struct folio *folio
937d9f87743SChuck Lever 		),
938d9f87743SChuck Lever 
939ab75bff1STrond Myklebust 		TP_ARGS(inode, folio),
940d9f87743SChuck Lever 
941d9f87743SChuck Lever 		TP_STRUCT__entry(
942d9f87743SChuck Lever 			__field(dev_t, dev)
943d9f87743SChuck Lever 			__field(u32, fhandle)
944d9f87743SChuck Lever 			__field(u64, fileid)
945d9f87743SChuck Lever 			__field(u64, version)
946d9f87743SChuck Lever 			__field(loff_t, offset)
947eb5654b3STrond Myklebust 			__field(u32, count)
948d9f87743SChuck Lever 		),
949d9f87743SChuck Lever 
950d9f87743SChuck Lever 		TP_fast_assign(
951d9f87743SChuck Lever 			const struct nfs_inode *nfsi = NFS_I(inode);
952d9f87743SChuck Lever 
953d9f87743SChuck Lever 			__entry->dev = inode->i_sb->s_dev;
954d9f87743SChuck Lever 			__entry->fileid = nfsi->fileid;
955d9f87743SChuck Lever 			__entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
956d9f87743SChuck Lever 			__entry->version = inode_peek_iversion_raw(inode);
957ab75bff1STrond Myklebust 			__entry->offset = folio_file_pos(folio);
958eb5654b3STrond Myklebust 			__entry->count = nfs_folio_length(folio);
959d9f87743SChuck Lever 		),
960d9f87743SChuck Lever 
961d9f87743SChuck Lever 		TP_printk(
962eb5654b3STrond Myklebust 			"fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu "
963eb5654b3STrond Myklebust 			"offset=%lld count=%u",
964d9f87743SChuck Lever 			MAJOR(__entry->dev), MINOR(__entry->dev),
965d9f87743SChuck Lever 			(unsigned long long)__entry->fileid,
966d9f87743SChuck Lever 			__entry->fhandle, __entry->version,
967eb5654b3STrond Myklebust 			__entry->offset, __entry->count
968d9f87743SChuck Lever 		)
969d9f87743SChuck Lever );
970d9f87743SChuck Lever 
971eb5654b3STrond Myklebust #define DEFINE_NFS_FOLIO_EVENT(name) \
972eb5654b3STrond Myklebust 	DEFINE_EVENT(nfs_folio_event, name, \
973eb5654b3STrond Myklebust 			TP_PROTO( \
974eb5654b3STrond Myklebust 				const struct inode *inode, \
975eb5654b3STrond Myklebust 				struct folio *folio \
976eb5654b3STrond Myklebust 			), \
977eb5654b3STrond Myklebust 			TP_ARGS(inode, folio))
978eb5654b3STrond Myklebust 
979eb5654b3STrond Myklebust DECLARE_EVENT_CLASS(nfs_folio_event_done,
980d9f87743SChuck Lever 		TP_PROTO(
981d9f87743SChuck Lever 			const struct inode *inode,
982ab75bff1STrond Myklebust 			struct folio *folio,
983d9f87743SChuck Lever 			int ret
984d9f87743SChuck Lever 		),
985d9f87743SChuck Lever 
986ab75bff1STrond Myklebust 		TP_ARGS(inode, folio, ret),
987d9f87743SChuck Lever 
988d9f87743SChuck Lever 		TP_STRUCT__entry(
989d9f87743SChuck Lever 			__field(dev_t, dev)
990d9f87743SChuck Lever 			__field(u32, fhandle)
991d9f87743SChuck Lever 			__field(int, ret)
992d9f87743SChuck Lever 			__field(u64, fileid)
993d9f87743SChuck Lever 			__field(u64, version)
994d9f87743SChuck Lever 			__field(loff_t, offset)
995eb5654b3STrond Myklebust 			__field(u32, count)
996d9f87743SChuck Lever 		),
997d9f87743SChuck Lever 
998d9f87743SChuck Lever 		TP_fast_assign(
999d9f87743SChuck Lever 			const struct nfs_inode *nfsi = NFS_I(inode);
1000d9f87743SChuck Lever 
1001d9f87743SChuck Lever 			__entry->dev = inode->i_sb->s_dev;
1002d9f87743SChuck Lever 			__entry->fileid = nfsi->fileid;
1003d9f87743SChuck Lever 			__entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
1004d9f87743SChuck Lever 			__entry->version = inode_peek_iversion_raw(inode);
1005ab75bff1STrond Myklebust 			__entry->offset = folio_file_pos(folio);
1006eb5654b3STrond Myklebust 			__entry->count = nfs_folio_length(folio);
1007d9f87743SChuck Lever 			__entry->ret = ret;
1008d9f87743SChuck Lever 		),
1009d9f87743SChuck Lever 
1010d9f87743SChuck Lever 		TP_printk(
1011eb5654b3STrond Myklebust 			"fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu "
1012eb5654b3STrond Myklebust 			"offset=%lld count=%u ret=%d",
1013d9f87743SChuck Lever 			MAJOR(__entry->dev), MINOR(__entry->dev),
1014d9f87743SChuck Lever 			(unsigned long long)__entry->fileid,
1015d9f87743SChuck Lever 			__entry->fhandle, __entry->version,
1016eb5654b3STrond Myklebust 			__entry->offset, __entry->count, __entry->ret
1017d9f87743SChuck Lever 		)
1018d9f87743SChuck Lever );
1019d9f87743SChuck Lever 
1020eb5654b3STrond Myklebust #define DEFINE_NFS_FOLIO_EVENT_DONE(name) \
1021eb5654b3STrond Myklebust 	DEFINE_EVENT(nfs_folio_event_done, name, \
1022eb5654b3STrond Myklebust 			TP_PROTO( \
1023eb5654b3STrond Myklebust 				const struct inode *inode, \
1024eb5654b3STrond Myklebust 				struct folio *folio, \
1025eb5654b3STrond Myklebust 				int ret \
1026eb5654b3STrond Myklebust 			), \
1027eb5654b3STrond Myklebust 			TP_ARGS(inode, folio, ret))
1028eb5654b3STrond Myklebust 
1029eb5654b3STrond Myklebust DEFINE_NFS_FOLIO_EVENT(nfs_aop_readpage);
1030eb5654b3STrond Myklebust DEFINE_NFS_FOLIO_EVENT_DONE(nfs_aop_readpage_done);
1031eb5654b3STrond Myklebust 
1032*256093feSTrond Myklebust DEFINE_NFS_FOLIO_EVENT(nfs_writeback_folio);
1033*256093feSTrond Myklebust DEFINE_NFS_FOLIO_EVENT_DONE(nfs_writeback_folio_done);
1034*256093feSTrond Myklebust 
1035eb5654b3STrond Myklebust DEFINE_NFS_FOLIO_EVENT(nfs_invalidate_folio);
1036eb5654b3STrond Myklebust DEFINE_NFS_FOLIO_EVENT_DONE(nfs_launder_folio_done);
1037eb5654b3STrond Myklebust 
1038d9f87743SChuck Lever TRACE_EVENT(nfs_aop_readahead,
1039d9f87743SChuck Lever 		TP_PROTO(
1040d9f87743SChuck Lever 			const struct inode *inode,
10418786fde8SMatthew Wilcox (Oracle) 			loff_t pos,
1042d9f87743SChuck Lever 			unsigned int nr_pages
1043d9f87743SChuck Lever 		),
1044d9f87743SChuck Lever 
10458786fde8SMatthew Wilcox (Oracle) 		TP_ARGS(inode, pos, nr_pages),
1046d9f87743SChuck Lever 
1047d9f87743SChuck Lever 		TP_STRUCT__entry(
1048d9f87743SChuck Lever 			__field(dev_t, dev)
1049d9f87743SChuck Lever 			__field(u32, fhandle)
1050d9f87743SChuck Lever 			__field(u64, fileid)
1051d9f87743SChuck Lever 			__field(u64, version)
1052edfa0b16SDave Wysochanski 			__field(loff_t, offset)
1053d9f87743SChuck Lever 			__field(unsigned int, nr_pages)
1054d9f87743SChuck Lever 		),
1055d9f87743SChuck Lever 
1056d9f87743SChuck Lever 		TP_fast_assign(
1057d9f87743SChuck Lever 			const struct nfs_inode *nfsi = NFS_I(inode);
1058d9f87743SChuck Lever 
1059d9f87743SChuck Lever 			__entry->dev = inode->i_sb->s_dev;
1060d9f87743SChuck Lever 			__entry->fileid = nfsi->fileid;
1061d9f87743SChuck Lever 			__entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
1062d9f87743SChuck Lever 			__entry->version = inode_peek_iversion_raw(inode);
10638786fde8SMatthew Wilcox (Oracle) 			__entry->offset = pos;
1064d9f87743SChuck Lever 			__entry->nr_pages = nr_pages;
1065d9f87743SChuck Lever 		),
1066d9f87743SChuck Lever 
1067d9f87743SChuck Lever 		TP_printk(
1068edfa0b16SDave Wysochanski 			"fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu offset=%lld nr_pages=%u",
1069d9f87743SChuck Lever 			MAJOR(__entry->dev), MINOR(__entry->dev),
1070d9f87743SChuck Lever 			(unsigned long long)__entry->fileid,
1071d9f87743SChuck Lever 			__entry->fhandle, __entry->version,
1072edfa0b16SDave Wysochanski 			__entry->offset, __entry->nr_pages
1073d9f87743SChuck Lever 		)
1074d9f87743SChuck Lever );
1075d9f87743SChuck Lever 
1076d9f87743SChuck Lever TRACE_EVENT(nfs_aop_readahead_done,
1077d9f87743SChuck Lever 		TP_PROTO(
1078d9f87743SChuck Lever 			const struct inode *inode,
1079d9f87743SChuck Lever 			unsigned int nr_pages,
1080d9f87743SChuck Lever 			int ret
1081d9f87743SChuck Lever 		),
1082d9f87743SChuck Lever 
1083d9f87743SChuck Lever 		TP_ARGS(inode, nr_pages, ret),
1084d9f87743SChuck Lever 
1085d9f87743SChuck Lever 		TP_STRUCT__entry(
1086d9f87743SChuck Lever 			__field(dev_t, dev)
1087d9f87743SChuck Lever 			__field(u32, fhandle)
1088d9f87743SChuck Lever 			__field(int, ret)
1089d9f87743SChuck Lever 			__field(u64, fileid)
1090d9f87743SChuck Lever 			__field(u64, version)
1091edfa0b16SDave Wysochanski 			__field(loff_t, offset)
1092d9f87743SChuck Lever 			__field(unsigned int, nr_pages)
1093d9f87743SChuck Lever 		),
1094d9f87743SChuck Lever 
1095d9f87743SChuck Lever 		TP_fast_assign(
1096d9f87743SChuck Lever 			const struct nfs_inode *nfsi = NFS_I(inode);
1097d9f87743SChuck Lever 
1098d9f87743SChuck Lever 			__entry->dev = inode->i_sb->s_dev;
1099d9f87743SChuck Lever 			__entry->fileid = nfsi->fileid;
1100d9f87743SChuck Lever 			__entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
1101d9f87743SChuck Lever 			__entry->version = inode_peek_iversion_raw(inode);
1102d9f87743SChuck Lever 			__entry->nr_pages = nr_pages;
1103d9f87743SChuck Lever 			__entry->ret = ret;
1104d9f87743SChuck Lever 		),
1105d9f87743SChuck Lever 
1106d9f87743SChuck Lever 		TP_printk(
1107d9f87743SChuck Lever 			"fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu nr_pages=%u ret=%d",
1108d9f87743SChuck Lever 			MAJOR(__entry->dev), MINOR(__entry->dev),
1109d9f87743SChuck Lever 			(unsigned long long)__entry->fileid,
1110d9f87743SChuck Lever 			__entry->fhandle, __entry->version,
1111d9f87743SChuck Lever 			__entry->nr_pages, __entry->ret
1112d9f87743SChuck Lever 		)
1113d9f87743SChuck Lever );
1114d9f87743SChuck Lever 
11158224b273SChuck Lever TRACE_EVENT(nfs_initiate_read,
11168224b273SChuck Lever 		TP_PROTO(
11172343172dSTrond Myklebust 			const struct nfs_pgio_header *hdr
11188224b273SChuck Lever 		),
11198224b273SChuck Lever 
11202343172dSTrond Myklebust 		TP_ARGS(hdr),
11218224b273SChuck Lever 
11228224b273SChuck Lever 		TP_STRUCT__entry(
11238224b273SChuck Lever 			__field(dev_t, dev)
11248224b273SChuck Lever 			__field(u32, fhandle)
11258224b273SChuck Lever 			__field(u64, fileid)
11262343172dSTrond Myklebust 			__field(loff_t, offset)
11272343172dSTrond Myklebust 			__field(u32, count)
11288224b273SChuck Lever 		),
11298224b273SChuck Lever 
11308224b273SChuck Lever 		TP_fast_assign(
11312343172dSTrond Myklebust 			const struct inode *inode = hdr->inode;
11328224b273SChuck Lever 			const struct nfs_inode *nfsi = NFS_I(inode);
11332343172dSTrond Myklebust 			const struct nfs_fh *fh = hdr->args.fh ?
11342343172dSTrond Myklebust 						  hdr->args.fh : &nfsi->fh;
11358224b273SChuck Lever 
11362343172dSTrond Myklebust 			__entry->offset = hdr->args.offset;
11372343172dSTrond Myklebust 			__entry->count = hdr->args.count;
11388224b273SChuck Lever 			__entry->dev = inode->i_sb->s_dev;
11398224b273SChuck Lever 			__entry->fileid = nfsi->fileid;
11402343172dSTrond Myklebust 			__entry->fhandle = nfs_fhandle_hash(fh);
11418224b273SChuck Lever 		),
11428224b273SChuck Lever 
11438224b273SChuck Lever 		TP_printk(
11448224b273SChuck Lever 			"fileid=%02x:%02x:%llu fhandle=0x%08x "
11452343172dSTrond Myklebust 			"offset=%lld count=%u",
11468224b273SChuck Lever 			MAJOR(__entry->dev), MINOR(__entry->dev),
11478224b273SChuck Lever 			(unsigned long long)__entry->fileid,
11488224b273SChuck Lever 			__entry->fhandle,
11492343172dSTrond Myklebust 			(long long)__entry->offset, __entry->count
11508224b273SChuck Lever 		)
11518224b273SChuck Lever );
11528224b273SChuck Lever 
11538224b273SChuck Lever TRACE_EVENT(nfs_readpage_done,
11548224b273SChuck Lever 		TP_PROTO(
11552343172dSTrond Myklebust 			const struct rpc_task *task,
11562343172dSTrond Myklebust 			const struct nfs_pgio_header *hdr
11578224b273SChuck Lever 		),
11588224b273SChuck Lever 
11592343172dSTrond Myklebust 		TP_ARGS(task, hdr),
11608224b273SChuck Lever 
11618224b273SChuck Lever 		TP_STRUCT__entry(
11628224b273SChuck Lever 			__field(dev_t, dev)
11638224b273SChuck Lever 			__field(u32, fhandle)
11648224b273SChuck Lever 			__field(u64, fileid)
11652343172dSTrond Myklebust 			__field(loff_t, offset)
11662343172dSTrond Myklebust 			__field(u32, arg_count)
11672343172dSTrond Myklebust 			__field(u32, res_count)
11682343172dSTrond Myklebust 			__field(bool, eof)
11693fa5cbdcSTrond Myklebust 			__field(int, error)
11708224b273SChuck Lever 		),
11718224b273SChuck Lever 
11728224b273SChuck Lever 		TP_fast_assign(
11732343172dSTrond Myklebust 			const struct inode *inode = hdr->inode;
11748224b273SChuck Lever 			const struct nfs_inode *nfsi = NFS_I(inode);
11752343172dSTrond Myklebust 			const struct nfs_fh *fh = hdr->args.fh ?
11762343172dSTrond Myklebust 						  hdr->args.fh : &nfsi->fh;
11778224b273SChuck Lever 
11783fa5cbdcSTrond Myklebust 			__entry->error = task->tk_status;
11792343172dSTrond Myklebust 			__entry->offset = hdr->args.offset;
11802343172dSTrond Myklebust 			__entry->arg_count = hdr->args.count;
11812343172dSTrond Myklebust 			__entry->res_count = hdr->res.count;
11822343172dSTrond Myklebust 			__entry->eof = hdr->res.eof;
11838224b273SChuck Lever 			__entry->dev = inode->i_sb->s_dev;
11848224b273SChuck Lever 			__entry->fileid = nfsi->fileid;
11852343172dSTrond Myklebust 			__entry->fhandle = nfs_fhandle_hash(fh);
11868224b273SChuck Lever 		),
11878224b273SChuck Lever 
11888224b273SChuck Lever 		TP_printk(
11893fa5cbdcSTrond Myklebust 			"error=%d fileid=%02x:%02x:%llu fhandle=0x%08x "
11903fa5cbdcSTrond Myklebust 			"offset=%lld count=%u res=%u%s", __entry->error,
11918224b273SChuck Lever 			MAJOR(__entry->dev), MINOR(__entry->dev),
11928224b273SChuck Lever 			(unsigned long long)__entry->fileid,
11938224b273SChuck Lever 			__entry->fhandle,
11942343172dSTrond Myklebust 			(long long)__entry->offset, __entry->arg_count,
11953fa5cbdcSTrond Myklebust 			__entry->res_count, __entry->eof ? " eof" : ""
11968224b273SChuck Lever 		)
11978224b273SChuck Lever );
11988224b273SChuck Lever 
1199fd2b6121SChuck Lever TRACE_EVENT(nfs_readpage_short,
1200fd2b6121SChuck Lever 		TP_PROTO(
1201fd2b6121SChuck Lever 			const struct rpc_task *task,
1202fd2b6121SChuck Lever 			const struct nfs_pgio_header *hdr
1203fd2b6121SChuck Lever 		),
1204fd2b6121SChuck Lever 
1205fd2b6121SChuck Lever 		TP_ARGS(task, hdr),
1206fd2b6121SChuck Lever 
1207fd2b6121SChuck Lever 		TP_STRUCT__entry(
1208fd2b6121SChuck Lever 			__field(dev_t, dev)
1209fd2b6121SChuck Lever 			__field(u32, fhandle)
1210fd2b6121SChuck Lever 			__field(u64, fileid)
1211fd2b6121SChuck Lever 			__field(loff_t, offset)
1212fd2b6121SChuck Lever 			__field(u32, arg_count)
1213fd2b6121SChuck Lever 			__field(u32, res_count)
1214fd2b6121SChuck Lever 			__field(bool, eof)
12153fa5cbdcSTrond Myklebust 			__field(int, error)
1216fd2b6121SChuck Lever 		),
1217fd2b6121SChuck Lever 
1218fd2b6121SChuck Lever 		TP_fast_assign(
1219fd2b6121SChuck Lever 			const struct inode *inode = hdr->inode;
1220fd2b6121SChuck Lever 			const struct nfs_inode *nfsi = NFS_I(inode);
1221fd2b6121SChuck Lever 			const struct nfs_fh *fh = hdr->args.fh ?
1222fd2b6121SChuck Lever 						  hdr->args.fh : &nfsi->fh;
1223fd2b6121SChuck Lever 
12243fa5cbdcSTrond Myklebust 			__entry->error = task->tk_status;
1225fd2b6121SChuck Lever 			__entry->offset = hdr->args.offset;
1226fd2b6121SChuck Lever 			__entry->arg_count = hdr->args.count;
1227fd2b6121SChuck Lever 			__entry->res_count = hdr->res.count;
1228fd2b6121SChuck Lever 			__entry->eof = hdr->res.eof;
1229fd2b6121SChuck Lever 			__entry->dev = inode->i_sb->s_dev;
1230fd2b6121SChuck Lever 			__entry->fileid = nfsi->fileid;
1231fd2b6121SChuck Lever 			__entry->fhandle = nfs_fhandle_hash(fh);
1232fd2b6121SChuck Lever 		),
1233fd2b6121SChuck Lever 
1234fd2b6121SChuck Lever 		TP_printk(
12353fa5cbdcSTrond Myklebust 			"error=%d fileid=%02x:%02x:%llu fhandle=0x%08x "
12363fa5cbdcSTrond Myklebust 			"offset=%lld count=%u res=%u%s", __entry->error,
1237fd2b6121SChuck Lever 			MAJOR(__entry->dev), MINOR(__entry->dev),
1238fd2b6121SChuck Lever 			(unsigned long long)__entry->fileid,
1239fd2b6121SChuck Lever 			__entry->fhandle,
1240fd2b6121SChuck Lever 			(long long)__entry->offset, __entry->arg_count,
12413fa5cbdcSTrond Myklebust 			__entry->res_count, __entry->eof ? " eof" : ""
1242fd2b6121SChuck Lever 		)
1243fd2b6121SChuck Lever );
1244fd2b6121SChuck Lever 
1245e3f0a7feSDave Wysochanski 
1246cd2ed9bdSChuck Lever TRACE_EVENT(nfs_pgio_error,
1247cd2ed9bdSChuck Lever 	TP_PROTO(
1248cd2ed9bdSChuck Lever 		const struct nfs_pgio_header *hdr,
1249cd2ed9bdSChuck Lever 		int error,
1250cd2ed9bdSChuck Lever 		loff_t pos
1251cd2ed9bdSChuck Lever 	),
1252cd2ed9bdSChuck Lever 
1253cd2ed9bdSChuck Lever 	TP_ARGS(hdr, error, pos),
1254cd2ed9bdSChuck Lever 
1255cd2ed9bdSChuck Lever 	TP_STRUCT__entry(
1256cd2ed9bdSChuck Lever 		__field(dev_t, dev)
1257cd2ed9bdSChuck Lever 		__field(u32, fhandle)
1258cd2ed9bdSChuck Lever 		__field(u64, fileid)
1259cd2ed9bdSChuck Lever 		__field(loff_t, offset)
1260cd2ed9bdSChuck Lever 		__field(u32, arg_count)
1261cd2ed9bdSChuck Lever 		__field(u32, res_count)
1262cd2ed9bdSChuck Lever 		__field(loff_t, pos)
12633fa5cbdcSTrond Myklebust 		__field(int, error)
1264cd2ed9bdSChuck Lever 	),
1265cd2ed9bdSChuck Lever 
1266cd2ed9bdSChuck Lever 	TP_fast_assign(
1267cd2ed9bdSChuck Lever 		const struct inode *inode = hdr->inode;
1268cd2ed9bdSChuck Lever 		const struct nfs_inode *nfsi = NFS_I(inode);
1269cd2ed9bdSChuck Lever 		const struct nfs_fh *fh = hdr->args.fh ?
1270cd2ed9bdSChuck Lever 					  hdr->args.fh : &nfsi->fh;
1271cd2ed9bdSChuck Lever 
12723fa5cbdcSTrond Myklebust 		__entry->error = error;
1273cd2ed9bdSChuck Lever 		__entry->offset = hdr->args.offset;
1274cd2ed9bdSChuck Lever 		__entry->arg_count = hdr->args.count;
1275cd2ed9bdSChuck Lever 		__entry->res_count = hdr->res.count;
1276cd2ed9bdSChuck Lever 		__entry->dev = inode->i_sb->s_dev;
1277cd2ed9bdSChuck Lever 		__entry->fileid = nfsi->fileid;
1278cd2ed9bdSChuck Lever 		__entry->fhandle = nfs_fhandle_hash(fh);
1279cd2ed9bdSChuck Lever 	),
1280cd2ed9bdSChuck Lever 
12813fa5cbdcSTrond Myklebust 	TP_printk("error=%d fileid=%02x:%02x:%llu fhandle=0x%08x "
12823fa5cbdcSTrond Myklebust 		  "offset=%lld count=%u res=%u pos=%llu", __entry->error,
1283cd2ed9bdSChuck Lever 		MAJOR(__entry->dev), MINOR(__entry->dev),
1284cd2ed9bdSChuck Lever 		(unsigned long long)__entry->fileid, __entry->fhandle,
1285cd2ed9bdSChuck Lever 		(long long)__entry->offset, __entry->arg_count, __entry->res_count,
12863fa5cbdcSTrond Myklebust 		__entry->pos
1287cd2ed9bdSChuck Lever 	)
1288cd2ed9bdSChuck Lever );
1289cd2ed9bdSChuck Lever 
12908224b273SChuck Lever TRACE_EVENT(nfs_initiate_write,
12918224b273SChuck Lever 		TP_PROTO(
12925bb2a7cbSTrond Myklebust 			const struct nfs_pgio_header *hdr
12938224b273SChuck Lever 		),
12948224b273SChuck Lever 
12955bb2a7cbSTrond Myklebust 		TP_ARGS(hdr),
12968224b273SChuck Lever 
12978224b273SChuck Lever 		TP_STRUCT__entry(
12988224b273SChuck Lever 			__field(dev_t, dev)
12998224b273SChuck Lever 			__field(u32, fhandle)
13008224b273SChuck Lever 			__field(u64, fileid)
13015bb2a7cbSTrond Myklebust 			__field(loff_t, offset)
13025bb2a7cbSTrond Myklebust 			__field(u32, count)
13038791545eSChuck Lever 			__field(unsigned long, stable)
13048224b273SChuck Lever 		),
13058224b273SChuck Lever 
13068224b273SChuck Lever 		TP_fast_assign(
13075bb2a7cbSTrond Myklebust 			const struct inode *inode = hdr->inode;
13088224b273SChuck Lever 			const struct nfs_inode *nfsi = NFS_I(inode);
13095bb2a7cbSTrond Myklebust 			const struct nfs_fh *fh = hdr->args.fh ?
13105bb2a7cbSTrond Myklebust 						  hdr->args.fh : &nfsi->fh;
13118224b273SChuck Lever 
13125bb2a7cbSTrond Myklebust 			__entry->offset = hdr->args.offset;
13135bb2a7cbSTrond Myklebust 			__entry->count = hdr->args.count;
13145bb2a7cbSTrond Myklebust 			__entry->stable = hdr->args.stable;
13158224b273SChuck Lever 			__entry->dev = inode->i_sb->s_dev;
13168224b273SChuck Lever 			__entry->fileid = nfsi->fileid;
13175bb2a7cbSTrond Myklebust 			__entry->fhandle = nfs_fhandle_hash(fh);
13188224b273SChuck Lever 		),
13198224b273SChuck Lever 
13208224b273SChuck Lever 		TP_printk(
13218224b273SChuck Lever 			"fileid=%02x:%02x:%llu fhandle=0x%08x "
13225bb2a7cbSTrond Myklebust 			"offset=%lld count=%u stable=%s",
13238224b273SChuck Lever 			MAJOR(__entry->dev), MINOR(__entry->dev),
13248224b273SChuck Lever 			(unsigned long long)__entry->fileid,
13258224b273SChuck Lever 			__entry->fhandle,
13265bb2a7cbSTrond Myklebust 			(long long)__entry->offset, __entry->count,
13278791545eSChuck Lever 			show_nfs_stable_how(__entry->stable)
13288224b273SChuck Lever 		)
13298224b273SChuck Lever );
13308224b273SChuck Lever 
13318224b273SChuck Lever TRACE_EVENT(nfs_writeback_done,
13328224b273SChuck Lever 		TP_PROTO(
13335bb2a7cbSTrond Myklebust 			const struct rpc_task *task,
13345bb2a7cbSTrond Myklebust 			const struct nfs_pgio_header *hdr
13358224b273SChuck Lever 		),
13368224b273SChuck Lever 
13375bb2a7cbSTrond Myklebust 		TP_ARGS(task, hdr),
13388224b273SChuck Lever 
13398224b273SChuck Lever 		TP_STRUCT__entry(
13408224b273SChuck Lever 			__field(dev_t, dev)
13418224b273SChuck Lever 			__field(u32, fhandle)
13428224b273SChuck Lever 			__field(u64, fileid)
13435bb2a7cbSTrond Myklebust 			__field(loff_t, offset)
13445bb2a7cbSTrond Myklebust 			__field(u32, arg_count)
13455bb2a7cbSTrond Myklebust 			__field(u32, res_count)
13463fa5cbdcSTrond Myklebust 			__field(int, error)
13478791545eSChuck Lever 			__field(unsigned long, stable)
13485bb2a7cbSTrond Myklebust 			__array(char, verifier, NFS4_VERIFIER_SIZE)
13498224b273SChuck Lever 		),
13508224b273SChuck Lever 
13518224b273SChuck Lever 		TP_fast_assign(
13525bb2a7cbSTrond Myklebust 			const struct inode *inode = hdr->inode;
13538224b273SChuck Lever 			const struct nfs_inode *nfsi = NFS_I(inode);
13545bb2a7cbSTrond Myklebust 			const struct nfs_fh *fh = hdr->args.fh ?
13555bb2a7cbSTrond Myklebust 						  hdr->args.fh : &nfsi->fh;
13565bb2a7cbSTrond Myklebust 			const struct nfs_writeverf *verf = hdr->res.verf;
13578224b273SChuck Lever 
13583fa5cbdcSTrond Myklebust 			__entry->error = task->tk_status;
13595bb2a7cbSTrond Myklebust 			__entry->offset = hdr->args.offset;
13605bb2a7cbSTrond Myklebust 			__entry->arg_count = hdr->args.count;
13615bb2a7cbSTrond Myklebust 			__entry->res_count = hdr->res.count;
13625bb2a7cbSTrond Myklebust 			__entry->stable = verf->committed;
13635bb2a7cbSTrond Myklebust 			memcpy(__entry->verifier,
13645bb2a7cbSTrond Myklebust 				&verf->verifier,
13655bb2a7cbSTrond Myklebust 				NFS4_VERIFIER_SIZE);
13668224b273SChuck Lever 			__entry->dev = inode->i_sb->s_dev;
13678224b273SChuck Lever 			__entry->fileid = nfsi->fileid;
13685bb2a7cbSTrond Myklebust 			__entry->fhandle = nfs_fhandle_hash(fh);
13698224b273SChuck Lever 		),
13708224b273SChuck Lever 
13718224b273SChuck Lever 		TP_printk(
13723fa5cbdcSTrond Myklebust 			"error=%d fileid=%02x:%02x:%llu fhandle=0x%08x "
13733fa5cbdcSTrond Myklebust 			"offset=%lld count=%u res=%u stable=%s "
13743fa5cbdcSTrond Myklebust 			"verifier=%s", __entry->error,
13758224b273SChuck Lever 			MAJOR(__entry->dev), MINOR(__entry->dev),
13768224b273SChuck Lever 			(unsigned long long)__entry->fileid,
13778224b273SChuck Lever 			__entry->fhandle,
13785bb2a7cbSTrond Myklebust 			(long long)__entry->offset, __entry->arg_count,
13793fa5cbdcSTrond Myklebust 			__entry->res_count,
13808791545eSChuck Lever 			show_nfs_stable_how(__entry->stable),
13818791545eSChuck Lever 			show_nfs4_verifier(__entry->verifier)
13828224b273SChuck Lever 		)
13838224b273SChuck Lever );
13848224b273SChuck Lever 
1385861e1671SChuck Lever DECLARE_EVENT_CLASS(nfs_page_error_class,
1386861e1671SChuck Lever 		TP_PROTO(
1387af887e43STrond Myklebust 			const struct inode *inode,
1388861e1671SChuck Lever 			const struct nfs_page *req,
1389861e1671SChuck Lever 			int error
1390861e1671SChuck Lever 		),
1391861e1671SChuck Lever 
1392af887e43STrond Myklebust 		TP_ARGS(inode, req, error),
1393861e1671SChuck Lever 
1394861e1671SChuck Lever 		TP_STRUCT__entry(
1395af887e43STrond Myklebust 			__field(dev_t, dev)
1396af887e43STrond Myklebust 			__field(u32, fhandle)
1397af887e43STrond Myklebust 			__field(u64, fileid)
1398af887e43STrond Myklebust 			__field(loff_t, offset)
1399af887e43STrond Myklebust 			__field(unsigned int, count)
1400861e1671SChuck Lever 			__field(int, error)
1401861e1671SChuck Lever 		),
1402861e1671SChuck Lever 
1403861e1671SChuck Lever 		TP_fast_assign(
1404af887e43STrond Myklebust 			const struct nfs_inode *nfsi = NFS_I(inode);
1405af887e43STrond Myklebust 			__entry->dev = inode->i_sb->s_dev;
1406af887e43STrond Myklebust 			__entry->fileid = nfsi->fileid;
1407af887e43STrond Myklebust 			__entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
1408af887e43STrond Myklebust 			__entry->offset = req_offset(req);
1409af887e43STrond Myklebust 			__entry->count = req->wb_bytes;
1410861e1671SChuck Lever 			__entry->error = error;
1411861e1671SChuck Lever 		),
1412861e1671SChuck Lever 
1413861e1671SChuck Lever 		TP_printk(
1414af887e43STrond Myklebust 			"error=%d fileid=%02x:%02x:%llu fhandle=0x%08x "
1415af887e43STrond Myklebust 			"offset=%lld count=%u", __entry->error,
1416af887e43STrond Myklebust 			MAJOR(__entry->dev), MINOR(__entry->dev),
1417af887e43STrond Myklebust 			(unsigned long long)__entry->fileid,
1418af887e43STrond Myklebust 			__entry->fhandle, __entry->offset,
1419af887e43STrond Myklebust 			__entry->count
1420861e1671SChuck Lever 		)
1421861e1671SChuck Lever );
1422861e1671SChuck Lever 
1423861e1671SChuck Lever #define DEFINE_NFS_PAGEERR_EVENT(name) \
1424861e1671SChuck Lever 	DEFINE_EVENT(nfs_page_error_class, name, \
1425861e1671SChuck Lever 			TP_PROTO( \
1426af887e43STrond Myklebust 				const struct inode *inode, \
1427861e1671SChuck Lever 				const struct nfs_page *req, \
1428861e1671SChuck Lever 				int error \
1429861e1671SChuck Lever 			), \
1430af887e43STrond Myklebust 			TP_ARGS(inode, req, error))
1431861e1671SChuck Lever 
1432861e1671SChuck Lever DEFINE_NFS_PAGEERR_EVENT(nfs_write_error);
1433861e1671SChuck Lever DEFINE_NFS_PAGEERR_EVENT(nfs_comp_error);
1434861e1671SChuck Lever DEFINE_NFS_PAGEERR_EVENT(nfs_commit_error);
1435861e1671SChuck Lever 
14368224b273SChuck Lever TRACE_EVENT(nfs_initiate_commit,
14378224b273SChuck Lever 		TP_PROTO(
14388224b273SChuck Lever 			const struct nfs_commit_data *data
14398224b273SChuck Lever 		),
14408224b273SChuck Lever 
14418224b273SChuck Lever 		TP_ARGS(data),
14428224b273SChuck Lever 
14438224b273SChuck Lever 		TP_STRUCT__entry(
14448224b273SChuck Lever 			__field(dev_t, dev)
14458224b273SChuck Lever 			__field(u32, fhandle)
14468224b273SChuck Lever 			__field(u64, fileid)
14477bdd297eSTrond Myklebust 			__field(loff_t, offset)
14487bdd297eSTrond Myklebust 			__field(u32, count)
14498224b273SChuck Lever 		),
14508224b273SChuck Lever 
14518224b273SChuck Lever 		TP_fast_assign(
14528224b273SChuck Lever 			const struct inode *inode = data->inode;
14538224b273SChuck Lever 			const struct nfs_inode *nfsi = NFS_I(inode);
14547bdd297eSTrond Myklebust 			const struct nfs_fh *fh = data->args.fh ?
14557bdd297eSTrond Myklebust 						  data->args.fh : &nfsi->fh;
14568224b273SChuck Lever 
14578224b273SChuck Lever 			__entry->offset = data->args.offset;
14588224b273SChuck Lever 			__entry->count = data->args.count;
14598224b273SChuck Lever 			__entry->dev = inode->i_sb->s_dev;
14608224b273SChuck Lever 			__entry->fileid = nfsi->fileid;
14617bdd297eSTrond Myklebust 			__entry->fhandle = nfs_fhandle_hash(fh);
14628224b273SChuck Lever 		),
14638224b273SChuck Lever 
14648224b273SChuck Lever 		TP_printk(
14658224b273SChuck Lever 			"fileid=%02x:%02x:%llu fhandle=0x%08x "
14667bdd297eSTrond Myklebust 			"offset=%lld count=%u",
14678224b273SChuck Lever 			MAJOR(__entry->dev), MINOR(__entry->dev),
14688224b273SChuck Lever 			(unsigned long long)__entry->fileid,
14698224b273SChuck Lever 			__entry->fhandle,
14707bdd297eSTrond Myklebust 			(long long)__entry->offset, __entry->count
14718224b273SChuck Lever 		)
14728224b273SChuck Lever );
14738224b273SChuck Lever 
14748224b273SChuck Lever TRACE_EVENT(nfs_commit_done,
14758224b273SChuck Lever 		TP_PROTO(
14767bdd297eSTrond Myklebust 			const struct rpc_task *task,
14778224b273SChuck Lever 			const struct nfs_commit_data *data
14788224b273SChuck Lever 		),
14798224b273SChuck Lever 
14807bdd297eSTrond Myklebust 		TP_ARGS(task, data),
14818224b273SChuck Lever 
14828224b273SChuck Lever 		TP_STRUCT__entry(
14838224b273SChuck Lever 			__field(dev_t, dev)
14848224b273SChuck Lever 			__field(u32, fhandle)
14858224b273SChuck Lever 			__field(u64, fileid)
14867bdd297eSTrond Myklebust 			__field(loff_t, offset)
14873fa5cbdcSTrond Myklebust 			__field(int, error)
14888791545eSChuck Lever 			__field(unsigned long, stable)
14897bdd297eSTrond Myklebust 			__array(char, verifier, NFS4_VERIFIER_SIZE)
14908224b273SChuck Lever 		),
14918224b273SChuck Lever 
14928224b273SChuck Lever 		TP_fast_assign(
14938224b273SChuck Lever 			const struct inode *inode = data->inode;
14948224b273SChuck Lever 			const struct nfs_inode *nfsi = NFS_I(inode);
14957bdd297eSTrond Myklebust 			const struct nfs_fh *fh = data->args.fh ?
14967bdd297eSTrond Myklebust 						  data->args.fh : &nfsi->fh;
14977bdd297eSTrond Myklebust 			const struct nfs_writeverf *verf = data->res.verf;
14988224b273SChuck Lever 
14993fa5cbdcSTrond Myklebust 			__entry->error = task->tk_status;
15008224b273SChuck Lever 			__entry->offset = data->args.offset;
15017bdd297eSTrond Myklebust 			__entry->stable = verf->committed;
15027bdd297eSTrond Myklebust 			memcpy(__entry->verifier,
15037bdd297eSTrond Myklebust 				&verf->verifier,
15047bdd297eSTrond Myklebust 				NFS4_VERIFIER_SIZE);
15058224b273SChuck Lever 			__entry->dev = inode->i_sb->s_dev;
15068224b273SChuck Lever 			__entry->fileid = nfsi->fileid;
15077bdd297eSTrond Myklebust 			__entry->fhandle = nfs_fhandle_hash(fh);
15088224b273SChuck Lever 		),
15098224b273SChuck Lever 
15108224b273SChuck Lever 		TP_printk(
15113fa5cbdcSTrond Myklebust 			"error=%d fileid=%02x:%02x:%llu fhandle=0x%08x "
15123fa5cbdcSTrond Myklebust 			"offset=%lld stable=%s verifier=%s", __entry->error,
15138224b273SChuck Lever 			MAJOR(__entry->dev), MINOR(__entry->dev),
15148224b273SChuck Lever 			(unsigned long long)__entry->fileid,
15158224b273SChuck Lever 			__entry->fhandle,
15163fa5cbdcSTrond Myklebust 			(long long)__entry->offset,
15178791545eSChuck Lever 			show_nfs_stable_how(__entry->stable),
15188791545eSChuck Lever 			show_nfs4_verifier(__entry->verifier)
15198224b273SChuck Lever 		)
15208224b273SChuck Lever );
15218224b273SChuck Lever 
15228efc4bbeSJeff Layton #define nfs_show_direct_req_flags(v) \
15238efc4bbeSJeff Layton 	__print_flags(v, "|", \
15248efc4bbeSJeff Layton 			{ NFS_ODIRECT_DO_COMMIT, "DO_COMMIT" }, \
15258efc4bbeSJeff Layton 			{ NFS_ODIRECT_RESCHED_WRITES, "RESCHED_WRITES" }, \
15268efc4bbeSJeff Layton 			{ NFS_ODIRECT_SHOULD_DIRTY, "SHOULD DIRTY" }, \
15278efc4bbeSJeff Layton 			{ NFS_ODIRECT_DONE, "DONE" } )
15288efc4bbeSJeff Layton 
15298efc4bbeSJeff Layton DECLARE_EVENT_CLASS(nfs_direct_req_class,
15308efc4bbeSJeff Layton 		TP_PROTO(
15318efc4bbeSJeff Layton 			const struct nfs_direct_req *dreq
15328efc4bbeSJeff Layton 		),
15338efc4bbeSJeff Layton 
15348efc4bbeSJeff Layton 		TP_ARGS(dreq),
15358efc4bbeSJeff Layton 
15368efc4bbeSJeff Layton 		TP_STRUCT__entry(
15378efc4bbeSJeff Layton 			__field(dev_t, dev)
15388efc4bbeSJeff Layton 			__field(u64, fileid)
15398efc4bbeSJeff Layton 			__field(u32, fhandle)
1540b313eb91STrond Myklebust 			__field(loff_t, offset)
15418efc4bbeSJeff Layton 			__field(ssize_t, count)
15428efc4bbeSJeff Layton 			__field(ssize_t, bytes_left)
15438efc4bbeSJeff Layton 			__field(ssize_t, error)
15448efc4bbeSJeff Layton 			__field(int, flags)
15458efc4bbeSJeff Layton 		),
15468efc4bbeSJeff Layton 
15478efc4bbeSJeff Layton 		TP_fast_assign(
15488efc4bbeSJeff Layton 			const struct inode *inode = dreq->inode;
15498efc4bbeSJeff Layton 			const struct nfs_inode *nfsi = NFS_I(inode);
15508efc4bbeSJeff Layton 			const struct nfs_fh *fh = &nfsi->fh;
15518efc4bbeSJeff Layton 
15528efc4bbeSJeff Layton 			__entry->dev = inode->i_sb->s_dev;
15538efc4bbeSJeff Layton 			__entry->fileid = nfsi->fileid;
15548efc4bbeSJeff Layton 			__entry->fhandle = nfs_fhandle_hash(fh);
1555b313eb91STrond Myklebust 			__entry->offset = dreq->io_start;
15568efc4bbeSJeff Layton 			__entry->count = dreq->count;
15578efc4bbeSJeff Layton 			__entry->bytes_left = dreq->bytes_left;
15588efc4bbeSJeff Layton 			__entry->error = dreq->error;
15598efc4bbeSJeff Layton 			__entry->flags = dreq->flags;
15608efc4bbeSJeff Layton 		),
15618efc4bbeSJeff Layton 
15628efc4bbeSJeff Layton 		TP_printk(
1563b313eb91STrond Myklebust 			"error=%zd fileid=%02x:%02x:%llu fhandle=0x%08x "
1564b313eb91STrond Myklebust 			"offset=%lld count=%zd bytes_left=%zd flags=%s",
1565b313eb91STrond Myklebust 			__entry->error, MAJOR(__entry->dev),
1566b313eb91STrond Myklebust 			MINOR(__entry->dev),
15678efc4bbeSJeff Layton 			(unsigned long long)__entry->fileid,
1568b313eb91STrond Myklebust 			__entry->fhandle, __entry->offset,
1569b313eb91STrond Myklebust 			__entry->count, __entry->bytes_left,
1570b313eb91STrond Myklebust 			nfs_show_direct_req_flags(__entry->flags)
15718efc4bbeSJeff Layton 		)
15728efc4bbeSJeff Layton );
15738efc4bbeSJeff Layton 
15748efc4bbeSJeff Layton #define DEFINE_NFS_DIRECT_REQ_EVENT(name) \
15758efc4bbeSJeff Layton 	DEFINE_EVENT(nfs_direct_req_class, name, \
15768efc4bbeSJeff Layton 			TP_PROTO( \
15778efc4bbeSJeff Layton 				const struct nfs_direct_req *dreq \
15788efc4bbeSJeff Layton 			), \
15798efc4bbeSJeff Layton 			TP_ARGS(dreq))
15808efc4bbeSJeff Layton 
15818efc4bbeSJeff Layton DEFINE_NFS_DIRECT_REQ_EVENT(nfs_direct_commit_complete);
15828efc4bbeSJeff Layton DEFINE_NFS_DIRECT_REQ_EVENT(nfs_direct_resched_write);
15838efc4bbeSJeff Layton DEFINE_NFS_DIRECT_REQ_EVENT(nfs_direct_write_complete);
15848efc4bbeSJeff Layton DEFINE_NFS_DIRECT_REQ_EVENT(nfs_direct_write_completion);
15858efc4bbeSJeff Layton DEFINE_NFS_DIRECT_REQ_EVENT(nfs_direct_write_schedule_iovec);
15868efc4bbeSJeff Layton DEFINE_NFS_DIRECT_REQ_EVENT(nfs_direct_write_reschedule_io);
15878efc4bbeSJeff Layton 
158843622eabSTrond Myklebust TRACE_EVENT(nfs_fh_to_dentry,
158943622eabSTrond Myklebust 		TP_PROTO(
159043622eabSTrond Myklebust 			const struct super_block *sb,
159143622eabSTrond Myklebust 			const struct nfs_fh *fh,
159243622eabSTrond Myklebust 			u64 fileid,
159343622eabSTrond Myklebust 			int error
159443622eabSTrond Myklebust 		),
159543622eabSTrond Myklebust 
159643622eabSTrond Myklebust 		TP_ARGS(sb, fh, fileid, error),
159743622eabSTrond Myklebust 
159843622eabSTrond Myklebust 		TP_STRUCT__entry(
159943622eabSTrond Myklebust 			__field(int, error)
160043622eabSTrond Myklebust 			__field(dev_t, dev)
160143622eabSTrond Myklebust 			__field(u32, fhandle)
160243622eabSTrond Myklebust 			__field(u64, fileid)
160343622eabSTrond Myklebust 		),
160443622eabSTrond Myklebust 
160543622eabSTrond Myklebust 		TP_fast_assign(
160643622eabSTrond Myklebust 			__entry->error = error;
160743622eabSTrond Myklebust 			__entry->dev = sb->s_dev;
160843622eabSTrond Myklebust 			__entry->fileid = fileid;
160943622eabSTrond Myklebust 			__entry->fhandle = nfs_fhandle_hash(fh);
161043622eabSTrond Myklebust 		),
161143622eabSTrond Myklebust 
161243622eabSTrond Myklebust 		TP_printk(
161343622eabSTrond Myklebust 			"error=%d fileid=%02x:%02x:%llu fhandle=0x%08x ",
161443622eabSTrond Myklebust 			__entry->error,
161543622eabSTrond Myklebust 			MAJOR(__entry->dev), MINOR(__entry->dev),
161643622eabSTrond Myklebust 			(unsigned long long)__entry->fileid,
161743622eabSTrond Myklebust 			__entry->fhandle
161843622eabSTrond Myklebust 		)
161943622eabSTrond Myklebust );
162043622eabSTrond Myklebust 
162133ce83efSChuck Lever TRACE_EVENT(nfs_mount_assign,
162233ce83efSChuck Lever 	TP_PROTO(
162333ce83efSChuck Lever 		const char *option,
162433ce83efSChuck Lever 		const char *value
162533ce83efSChuck Lever 	),
162633ce83efSChuck Lever 
162733ce83efSChuck Lever 	TP_ARGS(option, value),
162833ce83efSChuck Lever 
162933ce83efSChuck Lever 	TP_STRUCT__entry(
163033ce83efSChuck Lever 		__string(option, option)
163133ce83efSChuck Lever 		__string(value, value)
163233ce83efSChuck Lever 	),
163333ce83efSChuck Lever 
163433ce83efSChuck Lever 	TP_fast_assign(
163533ce83efSChuck Lever 		__assign_str(option, option);
163633ce83efSChuck Lever 		__assign_str(value, value);
163733ce83efSChuck Lever 	),
163833ce83efSChuck Lever 
163933ce83efSChuck Lever 	TP_printk("option %s=%s",
164033ce83efSChuck Lever 		__get_str(option), __get_str(value)
164133ce83efSChuck Lever 	)
164233ce83efSChuck Lever );
164333ce83efSChuck Lever 
164433ce83efSChuck Lever TRACE_EVENT(nfs_mount_option,
164533ce83efSChuck Lever 	TP_PROTO(
164633ce83efSChuck Lever 		const struct fs_parameter *param
164733ce83efSChuck Lever 	),
164833ce83efSChuck Lever 
164933ce83efSChuck Lever 	TP_ARGS(param),
165033ce83efSChuck Lever 
165133ce83efSChuck Lever 	TP_STRUCT__entry(
165233ce83efSChuck Lever 		__string(option, param->key)
165333ce83efSChuck Lever 	),
165433ce83efSChuck Lever 
165533ce83efSChuck Lever 	TP_fast_assign(
165633ce83efSChuck Lever 		__assign_str(option, param->key);
165733ce83efSChuck Lever 	),
165833ce83efSChuck Lever 
165933ce83efSChuck Lever 	TP_printk("option %s", __get_str(option))
166033ce83efSChuck Lever );
166133ce83efSChuck Lever 
166233ce83efSChuck Lever TRACE_EVENT(nfs_mount_path,
166333ce83efSChuck Lever 	TP_PROTO(
166433ce83efSChuck Lever 		const char *path
166533ce83efSChuck Lever 	),
166633ce83efSChuck Lever 
166733ce83efSChuck Lever 	TP_ARGS(path),
166833ce83efSChuck Lever 
166933ce83efSChuck Lever 	TP_STRUCT__entry(
167033ce83efSChuck Lever 		__string(path, path)
167133ce83efSChuck Lever 	),
167233ce83efSChuck Lever 
167333ce83efSChuck Lever 	TP_fast_assign(
167433ce83efSChuck Lever 		__assign_str(path, path);
167533ce83efSChuck Lever 	),
167633ce83efSChuck Lever 
167733ce83efSChuck Lever 	TP_printk("path='%s'", __get_str(path))
167833ce83efSChuck Lever );
167933ce83efSChuck Lever 
16803d66bae1STrond Myklebust DECLARE_EVENT_CLASS(nfs_xdr_event,
1681f23f6584SChuck Lever 		TP_PROTO(
168262a92ba9SChuck Lever 			const struct xdr_stream *xdr,
1683f23f6584SChuck Lever 			int error
1684f23f6584SChuck Lever 		),
1685f23f6584SChuck Lever 
168662a92ba9SChuck Lever 		TP_ARGS(xdr, error),
1687f23f6584SChuck Lever 
1688f23f6584SChuck Lever 		TP_STRUCT__entry(
168962a92ba9SChuck Lever 			__field(unsigned int, task_id)
169062a92ba9SChuck Lever 			__field(unsigned int, client_id)
169162a92ba9SChuck Lever 			__field(u32, xid)
16925be59458SChuck Lever 			__field(int, version)
169338a638a7SChuck Lever 			__field(unsigned long, error)
16945be59458SChuck Lever 			__string(program,
16955be59458SChuck Lever 				 xdr->rqst->rq_task->tk_client->cl_program->name)
16965be59458SChuck Lever 			__string(procedure,
16975be59458SChuck Lever 				 xdr->rqst->rq_task->tk_msg.rpc_proc->p_name)
1698f23f6584SChuck Lever 		),
1699f23f6584SChuck Lever 
1700f23f6584SChuck Lever 		TP_fast_assign(
170162a92ba9SChuck Lever 			const struct rpc_rqst *rqstp = xdr->rqst;
170262a92ba9SChuck Lever 			const struct rpc_task *task = rqstp->rq_task;
170362a92ba9SChuck Lever 
170462a92ba9SChuck Lever 			__entry->task_id = task->tk_pid;
170562a92ba9SChuck Lever 			__entry->client_id = task->tk_client->cl_clid;
170662a92ba9SChuck Lever 			__entry->xid = be32_to_cpu(rqstp->rq_xid);
17075be59458SChuck Lever 			__entry->version = task->tk_client->cl_vers;
1708f23f6584SChuck Lever 			__entry->error = error;
17095be59458SChuck Lever 			__assign_str(program,
171078c14b38SJoe Perches 				     task->tk_client->cl_program->name);
171178c14b38SJoe Perches 			__assign_str(procedure, task->tk_msg.rpc_proc->p_name);
1712f23f6584SChuck Lever 		),
1713f23f6584SChuck Lever 
1714b4776a34SChuck Lever 		TP_printk(SUNRPC_TRACE_TASK_SPECIFIER
1715b4776a34SChuck Lever 			  " xid=0x%08x %sv%d %s error=%ld (%s)",
171662a92ba9SChuck Lever 			__entry->task_id, __entry->client_id, __entry->xid,
17175be59458SChuck Lever 			__get_str(program), __entry->version,
17185be59458SChuck Lever 			__get_str(procedure), -__entry->error,
17198791545eSChuck Lever 			show_nfs_status(__entry->error)
1720f23f6584SChuck Lever 		)
1721f23f6584SChuck Lever );
17223d66bae1STrond Myklebust #define DEFINE_NFS_XDR_EVENT(name) \
17233d66bae1STrond Myklebust 	DEFINE_EVENT(nfs_xdr_event, name, \
17243d66bae1STrond Myklebust 			TP_PROTO( \
17253d66bae1STrond Myklebust 				const struct xdr_stream *xdr, \
17263d66bae1STrond Myklebust 				int error \
17273d66bae1STrond Myklebust 			), \
17283d66bae1STrond Myklebust 			TP_ARGS(xdr, error))
17293d66bae1STrond Myklebust DEFINE_NFS_XDR_EVENT(nfs_xdr_status);
1730eb3d58c6STrond Myklebust DEFINE_NFS_XDR_EVENT(nfs_xdr_bad_filehandle);
1731f23f6584SChuck Lever 
1732f4ce1299STrond Myklebust #endif /* _TRACE_NFS_H */
1733f4ce1299STrond Myklebust 
1734f4ce1299STrond Myklebust #undef TRACE_INCLUDE_PATH
1735f4ce1299STrond Myklebust #define TRACE_INCLUDE_PATH .
1736f4ce1299STrond Myklebust #define TRACE_INCLUDE_FILE nfstrace
1737f4ce1299STrond Myklebust /* This part must be outside protection */
1738f4ce1299STrond Myklebust #include <trace/define_trace.h>
1739