xref: /linux/fs/nfs/nfstrace.h (revision 8791545eda52e8f3bc48e3cd902e38bf4ba4c9de)
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 
149d2d48bbSChuck Lever #include <trace/events/fs.h>
15*8791545eSChuck Lever #include <trace/events/nfs.h>
16b4776a34SChuck Lever #include <trace/events/sunrpc_base.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_PAGECACHE, "REVAL_PAGECACHE" }, \
25f4ce1299STrond Myklebust 			{ NFS_INO_REVAL_FORCED, "REVAL_FORCED" }, \
267d4006c1SChuck Lever 			{ NFS_INO_INVALID_LABEL, "INVALID_LABEL" }, \
277d4006c1SChuck Lever 			{ NFS_INO_INVALID_CHANGE, "INVALID_CHANGE" }, \
287d4006c1SChuck Lever 			{ NFS_INO_INVALID_CTIME, "INVALID_CTIME" }, \
297d4006c1SChuck Lever 			{ NFS_INO_INVALID_MTIME, "INVALID_MTIME" }, \
307d4006c1SChuck Lever 			{ NFS_INO_INVALID_SIZE, "INVALID_SIZE" }, \
310f44da51SFrank van der Linden 			{ NFS_INO_INVALID_OTHER, "INVALID_OTHER" }, \
328a27c7ccSTrond Myklebust 			{ NFS_INO_DATA_INVAL_DEFER, "DATA_INVAL_DEFER" }, \
338a27c7ccSTrond Myklebust 			{ NFS_INO_INVALID_BLOCKS, "INVALID_BLOCKS" }, \
34fabf2b34STrond Myklebust 			{ NFS_INO_INVALID_XATTR, "INVALID_XATTR" }, \
35720869ebSTrond Myklebust 			{ NFS_INO_INVALID_NLINK, "INVALID_NLINK" }, \
36720869ebSTrond Myklebust 			{ NFS_INO_INVALID_MODE, "INVALID_MODE" })
377d4006c1SChuck Lever 
38f4ce1299STrond Myklebust #define nfs_show_nfsi_flags(v) \
39f4ce1299STrond Myklebust 	__print_flags(v, "|", \
407d4006c1SChuck Lever 			{ BIT(NFS_INO_ADVISE_RDPLUS), "ADVISE_RDPLUS" }, \
417d4006c1SChuck Lever 			{ BIT(NFS_INO_STALE), "STALE" }, \
427d4006c1SChuck Lever 			{ BIT(NFS_INO_ACL_LRU_SET), "ACL_LRU_SET" }, \
437d4006c1SChuck Lever 			{ BIT(NFS_INO_INVALIDATING), "INVALIDATING" }, \
447d4006c1SChuck Lever 			{ BIT(NFS_INO_FSCACHE), "FSCACHE" }, \
457d4006c1SChuck Lever 			{ BIT(NFS_INO_FSCACHE_LOCK), "FSCACHE_LOCK" }, \
467d4006c1SChuck Lever 			{ BIT(NFS_INO_LAYOUTCOMMIT), "NEED_LAYOUTCOMMIT" }, \
477d4006c1SChuck Lever 			{ BIT(NFS_INO_LAYOUTCOMMITTING), "LAYOUTCOMMIT" }, \
487d4006c1SChuck Lever 			{ BIT(NFS_INO_LAYOUTSTATS), "LAYOUTSTATS" }, \
497d4006c1SChuck Lever 			{ BIT(NFS_INO_ODIRECT), "ODIRECT" })
50f4ce1299STrond Myklebust 
51f4ce1299STrond Myklebust DECLARE_EVENT_CLASS(nfs_inode_event,
52f4ce1299STrond Myklebust 		TP_PROTO(
53f4ce1299STrond Myklebust 			const struct inode *inode
54f4ce1299STrond Myklebust 		),
55f4ce1299STrond Myklebust 
56f4ce1299STrond Myklebust 		TP_ARGS(inode),
57f4ce1299STrond Myklebust 
58f4ce1299STrond Myklebust 		TP_STRUCT__entry(
59f4ce1299STrond Myklebust 			__field(dev_t, dev)
60f4ce1299STrond Myklebust 			__field(u32, fhandle)
61f4ce1299STrond Myklebust 			__field(u64, fileid)
62f4ce1299STrond Myklebust 			__field(u64, version)
63f4ce1299STrond Myklebust 		),
64f4ce1299STrond Myklebust 
65f4ce1299STrond Myklebust 		TP_fast_assign(
66f4ce1299STrond Myklebust 			const struct nfs_inode *nfsi = NFS_I(inode);
67f4ce1299STrond Myklebust 			__entry->dev = inode->i_sb->s_dev;
68f4ce1299STrond Myklebust 			__entry->fileid = nfsi->fileid;
69f4ce1299STrond Myklebust 			__entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
701eb5d98fSJeff Layton 			__entry->version = inode_peek_iversion_raw(inode);
71f4ce1299STrond Myklebust 		),
72f4ce1299STrond Myklebust 
73f4ce1299STrond Myklebust 		TP_printk(
74f4ce1299STrond Myklebust 			"fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu ",
75f4ce1299STrond Myklebust 			MAJOR(__entry->dev), MINOR(__entry->dev),
76f4ce1299STrond Myklebust 			(unsigned long long)__entry->fileid,
77f4ce1299STrond Myklebust 			__entry->fhandle,
78f4ce1299STrond Myklebust 			(unsigned long long)__entry->version
79f4ce1299STrond Myklebust 		)
80f4ce1299STrond Myklebust );
81f4ce1299STrond Myklebust 
82f4ce1299STrond Myklebust DECLARE_EVENT_CLASS(nfs_inode_event_done,
83f4ce1299STrond Myklebust 		TP_PROTO(
84f4ce1299STrond Myklebust 			const struct inode *inode,
85f4ce1299STrond Myklebust 			int error
86f4ce1299STrond Myklebust 		),
87f4ce1299STrond Myklebust 
88f4ce1299STrond Myklebust 		TP_ARGS(inode, error),
89f4ce1299STrond Myklebust 
90f4ce1299STrond Myklebust 		TP_STRUCT__entry(
9138a638a7SChuck Lever 			__field(unsigned long, error)
92f4ce1299STrond Myklebust 			__field(dev_t, dev)
93f4ce1299STrond Myklebust 			__field(u32, fhandle)
94f4ce1299STrond Myklebust 			__field(unsigned char, type)
95f4ce1299STrond Myklebust 			__field(u64, fileid)
96f4ce1299STrond Myklebust 			__field(u64, version)
97f4ce1299STrond Myklebust 			__field(loff_t, size)
98f4ce1299STrond Myklebust 			__field(unsigned long, nfsi_flags)
99f4ce1299STrond Myklebust 			__field(unsigned long, cache_validity)
100f4ce1299STrond Myklebust 		),
101f4ce1299STrond Myklebust 
102f4ce1299STrond Myklebust 		TP_fast_assign(
103f4ce1299STrond Myklebust 			const struct nfs_inode *nfsi = NFS_I(inode);
10438a638a7SChuck Lever 			__entry->error = error < 0 ? -error : 0;
105f4ce1299STrond Myklebust 			__entry->dev = inode->i_sb->s_dev;
106f4ce1299STrond Myklebust 			__entry->fileid = nfsi->fileid;
107f4ce1299STrond Myklebust 			__entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
108f4ce1299STrond Myklebust 			__entry->type = nfs_umode_to_dtype(inode->i_mode);
1091eb5d98fSJeff Layton 			__entry->version = inode_peek_iversion_raw(inode);
110f4ce1299STrond Myklebust 			__entry->size = i_size_read(inode);
111f4ce1299STrond Myklebust 			__entry->nfsi_flags = nfsi->flags;
112f4ce1299STrond Myklebust 			__entry->cache_validity = nfsi->cache_validity;
113f4ce1299STrond Myklebust 		),
114f4ce1299STrond Myklebust 
115f4ce1299STrond Myklebust 		TP_printk(
11638a638a7SChuck Lever 			"error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x "
117f4ce1299STrond Myklebust 			"type=%u (%s) version=%llu size=%lld "
1187d4006c1SChuck Lever 			"cache_validity=0x%lx (%s) nfs_flags=0x%lx (%s)",
119*8791545eSChuck Lever 			-__entry->error, show_nfs_status(__entry->error),
120f4ce1299STrond Myklebust 			MAJOR(__entry->dev), MINOR(__entry->dev),
121f4ce1299STrond Myklebust 			(unsigned long long)__entry->fileid,
122f4ce1299STrond Myklebust 			__entry->fhandle,
123f4ce1299STrond Myklebust 			__entry->type,
1249d2d48bbSChuck Lever 			show_fs_dirent_type(__entry->type),
125f4ce1299STrond Myklebust 			(unsigned long long)__entry->version,
126f4ce1299STrond Myklebust 			(long long)__entry->size,
127f4ce1299STrond Myklebust 			__entry->cache_validity,
128f4ce1299STrond Myklebust 			nfs_show_cache_validity(__entry->cache_validity),
129f4ce1299STrond Myklebust 			__entry->nfsi_flags,
130f4ce1299STrond Myklebust 			nfs_show_nfsi_flags(__entry->nfsi_flags)
131f4ce1299STrond Myklebust 		)
132f4ce1299STrond Myklebust );
133f4ce1299STrond Myklebust 
134f4ce1299STrond Myklebust #define DEFINE_NFS_INODE_EVENT(name) \
135f4ce1299STrond Myklebust 	DEFINE_EVENT(nfs_inode_event, name, \
136f4ce1299STrond Myklebust 			TP_PROTO( \
137f4ce1299STrond Myklebust 				const struct inode *inode \
138f4ce1299STrond Myklebust 			), \
139f4ce1299STrond Myklebust 			TP_ARGS(inode))
140f4ce1299STrond Myklebust #define DEFINE_NFS_INODE_EVENT_DONE(name) \
141f4ce1299STrond Myklebust 	DEFINE_EVENT(nfs_inode_event_done, name, \
142f4ce1299STrond Myklebust 			TP_PROTO( \
143f4ce1299STrond Myklebust 				const struct inode *inode, \
144f4ce1299STrond Myklebust 				int error \
145f4ce1299STrond Myklebust 			), \
146f4ce1299STrond Myklebust 			TP_ARGS(inode, error))
14793ce4af7STrond Myklebust DEFINE_NFS_INODE_EVENT(nfs_set_inode_stale);
148f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT(nfs_refresh_inode_enter);
149f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT_DONE(nfs_refresh_inode_exit);
150f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT(nfs_revalidate_inode_enter);
151f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT_DONE(nfs_revalidate_inode_exit);
152f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT(nfs_invalidate_mapping_enter);
153f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT_DONE(nfs_invalidate_mapping_exit);
154f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT(nfs_getattr_enter);
155f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT_DONE(nfs_getattr_exit);
156f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT(nfs_setattr_enter);
157f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT_DONE(nfs_setattr_exit);
158f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT(nfs_writeback_page_enter);
159f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT_DONE(nfs_writeback_page_exit);
160f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT(nfs_writeback_inode_enter);
161f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT_DONE(nfs_writeback_inode_exit);
162f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT(nfs_fsync_enter);
163f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT_DONE(nfs_fsync_exit);
164f4ce1299STrond Myklebust DEFINE_NFS_INODE_EVENT(nfs_access_enter);
165e8194b7dSTrond Myklebust 
166e8194b7dSTrond Myklebust TRACE_EVENT(nfs_access_exit,
167e8194b7dSTrond Myklebust 		TP_PROTO(
168e8194b7dSTrond Myklebust 			const struct inode *inode,
169e8194b7dSTrond Myklebust 			unsigned int mask,
170e8194b7dSTrond Myklebust 			unsigned int permitted,
171e8194b7dSTrond Myklebust 			int error
172e8194b7dSTrond Myklebust 		),
173e8194b7dSTrond Myklebust 
174e8194b7dSTrond Myklebust 		TP_ARGS(inode, mask, permitted, error),
175e8194b7dSTrond Myklebust 
176e8194b7dSTrond Myklebust 		TP_STRUCT__entry(
177e8194b7dSTrond Myklebust 			__field(unsigned long, error)
178e8194b7dSTrond Myklebust 			__field(dev_t, dev)
179e8194b7dSTrond Myklebust 			__field(u32, fhandle)
180e8194b7dSTrond Myklebust 			__field(unsigned char, type)
181e8194b7dSTrond Myklebust 			__field(u64, fileid)
182e8194b7dSTrond Myklebust 			__field(u64, version)
183e8194b7dSTrond Myklebust 			__field(loff_t, size)
184e8194b7dSTrond Myklebust 			__field(unsigned long, nfsi_flags)
185e8194b7dSTrond Myklebust 			__field(unsigned long, cache_validity)
186e8194b7dSTrond Myklebust 			__field(unsigned int, mask)
187e8194b7dSTrond Myklebust 			__field(unsigned int, permitted)
188e8194b7dSTrond Myklebust 		),
189e8194b7dSTrond Myklebust 
190e8194b7dSTrond Myklebust 		TP_fast_assign(
191e8194b7dSTrond Myklebust 			const struct nfs_inode *nfsi = NFS_I(inode);
192e8194b7dSTrond Myklebust 			__entry->error = error < 0 ? -error : 0;
193e8194b7dSTrond Myklebust 			__entry->dev = inode->i_sb->s_dev;
194e8194b7dSTrond Myklebust 			__entry->fileid = nfsi->fileid;
195e8194b7dSTrond Myklebust 			__entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
196e8194b7dSTrond Myklebust 			__entry->type = nfs_umode_to_dtype(inode->i_mode);
197e8194b7dSTrond Myklebust 			__entry->version = inode_peek_iversion_raw(inode);
198e8194b7dSTrond Myklebust 			__entry->size = i_size_read(inode);
199e8194b7dSTrond Myklebust 			__entry->nfsi_flags = nfsi->flags;
200e8194b7dSTrond Myklebust 			__entry->cache_validity = nfsi->cache_validity;
201e8194b7dSTrond Myklebust 			__entry->mask = mask;
202e8194b7dSTrond Myklebust 			__entry->permitted = permitted;
203e8194b7dSTrond Myklebust 		),
204e8194b7dSTrond Myklebust 
205e8194b7dSTrond Myklebust 		TP_printk(
206e8194b7dSTrond Myklebust 			"error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x "
207e8194b7dSTrond Myklebust 			"type=%u (%s) version=%llu size=%lld "
208e8194b7dSTrond Myklebust 			"cache_validity=0x%lx (%s) nfs_flags=0x%lx (%s) "
209e8194b7dSTrond Myklebust 			"mask=0x%x permitted=0x%x",
210*8791545eSChuck Lever 			-__entry->error, show_nfs_status(__entry->error),
211e8194b7dSTrond Myklebust 			MAJOR(__entry->dev), MINOR(__entry->dev),
212e8194b7dSTrond Myklebust 			(unsigned long long)__entry->fileid,
213e8194b7dSTrond Myklebust 			__entry->fhandle,
214e8194b7dSTrond Myklebust 			__entry->type,
2159d2d48bbSChuck Lever 			show_fs_dirent_type(__entry->type),
216e8194b7dSTrond Myklebust 			(unsigned long long)__entry->version,
217e8194b7dSTrond Myklebust 			(long long)__entry->size,
218e8194b7dSTrond Myklebust 			__entry->cache_validity,
219e8194b7dSTrond Myklebust 			nfs_show_cache_validity(__entry->cache_validity),
220e8194b7dSTrond Myklebust 			__entry->nfsi_flags,
221e8194b7dSTrond Myklebust 			nfs_show_nfsi_flags(__entry->nfsi_flags),
222e8194b7dSTrond Myklebust 			__entry->mask, __entry->permitted
223e8194b7dSTrond Myklebust 		)
224e8194b7dSTrond Myklebust );
225f4ce1299STrond Myklebust 
226110cb2d2SChuck Lever DECLARE_EVENT_CLASS(nfs_update_size_class,
227110cb2d2SChuck Lever 		TP_PROTO(
228110cb2d2SChuck Lever 			const struct inode *inode,
229110cb2d2SChuck Lever 			loff_t new_size
230110cb2d2SChuck Lever 		),
231110cb2d2SChuck Lever 
232110cb2d2SChuck Lever 		TP_ARGS(inode, new_size),
233110cb2d2SChuck Lever 
234110cb2d2SChuck Lever 		TP_STRUCT__entry(
235110cb2d2SChuck Lever 			__field(dev_t, dev)
236110cb2d2SChuck Lever 			__field(u32, fhandle)
237110cb2d2SChuck Lever 			__field(u64, fileid)
238110cb2d2SChuck Lever 			__field(u64, version)
239110cb2d2SChuck Lever 			__field(loff_t, cur_size)
240110cb2d2SChuck Lever 			__field(loff_t, new_size)
241110cb2d2SChuck Lever 		),
242110cb2d2SChuck Lever 
243110cb2d2SChuck Lever 		TP_fast_assign(
244110cb2d2SChuck Lever 			const struct nfs_inode *nfsi = NFS_I(inode);
245110cb2d2SChuck Lever 
246110cb2d2SChuck Lever 			__entry->dev = inode->i_sb->s_dev;
247110cb2d2SChuck Lever 			__entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
248110cb2d2SChuck Lever 			__entry->fileid = nfsi->fileid;
249110cb2d2SChuck Lever 			__entry->version = inode_peek_iversion_raw(inode);
250110cb2d2SChuck Lever 			__entry->cur_size = i_size_read(inode);
251110cb2d2SChuck Lever 			__entry->new_size = new_size;
252110cb2d2SChuck Lever 		),
253110cb2d2SChuck Lever 
254110cb2d2SChuck Lever 		TP_printk(
255110cb2d2SChuck Lever 			"fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu cursize=%lld newsize=%lld",
256110cb2d2SChuck Lever 			MAJOR(__entry->dev), MINOR(__entry->dev),
257110cb2d2SChuck Lever 			(unsigned long long)__entry->fileid,
258110cb2d2SChuck Lever 			__entry->fhandle, __entry->version,
259110cb2d2SChuck Lever 			__entry->cur_size, __entry->new_size
260110cb2d2SChuck Lever 		)
261110cb2d2SChuck Lever );
262110cb2d2SChuck Lever 
263110cb2d2SChuck Lever #define DEFINE_NFS_UPDATE_SIZE_EVENT(name) \
264110cb2d2SChuck Lever 	DEFINE_EVENT(nfs_update_size_class, nfs_size_##name, \
265110cb2d2SChuck Lever 			TP_PROTO( \
266110cb2d2SChuck Lever 				const struct inode *inode, \
267110cb2d2SChuck Lever 				loff_t new_size \
268110cb2d2SChuck Lever 			), \
269110cb2d2SChuck Lever 			TP_ARGS(inode, new_size))
270110cb2d2SChuck Lever 
271110cb2d2SChuck Lever DEFINE_NFS_UPDATE_SIZE_EVENT(truncate);
272110cb2d2SChuck Lever DEFINE_NFS_UPDATE_SIZE_EVENT(wcc);
273110cb2d2SChuck Lever DEFINE_NFS_UPDATE_SIZE_EVENT(update);
274110cb2d2SChuck Lever DEFINE_NFS_UPDATE_SIZE_EVENT(grow);
275110cb2d2SChuck Lever 
2766e0d0be7STrond Myklebust DECLARE_EVENT_CLASS(nfs_lookup_event,
2776e0d0be7STrond Myklebust 		TP_PROTO(
2786e0d0be7STrond Myklebust 			const struct inode *dir,
2796e0d0be7STrond Myklebust 			const struct dentry *dentry,
2806e0d0be7STrond Myklebust 			unsigned int flags
2816e0d0be7STrond Myklebust 		),
2826e0d0be7STrond Myklebust 
2836e0d0be7STrond Myklebust 		TP_ARGS(dir, dentry, flags),
2846e0d0be7STrond Myklebust 
2856e0d0be7STrond Myklebust 		TP_STRUCT__entry(
2867d4006c1SChuck Lever 			__field(unsigned long, flags)
2876e0d0be7STrond Myklebust 			__field(dev_t, dev)
2886e0d0be7STrond Myklebust 			__field(u64, dir)
2896e0d0be7STrond Myklebust 			__string(name, dentry->d_name.name)
2906e0d0be7STrond Myklebust 		),
2916e0d0be7STrond Myklebust 
2926e0d0be7STrond Myklebust 		TP_fast_assign(
2936e0d0be7STrond Myklebust 			__entry->dev = dir->i_sb->s_dev;
2946e0d0be7STrond Myklebust 			__entry->dir = NFS_FILEID(dir);
2956e0d0be7STrond Myklebust 			__entry->flags = flags;
2966e0d0be7STrond Myklebust 			__assign_str(name, dentry->d_name.name);
2976e0d0be7STrond Myklebust 		),
2986e0d0be7STrond Myklebust 
2996e0d0be7STrond Myklebust 		TP_printk(
3007d4006c1SChuck Lever 			"flags=0x%lx (%s) name=%02x:%02x:%llu/%s",
3016e0d0be7STrond Myklebust 			__entry->flags,
3029d2d48bbSChuck Lever 			show_fs_lookup_flags(__entry->flags),
3036e0d0be7STrond Myklebust 			MAJOR(__entry->dev), MINOR(__entry->dev),
3046e0d0be7STrond Myklebust 			(unsigned long long)__entry->dir,
3056e0d0be7STrond Myklebust 			__get_str(name)
3066e0d0be7STrond Myklebust 		)
3076e0d0be7STrond Myklebust );
3086e0d0be7STrond Myklebust 
3096e0d0be7STrond Myklebust #define DEFINE_NFS_LOOKUP_EVENT(name) \
3106e0d0be7STrond Myklebust 	DEFINE_EVENT(nfs_lookup_event, name, \
3116e0d0be7STrond Myklebust 			TP_PROTO( \
3126e0d0be7STrond Myklebust 				const struct inode *dir, \
3136e0d0be7STrond Myklebust 				const struct dentry *dentry, \
3146e0d0be7STrond Myklebust 				unsigned int flags \
3156e0d0be7STrond Myklebust 			), \
3166e0d0be7STrond Myklebust 			TP_ARGS(dir, dentry, flags))
3176e0d0be7STrond Myklebust 
3186e0d0be7STrond Myklebust DECLARE_EVENT_CLASS(nfs_lookup_event_done,
3196e0d0be7STrond Myklebust 		TP_PROTO(
3206e0d0be7STrond Myklebust 			const struct inode *dir,
3216e0d0be7STrond Myklebust 			const struct dentry *dentry,
3226e0d0be7STrond Myklebust 			unsigned int flags,
3236e0d0be7STrond Myklebust 			int error
3246e0d0be7STrond Myklebust 		),
3256e0d0be7STrond Myklebust 
3266e0d0be7STrond Myklebust 		TP_ARGS(dir, dentry, flags, error),
3276e0d0be7STrond Myklebust 
3286e0d0be7STrond Myklebust 		TP_STRUCT__entry(
32938a638a7SChuck Lever 			__field(unsigned long, error)
3307d4006c1SChuck Lever 			__field(unsigned long, flags)
3316e0d0be7STrond Myklebust 			__field(dev_t, dev)
3326e0d0be7STrond Myklebust 			__field(u64, dir)
3336e0d0be7STrond Myklebust 			__string(name, dentry->d_name.name)
3346e0d0be7STrond Myklebust 		),
3356e0d0be7STrond Myklebust 
3366e0d0be7STrond Myklebust 		TP_fast_assign(
3376e0d0be7STrond Myklebust 			__entry->dev = dir->i_sb->s_dev;
3386e0d0be7STrond Myklebust 			__entry->dir = NFS_FILEID(dir);
33938a638a7SChuck Lever 			__entry->error = error < 0 ? -error : 0;
3406e0d0be7STrond Myklebust 			__entry->flags = flags;
3416e0d0be7STrond Myklebust 			__assign_str(name, dentry->d_name.name);
3426e0d0be7STrond Myklebust 		),
3436e0d0be7STrond Myklebust 
3446e0d0be7STrond Myklebust 		TP_printk(
3457d4006c1SChuck Lever 			"error=%ld (%s) flags=0x%lx (%s) name=%02x:%02x:%llu/%s",
346*8791545eSChuck Lever 			-__entry->error, show_nfs_status(__entry->error),
3476e0d0be7STrond Myklebust 			__entry->flags,
3489d2d48bbSChuck Lever 			show_fs_lookup_flags(__entry->flags),
3496e0d0be7STrond Myklebust 			MAJOR(__entry->dev), MINOR(__entry->dev),
3506e0d0be7STrond Myklebust 			(unsigned long long)__entry->dir,
3516e0d0be7STrond Myklebust 			__get_str(name)
3526e0d0be7STrond Myklebust 		)
3536e0d0be7STrond Myklebust );
3546e0d0be7STrond Myklebust 
3556e0d0be7STrond Myklebust #define DEFINE_NFS_LOOKUP_EVENT_DONE(name) \
3566e0d0be7STrond Myklebust 	DEFINE_EVENT(nfs_lookup_event_done, name, \
3576e0d0be7STrond Myklebust 			TP_PROTO( \
3586e0d0be7STrond Myklebust 				const struct inode *dir, \
3596e0d0be7STrond Myklebust 				const struct dentry *dentry, \
3606e0d0be7STrond Myklebust 				unsigned int flags, \
3616e0d0be7STrond Myklebust 				int error \
3626e0d0be7STrond Myklebust 			), \
3636e0d0be7STrond Myklebust 			TP_ARGS(dir, dentry, flags, error))
3646e0d0be7STrond Myklebust 
3656e0d0be7STrond Myklebust DEFINE_NFS_LOOKUP_EVENT(nfs_lookup_enter);
3666e0d0be7STrond Myklebust DEFINE_NFS_LOOKUP_EVENT_DONE(nfs_lookup_exit);
3676e0d0be7STrond Myklebust DEFINE_NFS_LOOKUP_EVENT(nfs_lookup_revalidate_enter);
3686e0d0be7STrond Myklebust DEFINE_NFS_LOOKUP_EVENT_DONE(nfs_lookup_revalidate_exit);
3696e0d0be7STrond Myklebust 
3706e0d0be7STrond Myklebust TRACE_EVENT(nfs_atomic_open_enter,
3716e0d0be7STrond Myklebust 		TP_PROTO(
3726e0d0be7STrond Myklebust 			const struct inode *dir,
3736e0d0be7STrond Myklebust 			const struct nfs_open_context *ctx,
3746e0d0be7STrond Myklebust 			unsigned int flags
3756e0d0be7STrond Myklebust 		),
3766e0d0be7STrond Myklebust 
3776e0d0be7STrond Myklebust 		TP_ARGS(dir, ctx, flags),
3786e0d0be7STrond Myklebust 
3796e0d0be7STrond Myklebust 		TP_STRUCT__entry(
3807d4006c1SChuck Lever 			__field(unsigned long, flags)
3819d2d48bbSChuck Lever 			__field(unsigned long, fmode)
3826e0d0be7STrond Myklebust 			__field(dev_t, dev)
3836e0d0be7STrond Myklebust 			__field(u64, dir)
3846e0d0be7STrond Myklebust 			__string(name, ctx->dentry->d_name.name)
3856e0d0be7STrond Myklebust 		),
3866e0d0be7STrond Myklebust 
3876e0d0be7STrond Myklebust 		TP_fast_assign(
3886e0d0be7STrond Myklebust 			__entry->dev = dir->i_sb->s_dev;
3896e0d0be7STrond Myklebust 			__entry->dir = NFS_FILEID(dir);
3906e0d0be7STrond Myklebust 			__entry->flags = flags;
3919d2d48bbSChuck Lever 			__entry->fmode = (__force unsigned long)ctx->mode;
3926e0d0be7STrond Myklebust 			__assign_str(name, ctx->dentry->d_name.name);
3936e0d0be7STrond Myklebust 		),
3946e0d0be7STrond Myklebust 
3956e0d0be7STrond Myklebust 		TP_printk(
3967d4006c1SChuck Lever 			"flags=0x%lx (%s) fmode=%s name=%02x:%02x:%llu/%s",
3976e0d0be7STrond Myklebust 			__entry->flags,
3989d2d48bbSChuck Lever 			show_fs_fcntl_open_flags(__entry->flags),
3999d2d48bbSChuck Lever 			show_fs_fmode_flags(__entry->fmode),
4006e0d0be7STrond Myklebust 			MAJOR(__entry->dev), MINOR(__entry->dev),
4016e0d0be7STrond Myklebust 			(unsigned long long)__entry->dir,
4026e0d0be7STrond Myklebust 			__get_str(name)
4036e0d0be7STrond Myklebust 		)
4046e0d0be7STrond Myklebust );
4056e0d0be7STrond Myklebust 
4066e0d0be7STrond Myklebust TRACE_EVENT(nfs_atomic_open_exit,
4076e0d0be7STrond Myklebust 		TP_PROTO(
4086e0d0be7STrond Myklebust 			const struct inode *dir,
4096e0d0be7STrond Myklebust 			const struct nfs_open_context *ctx,
4106e0d0be7STrond Myklebust 			unsigned int flags,
4116e0d0be7STrond Myklebust 			int error
4126e0d0be7STrond Myklebust 		),
4136e0d0be7STrond Myklebust 
4146e0d0be7STrond Myklebust 		TP_ARGS(dir, ctx, flags, error),
4156e0d0be7STrond Myklebust 
4166e0d0be7STrond Myklebust 		TP_STRUCT__entry(
41738a638a7SChuck Lever 			__field(unsigned long, error)
4187d4006c1SChuck Lever 			__field(unsigned long, flags)
4199d2d48bbSChuck Lever 			__field(unsigned long, fmode)
4206e0d0be7STrond Myklebust 			__field(dev_t, dev)
4216e0d0be7STrond Myklebust 			__field(u64, dir)
4226e0d0be7STrond Myklebust 			__string(name, ctx->dentry->d_name.name)
4236e0d0be7STrond Myklebust 		),
4246e0d0be7STrond Myklebust 
4256e0d0be7STrond Myklebust 		TP_fast_assign(
42638a638a7SChuck Lever 			__entry->error = -error;
4276e0d0be7STrond Myklebust 			__entry->dev = dir->i_sb->s_dev;
4286e0d0be7STrond Myklebust 			__entry->dir = NFS_FILEID(dir);
4296e0d0be7STrond Myklebust 			__entry->flags = flags;
4309d2d48bbSChuck Lever 			__entry->fmode = (__force unsigned long)ctx->mode;
4316e0d0be7STrond Myklebust 			__assign_str(name, ctx->dentry->d_name.name);
4326e0d0be7STrond Myklebust 		),
4336e0d0be7STrond Myklebust 
4346e0d0be7STrond Myklebust 		TP_printk(
4357d4006c1SChuck Lever 			"error=%ld (%s) flags=0x%lx (%s) fmode=%s "
4366e0d0be7STrond Myklebust 			"name=%02x:%02x:%llu/%s",
437*8791545eSChuck Lever 			-__entry->error, show_nfs_status(__entry->error),
4386e0d0be7STrond Myklebust 			__entry->flags,
4399d2d48bbSChuck Lever 			show_fs_fcntl_open_flags(__entry->flags),
4409d2d48bbSChuck Lever 			show_fs_fmode_flags(__entry->fmode),
4416e0d0be7STrond Myklebust 			MAJOR(__entry->dev), MINOR(__entry->dev),
4426e0d0be7STrond Myklebust 			(unsigned long long)__entry->dir,
4436e0d0be7STrond Myklebust 			__get_str(name)
4446e0d0be7STrond Myklebust 		)
4456e0d0be7STrond Myklebust );
4466e0d0be7STrond Myklebust 
4478b0ad3d4STrond Myklebust TRACE_EVENT(nfs_create_enter,
4488b0ad3d4STrond Myklebust 		TP_PROTO(
4498b0ad3d4STrond Myklebust 			const struct inode *dir,
4508b0ad3d4STrond Myklebust 			const struct dentry *dentry,
4518b0ad3d4STrond Myklebust 			unsigned int flags
4528b0ad3d4STrond Myklebust 		),
4538b0ad3d4STrond Myklebust 
4548b0ad3d4STrond Myklebust 		TP_ARGS(dir, dentry, flags),
4558b0ad3d4STrond Myklebust 
4568b0ad3d4STrond Myklebust 		TP_STRUCT__entry(
4577d4006c1SChuck Lever 			__field(unsigned long, flags)
4588b0ad3d4STrond Myklebust 			__field(dev_t, dev)
4598b0ad3d4STrond Myklebust 			__field(u64, dir)
4608b0ad3d4STrond Myklebust 			__string(name, dentry->d_name.name)
4618b0ad3d4STrond Myklebust 		),
4628b0ad3d4STrond Myklebust 
4638b0ad3d4STrond Myklebust 		TP_fast_assign(
4648b0ad3d4STrond Myklebust 			__entry->dev = dir->i_sb->s_dev;
4658b0ad3d4STrond Myklebust 			__entry->dir = NFS_FILEID(dir);
4668b0ad3d4STrond Myklebust 			__entry->flags = flags;
4678b0ad3d4STrond Myklebust 			__assign_str(name, dentry->d_name.name);
4688b0ad3d4STrond Myklebust 		),
4698b0ad3d4STrond Myklebust 
4708b0ad3d4STrond Myklebust 		TP_printk(
4717d4006c1SChuck Lever 			"flags=0x%lx (%s) name=%02x:%02x:%llu/%s",
4728b0ad3d4STrond Myklebust 			__entry->flags,
4739d2d48bbSChuck Lever 			show_fs_fcntl_open_flags(__entry->flags),
4748b0ad3d4STrond Myklebust 			MAJOR(__entry->dev), MINOR(__entry->dev),
4758b0ad3d4STrond Myklebust 			(unsigned long long)__entry->dir,
4768b0ad3d4STrond Myklebust 			__get_str(name)
4778b0ad3d4STrond Myklebust 		)
4788b0ad3d4STrond Myklebust );
4798b0ad3d4STrond Myklebust 
4808b0ad3d4STrond Myklebust TRACE_EVENT(nfs_create_exit,
4818b0ad3d4STrond Myklebust 		TP_PROTO(
4828b0ad3d4STrond Myklebust 			const struct inode *dir,
4838b0ad3d4STrond Myklebust 			const struct dentry *dentry,
4848b0ad3d4STrond Myklebust 			unsigned int flags,
4858b0ad3d4STrond Myklebust 			int error
4868b0ad3d4STrond Myklebust 		),
4878b0ad3d4STrond Myklebust 
4888b0ad3d4STrond Myklebust 		TP_ARGS(dir, dentry, flags, error),
4898b0ad3d4STrond Myklebust 
4908b0ad3d4STrond Myklebust 		TP_STRUCT__entry(
49138a638a7SChuck Lever 			__field(unsigned long, error)
4927d4006c1SChuck Lever 			__field(unsigned long, flags)
4938b0ad3d4STrond Myklebust 			__field(dev_t, dev)
4948b0ad3d4STrond Myklebust 			__field(u64, dir)
4958b0ad3d4STrond Myklebust 			__string(name, dentry->d_name.name)
4968b0ad3d4STrond Myklebust 		),
4978b0ad3d4STrond Myklebust 
4988b0ad3d4STrond Myklebust 		TP_fast_assign(
49938a638a7SChuck Lever 			__entry->error = -error;
5008b0ad3d4STrond Myklebust 			__entry->dev = dir->i_sb->s_dev;
5018b0ad3d4STrond Myklebust 			__entry->dir = NFS_FILEID(dir);
5028b0ad3d4STrond Myklebust 			__entry->flags = flags;
5038b0ad3d4STrond Myklebust 			__assign_str(name, dentry->d_name.name);
5048b0ad3d4STrond Myklebust 		),
5058b0ad3d4STrond Myklebust 
5068b0ad3d4STrond Myklebust 		TP_printk(
5077d4006c1SChuck Lever 			"error=%ld (%s) flags=0x%lx (%s) name=%02x:%02x:%llu/%s",
508*8791545eSChuck Lever 			-__entry->error, show_nfs_status(__entry->error),
5098b0ad3d4STrond Myklebust 			__entry->flags,
5109d2d48bbSChuck Lever 			show_fs_fcntl_open_flags(__entry->flags),
5118b0ad3d4STrond Myklebust 			MAJOR(__entry->dev), MINOR(__entry->dev),
5128b0ad3d4STrond Myklebust 			(unsigned long long)__entry->dir,
5138b0ad3d4STrond Myklebust 			__get_str(name)
5148b0ad3d4STrond Myklebust 		)
5158b0ad3d4STrond Myklebust );
5168b0ad3d4STrond Myklebust 
5171ca42382STrond Myklebust DECLARE_EVENT_CLASS(nfs_directory_event,
5181ca42382STrond Myklebust 		TP_PROTO(
5191ca42382STrond Myklebust 			const struct inode *dir,
5201ca42382STrond Myklebust 			const struct dentry *dentry
5211ca42382STrond Myklebust 		),
5221ca42382STrond Myklebust 
5231ca42382STrond Myklebust 		TP_ARGS(dir, dentry),
5241ca42382STrond Myklebust 
5251ca42382STrond Myklebust 		TP_STRUCT__entry(
5261ca42382STrond Myklebust 			__field(dev_t, dev)
5271ca42382STrond Myklebust 			__field(u64, dir)
5281ca42382STrond Myklebust 			__string(name, dentry->d_name.name)
5291ca42382STrond Myklebust 		),
5301ca42382STrond Myklebust 
5311ca42382STrond Myklebust 		TP_fast_assign(
5321ca42382STrond Myklebust 			__entry->dev = dir->i_sb->s_dev;
5331ca42382STrond Myklebust 			__entry->dir = NFS_FILEID(dir);
5341ca42382STrond Myklebust 			__assign_str(name, dentry->d_name.name);
5351ca42382STrond Myklebust 		),
5361ca42382STrond Myklebust 
5371ca42382STrond Myklebust 		TP_printk(
5381ca42382STrond Myklebust 			"name=%02x:%02x:%llu/%s",
5391ca42382STrond Myklebust 			MAJOR(__entry->dev), MINOR(__entry->dev),
5401ca42382STrond Myklebust 			(unsigned long long)__entry->dir,
5411ca42382STrond Myklebust 			__get_str(name)
5421ca42382STrond Myklebust 		)
5431ca42382STrond Myklebust );
5441ca42382STrond Myklebust 
5451ca42382STrond Myklebust #define DEFINE_NFS_DIRECTORY_EVENT(name) \
5461ca42382STrond Myklebust 	DEFINE_EVENT(nfs_directory_event, name, \
5471ca42382STrond Myklebust 			TP_PROTO( \
5481ca42382STrond Myklebust 				const struct inode *dir, \
5491ca42382STrond Myklebust 				const struct dentry *dentry \
5501ca42382STrond Myklebust 			), \
5511ca42382STrond Myklebust 			TP_ARGS(dir, dentry))
5521ca42382STrond Myklebust 
5531ca42382STrond Myklebust DECLARE_EVENT_CLASS(nfs_directory_event_done,
5541ca42382STrond Myklebust 		TP_PROTO(
5551ca42382STrond Myklebust 			const struct inode *dir,
5561ca42382STrond Myklebust 			const struct dentry *dentry,
5571ca42382STrond Myklebust 			int error
5581ca42382STrond Myklebust 		),
5591ca42382STrond Myklebust 
5601ca42382STrond Myklebust 		TP_ARGS(dir, dentry, error),
5611ca42382STrond Myklebust 
5621ca42382STrond Myklebust 		TP_STRUCT__entry(
56338a638a7SChuck Lever 			__field(unsigned long, error)
5641ca42382STrond Myklebust 			__field(dev_t, dev)
5651ca42382STrond Myklebust 			__field(u64, dir)
5661ca42382STrond Myklebust 			__string(name, dentry->d_name.name)
5671ca42382STrond Myklebust 		),
5681ca42382STrond Myklebust 
5691ca42382STrond Myklebust 		TP_fast_assign(
5701ca42382STrond Myklebust 			__entry->dev = dir->i_sb->s_dev;
5711ca42382STrond Myklebust 			__entry->dir = NFS_FILEID(dir);
57238a638a7SChuck Lever 			__entry->error = error < 0 ? -error : 0;
5731ca42382STrond Myklebust 			__assign_str(name, dentry->d_name.name);
5741ca42382STrond Myklebust 		),
5751ca42382STrond Myklebust 
5761ca42382STrond Myklebust 		TP_printk(
57738a638a7SChuck Lever 			"error=%ld (%s) name=%02x:%02x:%llu/%s",
578*8791545eSChuck Lever 			-__entry->error, show_nfs_status(__entry->error),
5791ca42382STrond Myklebust 			MAJOR(__entry->dev), MINOR(__entry->dev),
5801ca42382STrond Myklebust 			(unsigned long long)__entry->dir,
5811ca42382STrond Myklebust 			__get_str(name)
5821ca42382STrond Myklebust 		)
5831ca42382STrond Myklebust );
5841ca42382STrond Myklebust 
5851ca42382STrond Myklebust #define DEFINE_NFS_DIRECTORY_EVENT_DONE(name) \
5861ca42382STrond Myklebust 	DEFINE_EVENT(nfs_directory_event_done, name, \
5871ca42382STrond Myklebust 			TP_PROTO( \
5881ca42382STrond Myklebust 				const struct inode *dir, \
5891ca42382STrond Myklebust 				const struct dentry *dentry, \
5901ca42382STrond Myklebust 				int error \
5911ca42382STrond Myklebust 			), \
5921ca42382STrond Myklebust 			TP_ARGS(dir, dentry, error))
5931ca42382STrond Myklebust 
5941ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT(nfs_mknod_enter);
5951ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_mknod_exit);
5961ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT(nfs_mkdir_enter);
5971ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_mkdir_exit);
5981ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT(nfs_rmdir_enter);
5991ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_rmdir_exit);
6001ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT(nfs_remove_enter);
6011ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_remove_exit);
6021ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT(nfs_unlink_enter);
6031ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_unlink_exit);
6041ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT(nfs_symlink_enter);
6051ca42382STrond Myklebust DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_symlink_exit);
6061ca42382STrond Myklebust 
6071fd1085bSTrond Myklebust TRACE_EVENT(nfs_link_enter,
6081fd1085bSTrond Myklebust 		TP_PROTO(
6091fd1085bSTrond Myklebust 			const struct inode *inode,
6101fd1085bSTrond Myklebust 			const struct inode *dir,
6111fd1085bSTrond Myklebust 			const struct dentry *dentry
6121fd1085bSTrond Myklebust 		),
6131fd1085bSTrond Myklebust 
6141fd1085bSTrond Myklebust 		TP_ARGS(inode, dir, dentry),
6151fd1085bSTrond Myklebust 
6161fd1085bSTrond Myklebust 		TP_STRUCT__entry(
6171fd1085bSTrond Myklebust 			__field(dev_t, dev)
6181fd1085bSTrond Myklebust 			__field(u64, fileid)
6191fd1085bSTrond Myklebust 			__field(u64, dir)
6201fd1085bSTrond Myklebust 			__string(name, dentry->d_name.name)
6211fd1085bSTrond Myklebust 		),
6221fd1085bSTrond Myklebust 
6231fd1085bSTrond Myklebust 		TP_fast_assign(
6241fd1085bSTrond Myklebust 			__entry->dev = inode->i_sb->s_dev;
6251fd1085bSTrond Myklebust 			__entry->fileid = NFS_FILEID(inode);
6261fd1085bSTrond Myklebust 			__entry->dir = NFS_FILEID(dir);
6271fd1085bSTrond Myklebust 			__assign_str(name, dentry->d_name.name);
6281fd1085bSTrond Myklebust 		),
6291fd1085bSTrond Myklebust 
6301fd1085bSTrond Myklebust 		TP_printk(
6311fd1085bSTrond Myklebust 			"fileid=%02x:%02x:%llu name=%02x:%02x:%llu/%s",
6321fd1085bSTrond Myklebust 			MAJOR(__entry->dev), MINOR(__entry->dev),
6331fd1085bSTrond Myklebust 			__entry->fileid,
6341fd1085bSTrond Myklebust 			MAJOR(__entry->dev), MINOR(__entry->dev),
6351fd1085bSTrond Myklebust 			(unsigned long long)__entry->dir,
6361fd1085bSTrond Myklebust 			__get_str(name)
6371fd1085bSTrond Myklebust 		)
6381fd1085bSTrond Myklebust );
6391fd1085bSTrond Myklebust 
6401fd1085bSTrond Myklebust TRACE_EVENT(nfs_link_exit,
6411fd1085bSTrond Myklebust 		TP_PROTO(
6421fd1085bSTrond Myklebust 			const struct inode *inode,
6431fd1085bSTrond Myklebust 			const struct inode *dir,
6441fd1085bSTrond Myklebust 			const struct dentry *dentry,
6451fd1085bSTrond Myklebust 			int error
6461fd1085bSTrond Myklebust 		),
6471fd1085bSTrond Myklebust 
6481fd1085bSTrond Myklebust 		TP_ARGS(inode, dir, dentry, error),
6491fd1085bSTrond Myklebust 
6501fd1085bSTrond Myklebust 		TP_STRUCT__entry(
65138a638a7SChuck Lever 			__field(unsigned long, error)
6521fd1085bSTrond Myklebust 			__field(dev_t, dev)
6531fd1085bSTrond Myklebust 			__field(u64, fileid)
6541fd1085bSTrond Myklebust 			__field(u64, dir)
6551fd1085bSTrond Myklebust 			__string(name, dentry->d_name.name)
6561fd1085bSTrond Myklebust 		),
6571fd1085bSTrond Myklebust 
6581fd1085bSTrond Myklebust 		TP_fast_assign(
6591fd1085bSTrond Myklebust 			__entry->dev = inode->i_sb->s_dev;
6601fd1085bSTrond Myklebust 			__entry->fileid = NFS_FILEID(inode);
6611fd1085bSTrond Myklebust 			__entry->dir = NFS_FILEID(dir);
66238a638a7SChuck Lever 			__entry->error = error < 0 ? -error : 0;
6631fd1085bSTrond Myklebust 			__assign_str(name, dentry->d_name.name);
6641fd1085bSTrond Myklebust 		),
6651fd1085bSTrond Myklebust 
6661fd1085bSTrond Myklebust 		TP_printk(
66738a638a7SChuck Lever 			"error=%ld (%s) fileid=%02x:%02x:%llu name=%02x:%02x:%llu/%s",
668*8791545eSChuck Lever 			-__entry->error, show_nfs_status(__entry->error),
6691fd1085bSTrond Myklebust 			MAJOR(__entry->dev), MINOR(__entry->dev),
6701fd1085bSTrond Myklebust 			__entry->fileid,
6711fd1085bSTrond Myklebust 			MAJOR(__entry->dev), MINOR(__entry->dev),
6721fd1085bSTrond Myklebust 			(unsigned long long)__entry->dir,
6731fd1085bSTrond Myklebust 			__get_str(name)
6741fd1085bSTrond Myklebust 		)
6751fd1085bSTrond Myklebust );
6761fd1085bSTrond Myklebust 
67770ded201STrond Myklebust DECLARE_EVENT_CLASS(nfs_rename_event,
67870ded201STrond Myklebust 		TP_PROTO(
67970ded201STrond Myklebust 			const struct inode *old_dir,
68070ded201STrond Myklebust 			const struct dentry *old_dentry,
68170ded201STrond Myklebust 			const struct inode *new_dir,
68270ded201STrond Myklebust 			const struct dentry *new_dentry
68370ded201STrond Myklebust 		),
68470ded201STrond Myklebust 
68570ded201STrond Myklebust 		TP_ARGS(old_dir, old_dentry, new_dir, new_dentry),
68670ded201STrond Myklebust 
68770ded201STrond Myklebust 		TP_STRUCT__entry(
68870ded201STrond Myklebust 			__field(dev_t, dev)
68970ded201STrond Myklebust 			__field(u64, old_dir)
69070ded201STrond Myklebust 			__field(u64, new_dir)
69170ded201STrond Myklebust 			__string(old_name, old_dentry->d_name.name)
69270ded201STrond Myklebust 			__string(new_name, new_dentry->d_name.name)
69370ded201STrond Myklebust 		),
69470ded201STrond Myklebust 
69570ded201STrond Myklebust 		TP_fast_assign(
69670ded201STrond Myklebust 			__entry->dev = old_dir->i_sb->s_dev;
69770ded201STrond Myklebust 			__entry->old_dir = NFS_FILEID(old_dir);
69870ded201STrond Myklebust 			__entry->new_dir = NFS_FILEID(new_dir);
69970ded201STrond Myklebust 			__assign_str(old_name, old_dentry->d_name.name);
70070ded201STrond Myklebust 			__assign_str(new_name, new_dentry->d_name.name);
70170ded201STrond Myklebust 		),
70270ded201STrond Myklebust 
70370ded201STrond Myklebust 		TP_printk(
70470ded201STrond Myklebust 			"old_name=%02x:%02x:%llu/%s new_name=%02x:%02x:%llu/%s",
70570ded201STrond Myklebust 			MAJOR(__entry->dev), MINOR(__entry->dev),
70670ded201STrond Myklebust 			(unsigned long long)__entry->old_dir,
70770ded201STrond Myklebust 			__get_str(old_name),
70870ded201STrond Myklebust 			MAJOR(__entry->dev), MINOR(__entry->dev),
70970ded201STrond Myklebust 			(unsigned long long)__entry->new_dir,
71070ded201STrond Myklebust 			__get_str(new_name)
71170ded201STrond Myklebust 		)
71270ded201STrond Myklebust );
71370ded201STrond Myklebust #define DEFINE_NFS_RENAME_EVENT(name) \
71470ded201STrond Myklebust 	DEFINE_EVENT(nfs_rename_event, name, \
71570ded201STrond Myklebust 			TP_PROTO( \
71670ded201STrond Myklebust 				const struct inode *old_dir, \
71770ded201STrond Myklebust 				const struct dentry *old_dentry, \
71870ded201STrond Myklebust 				const struct inode *new_dir, \
71970ded201STrond Myklebust 				const struct dentry *new_dentry \
72070ded201STrond Myklebust 			), \
72170ded201STrond Myklebust 			TP_ARGS(old_dir, old_dentry, new_dir, new_dentry))
72270ded201STrond Myklebust 
72370ded201STrond Myklebust DECLARE_EVENT_CLASS(nfs_rename_event_done,
72470ded201STrond Myklebust 		TP_PROTO(
72570ded201STrond Myklebust 			const struct inode *old_dir,
72670ded201STrond Myklebust 			const struct dentry *old_dentry,
72770ded201STrond Myklebust 			const struct inode *new_dir,
72870ded201STrond Myklebust 			const struct dentry *new_dentry,
72970ded201STrond Myklebust 			int error
73070ded201STrond Myklebust 		),
73170ded201STrond Myklebust 
73270ded201STrond Myklebust 		TP_ARGS(old_dir, old_dentry, new_dir, new_dentry, error),
73370ded201STrond Myklebust 
73470ded201STrond Myklebust 		TP_STRUCT__entry(
73570ded201STrond Myklebust 			__field(dev_t, dev)
73638a638a7SChuck Lever 			__field(unsigned long, error)
73770ded201STrond Myklebust 			__field(u64, old_dir)
73870ded201STrond Myklebust 			__string(old_name, old_dentry->d_name.name)
73970ded201STrond Myklebust 			__field(u64, new_dir)
74070ded201STrond Myklebust 			__string(new_name, new_dentry->d_name.name)
74170ded201STrond Myklebust 		),
74270ded201STrond Myklebust 
74370ded201STrond Myklebust 		TP_fast_assign(
74470ded201STrond Myklebust 			__entry->dev = old_dir->i_sb->s_dev;
74538a638a7SChuck Lever 			__entry->error = -error;
74670ded201STrond Myklebust 			__entry->old_dir = NFS_FILEID(old_dir);
74770ded201STrond Myklebust 			__entry->new_dir = NFS_FILEID(new_dir);
74870ded201STrond Myklebust 			__assign_str(old_name, old_dentry->d_name.name);
74970ded201STrond Myklebust 			__assign_str(new_name, new_dentry->d_name.name);
75070ded201STrond Myklebust 		),
75170ded201STrond Myklebust 
75270ded201STrond Myklebust 		TP_printk(
75338a638a7SChuck Lever 			"error=%ld (%s) old_name=%02x:%02x:%llu/%s "
75470ded201STrond Myklebust 			"new_name=%02x:%02x:%llu/%s",
755*8791545eSChuck Lever 			-__entry->error, show_nfs_status(__entry->error),
75670ded201STrond Myklebust 			MAJOR(__entry->dev), MINOR(__entry->dev),
75770ded201STrond Myklebust 			(unsigned long long)__entry->old_dir,
75870ded201STrond Myklebust 			__get_str(old_name),
75970ded201STrond Myklebust 			MAJOR(__entry->dev), MINOR(__entry->dev),
76070ded201STrond Myklebust 			(unsigned long long)__entry->new_dir,
76170ded201STrond Myklebust 			__get_str(new_name)
76270ded201STrond Myklebust 		)
76370ded201STrond Myklebust );
76470ded201STrond Myklebust #define DEFINE_NFS_RENAME_EVENT_DONE(name) \
76570ded201STrond Myklebust 	DEFINE_EVENT(nfs_rename_event_done, name, \
76670ded201STrond Myklebust 			TP_PROTO( \
76770ded201STrond Myklebust 				const struct inode *old_dir, \
76870ded201STrond Myklebust 				const struct dentry *old_dentry, \
76970ded201STrond Myklebust 				const struct inode *new_dir, \
77070ded201STrond Myklebust 				const struct dentry *new_dentry, \
77170ded201STrond Myklebust 				int error \
77270ded201STrond Myklebust 			), \
77370ded201STrond Myklebust 			TP_ARGS(old_dir, old_dentry, new_dir, \
77470ded201STrond Myklebust 				new_dentry, error))
77570ded201STrond Myklebust 
77670ded201STrond Myklebust DEFINE_NFS_RENAME_EVENT(nfs_rename_enter);
77770ded201STrond Myklebust DEFINE_NFS_RENAME_EVENT_DONE(nfs_rename_exit);
77870ded201STrond Myklebust 
77970ded201STrond Myklebust DEFINE_NFS_RENAME_EVENT_DONE(nfs_sillyrename_rename);
78070ded201STrond Myklebust 
78170ded201STrond Myklebust TRACE_EVENT(nfs_sillyrename_unlink,
78270ded201STrond Myklebust 		TP_PROTO(
78370ded201STrond Myklebust 			const struct nfs_unlinkdata *data,
78470ded201STrond Myklebust 			int error
78570ded201STrond Myklebust 		),
78670ded201STrond Myklebust 
78770ded201STrond Myklebust 		TP_ARGS(data, error),
78870ded201STrond Myklebust 
78970ded201STrond Myklebust 		TP_STRUCT__entry(
79070ded201STrond Myklebust 			__field(dev_t, dev)
79138a638a7SChuck Lever 			__field(unsigned long, error)
79270ded201STrond Myklebust 			__field(u64, dir)
79370ded201STrond Myklebust 			__dynamic_array(char, name, data->args.name.len + 1)
79470ded201STrond Myklebust 		),
79570ded201STrond Myklebust 
79670ded201STrond Myklebust 		TP_fast_assign(
797884be175SAl Viro 			struct inode *dir = d_inode(data->dentry->d_parent);
79870ded201STrond Myklebust 			size_t len = data->args.name.len;
79970ded201STrond Myklebust 			__entry->dev = dir->i_sb->s_dev;
80070ded201STrond Myklebust 			__entry->dir = NFS_FILEID(dir);
80138a638a7SChuck Lever 			__entry->error = -error;
802752d596bSDaniel Bristot de Oliveira 			memcpy(__get_str(name),
80370ded201STrond Myklebust 				data->args.name.name, len);
804752d596bSDaniel Bristot de Oliveira 			__get_str(name)[len] = 0;
80570ded201STrond Myklebust 		),
80670ded201STrond Myklebust 
80770ded201STrond Myklebust 		TP_printk(
80838a638a7SChuck Lever 			"error=%ld (%s) name=%02x:%02x:%llu/%s",
809*8791545eSChuck Lever 			-__entry->error, show_nfs_status(__entry->error),
81070ded201STrond Myklebust 			MAJOR(__entry->dev), MINOR(__entry->dev),
81170ded201STrond Myklebust 			(unsigned long long)__entry->dir,
81270ded201STrond Myklebust 			__get_str(name)
81370ded201STrond Myklebust 		)
81470ded201STrond Myklebust );
8158224b273SChuck Lever 
816d9f87743SChuck Lever TRACE_EVENT(nfs_aop_readpage,
817d9f87743SChuck Lever 		TP_PROTO(
818d9f87743SChuck Lever 			const struct inode *inode,
819d9f87743SChuck Lever 			struct page *page
820d9f87743SChuck Lever 		),
821d9f87743SChuck Lever 
822d9f87743SChuck Lever 		TP_ARGS(inode, page),
823d9f87743SChuck Lever 
824d9f87743SChuck Lever 		TP_STRUCT__entry(
825d9f87743SChuck Lever 			__field(dev_t, dev)
826d9f87743SChuck Lever 			__field(u32, fhandle)
827d9f87743SChuck Lever 			__field(u64, fileid)
828d9f87743SChuck Lever 			__field(u64, version)
829d9f87743SChuck Lever 			__field(loff_t, offset)
830d9f87743SChuck Lever 		),
831d9f87743SChuck Lever 
832d9f87743SChuck Lever 		TP_fast_assign(
833d9f87743SChuck Lever 			const struct nfs_inode *nfsi = NFS_I(inode);
834d9f87743SChuck Lever 
835d9f87743SChuck Lever 			__entry->dev = inode->i_sb->s_dev;
836d9f87743SChuck Lever 			__entry->fileid = nfsi->fileid;
837d9f87743SChuck Lever 			__entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
838d9f87743SChuck Lever 			__entry->version = inode_peek_iversion_raw(inode);
839d9f87743SChuck Lever 			__entry->offset = page_index(page) << PAGE_SHIFT;
840d9f87743SChuck Lever 		),
841d9f87743SChuck Lever 
842d9f87743SChuck Lever 		TP_printk(
843d9f87743SChuck Lever 			"fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu offset=%lld",
844d9f87743SChuck Lever 			MAJOR(__entry->dev), MINOR(__entry->dev),
845d9f87743SChuck Lever 			(unsigned long long)__entry->fileid,
846d9f87743SChuck Lever 			__entry->fhandle, __entry->version,
847d9f87743SChuck Lever 			__entry->offset
848d9f87743SChuck Lever 		)
849d9f87743SChuck Lever );
850d9f87743SChuck Lever 
851d9f87743SChuck Lever TRACE_EVENT(nfs_aop_readpage_done,
852d9f87743SChuck Lever 		TP_PROTO(
853d9f87743SChuck Lever 			const struct inode *inode,
854d9f87743SChuck Lever 			struct page *page,
855d9f87743SChuck Lever 			int ret
856d9f87743SChuck Lever 		),
857d9f87743SChuck Lever 
858d9f87743SChuck Lever 		TP_ARGS(inode, page, ret),
859d9f87743SChuck Lever 
860d9f87743SChuck Lever 		TP_STRUCT__entry(
861d9f87743SChuck Lever 			__field(dev_t, dev)
862d9f87743SChuck Lever 			__field(u32, fhandle)
863d9f87743SChuck Lever 			__field(int, ret)
864d9f87743SChuck Lever 			__field(u64, fileid)
865d9f87743SChuck Lever 			__field(u64, version)
866d9f87743SChuck Lever 			__field(loff_t, offset)
867d9f87743SChuck Lever 		),
868d9f87743SChuck Lever 
869d9f87743SChuck Lever 		TP_fast_assign(
870d9f87743SChuck Lever 			const struct nfs_inode *nfsi = NFS_I(inode);
871d9f87743SChuck Lever 
872d9f87743SChuck Lever 			__entry->dev = inode->i_sb->s_dev;
873d9f87743SChuck Lever 			__entry->fileid = nfsi->fileid;
874d9f87743SChuck Lever 			__entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
875d9f87743SChuck Lever 			__entry->version = inode_peek_iversion_raw(inode);
876d9f87743SChuck Lever 			__entry->offset = page_index(page) << PAGE_SHIFT;
877d9f87743SChuck Lever 			__entry->ret = ret;
878d9f87743SChuck Lever 		),
879d9f87743SChuck Lever 
880d9f87743SChuck Lever 		TP_printk(
881d9f87743SChuck Lever 			"fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu offset=%lld ret=%d",
882d9f87743SChuck Lever 			MAJOR(__entry->dev), MINOR(__entry->dev),
883d9f87743SChuck Lever 			(unsigned long long)__entry->fileid,
884d9f87743SChuck Lever 			__entry->fhandle, __entry->version,
885d9f87743SChuck Lever 			__entry->offset, __entry->ret
886d9f87743SChuck Lever 		)
887d9f87743SChuck Lever );
888d9f87743SChuck Lever 
889d9f87743SChuck Lever TRACE_EVENT(nfs_aop_readahead,
890d9f87743SChuck Lever 		TP_PROTO(
891d9f87743SChuck Lever 			const struct inode *inode,
892d9f87743SChuck Lever 			unsigned int nr_pages
893d9f87743SChuck Lever 		),
894d9f87743SChuck Lever 
895d9f87743SChuck Lever 		TP_ARGS(inode, nr_pages),
896d9f87743SChuck Lever 
897d9f87743SChuck Lever 		TP_STRUCT__entry(
898d9f87743SChuck Lever 			__field(dev_t, dev)
899d9f87743SChuck Lever 			__field(u32, fhandle)
900d9f87743SChuck Lever 			__field(u64, fileid)
901d9f87743SChuck Lever 			__field(u64, version)
902d9f87743SChuck Lever 			__field(unsigned int, nr_pages)
903d9f87743SChuck Lever 		),
904d9f87743SChuck Lever 
905d9f87743SChuck Lever 		TP_fast_assign(
906d9f87743SChuck Lever 			const struct nfs_inode *nfsi = NFS_I(inode);
907d9f87743SChuck Lever 
908d9f87743SChuck Lever 			__entry->dev = inode->i_sb->s_dev;
909d9f87743SChuck Lever 			__entry->fileid = nfsi->fileid;
910d9f87743SChuck Lever 			__entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
911d9f87743SChuck Lever 			__entry->version = inode_peek_iversion_raw(inode);
912d9f87743SChuck Lever 			__entry->nr_pages = nr_pages;
913d9f87743SChuck Lever 		),
914d9f87743SChuck Lever 
915d9f87743SChuck Lever 		TP_printk(
916d9f87743SChuck Lever 			"fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu nr_pages=%u",
917d9f87743SChuck Lever 			MAJOR(__entry->dev), MINOR(__entry->dev),
918d9f87743SChuck Lever 			(unsigned long long)__entry->fileid,
919d9f87743SChuck Lever 			__entry->fhandle, __entry->version,
920d9f87743SChuck Lever 			__entry->nr_pages
921d9f87743SChuck Lever 		)
922d9f87743SChuck Lever );
923d9f87743SChuck Lever 
924d9f87743SChuck Lever TRACE_EVENT(nfs_aop_readahead_done,
925d9f87743SChuck Lever 		TP_PROTO(
926d9f87743SChuck Lever 			const struct inode *inode,
927d9f87743SChuck Lever 			unsigned int nr_pages,
928d9f87743SChuck Lever 			int ret
929d9f87743SChuck Lever 		),
930d9f87743SChuck Lever 
931d9f87743SChuck Lever 		TP_ARGS(inode, nr_pages, ret),
932d9f87743SChuck Lever 
933d9f87743SChuck Lever 		TP_STRUCT__entry(
934d9f87743SChuck Lever 			__field(dev_t, dev)
935d9f87743SChuck Lever 			__field(u32, fhandle)
936d9f87743SChuck Lever 			__field(int, ret)
937d9f87743SChuck Lever 			__field(u64, fileid)
938d9f87743SChuck Lever 			__field(u64, version)
939d9f87743SChuck Lever 			__field(unsigned int, nr_pages)
940d9f87743SChuck Lever 		),
941d9f87743SChuck Lever 
942d9f87743SChuck Lever 		TP_fast_assign(
943d9f87743SChuck Lever 			const struct nfs_inode *nfsi = NFS_I(inode);
944d9f87743SChuck Lever 
945d9f87743SChuck Lever 			__entry->dev = inode->i_sb->s_dev;
946d9f87743SChuck Lever 			__entry->fileid = nfsi->fileid;
947d9f87743SChuck Lever 			__entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
948d9f87743SChuck Lever 			__entry->version = inode_peek_iversion_raw(inode);
949d9f87743SChuck Lever 			__entry->nr_pages = nr_pages;
950d9f87743SChuck Lever 			__entry->ret = ret;
951d9f87743SChuck Lever 		),
952d9f87743SChuck Lever 
953d9f87743SChuck Lever 		TP_printk(
954d9f87743SChuck Lever 			"fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu nr_pages=%u ret=%d",
955d9f87743SChuck Lever 			MAJOR(__entry->dev), MINOR(__entry->dev),
956d9f87743SChuck Lever 			(unsigned long long)__entry->fileid,
957d9f87743SChuck Lever 			__entry->fhandle, __entry->version,
958d9f87743SChuck Lever 			__entry->nr_pages, __entry->ret
959d9f87743SChuck Lever 		)
960d9f87743SChuck Lever );
961d9f87743SChuck Lever 
9628224b273SChuck Lever TRACE_EVENT(nfs_initiate_read,
9638224b273SChuck Lever 		TP_PROTO(
9642343172dSTrond Myklebust 			const struct nfs_pgio_header *hdr
9658224b273SChuck Lever 		),
9668224b273SChuck Lever 
9672343172dSTrond Myklebust 		TP_ARGS(hdr),
9688224b273SChuck Lever 
9698224b273SChuck Lever 		TP_STRUCT__entry(
9708224b273SChuck Lever 			__field(dev_t, dev)
9718224b273SChuck Lever 			__field(u32, fhandle)
9728224b273SChuck Lever 			__field(u64, fileid)
9732343172dSTrond Myklebust 			__field(loff_t, offset)
9742343172dSTrond Myklebust 			__field(u32, count)
9758224b273SChuck Lever 		),
9768224b273SChuck Lever 
9778224b273SChuck Lever 		TP_fast_assign(
9782343172dSTrond Myklebust 			const struct inode *inode = hdr->inode;
9798224b273SChuck Lever 			const struct nfs_inode *nfsi = NFS_I(inode);
9802343172dSTrond Myklebust 			const struct nfs_fh *fh = hdr->args.fh ?
9812343172dSTrond Myklebust 						  hdr->args.fh : &nfsi->fh;
9828224b273SChuck Lever 
9832343172dSTrond Myklebust 			__entry->offset = hdr->args.offset;
9842343172dSTrond Myklebust 			__entry->count = hdr->args.count;
9858224b273SChuck Lever 			__entry->dev = inode->i_sb->s_dev;
9868224b273SChuck Lever 			__entry->fileid = nfsi->fileid;
9872343172dSTrond Myklebust 			__entry->fhandle = nfs_fhandle_hash(fh);
9888224b273SChuck Lever 		),
9898224b273SChuck Lever 
9908224b273SChuck Lever 		TP_printk(
9918224b273SChuck Lever 			"fileid=%02x:%02x:%llu fhandle=0x%08x "
9922343172dSTrond Myklebust 			"offset=%lld count=%u",
9938224b273SChuck Lever 			MAJOR(__entry->dev), MINOR(__entry->dev),
9948224b273SChuck Lever 			(unsigned long long)__entry->fileid,
9958224b273SChuck Lever 			__entry->fhandle,
9962343172dSTrond Myklebust 			(long long)__entry->offset, __entry->count
9978224b273SChuck Lever 		)
9988224b273SChuck Lever );
9998224b273SChuck Lever 
10008224b273SChuck Lever TRACE_EVENT(nfs_readpage_done,
10018224b273SChuck Lever 		TP_PROTO(
10022343172dSTrond Myklebust 			const struct rpc_task *task,
10032343172dSTrond Myklebust 			const struct nfs_pgio_header *hdr
10048224b273SChuck Lever 		),
10058224b273SChuck Lever 
10062343172dSTrond Myklebust 		TP_ARGS(task, hdr),
10078224b273SChuck Lever 
10088224b273SChuck Lever 		TP_STRUCT__entry(
10098224b273SChuck Lever 			__field(dev_t, dev)
10108224b273SChuck Lever 			__field(u32, fhandle)
10118224b273SChuck Lever 			__field(u64, fileid)
10122343172dSTrond Myklebust 			__field(loff_t, offset)
10132343172dSTrond Myklebust 			__field(u32, arg_count)
10142343172dSTrond Myklebust 			__field(u32, res_count)
10152343172dSTrond Myklebust 			__field(bool, eof)
10162343172dSTrond Myklebust 			__field(int, status)
10178224b273SChuck Lever 		),
10188224b273SChuck Lever 
10198224b273SChuck Lever 		TP_fast_assign(
10202343172dSTrond Myklebust 			const struct inode *inode = hdr->inode;
10218224b273SChuck Lever 			const struct nfs_inode *nfsi = NFS_I(inode);
10222343172dSTrond Myklebust 			const struct nfs_fh *fh = hdr->args.fh ?
10232343172dSTrond Myklebust 						  hdr->args.fh : &nfsi->fh;
10248224b273SChuck Lever 
10252343172dSTrond Myklebust 			__entry->status = task->tk_status;
10262343172dSTrond Myklebust 			__entry->offset = hdr->args.offset;
10272343172dSTrond Myklebust 			__entry->arg_count = hdr->args.count;
10282343172dSTrond Myklebust 			__entry->res_count = hdr->res.count;
10292343172dSTrond Myklebust 			__entry->eof = hdr->res.eof;
10308224b273SChuck Lever 			__entry->dev = inode->i_sb->s_dev;
10318224b273SChuck Lever 			__entry->fileid = nfsi->fileid;
10322343172dSTrond Myklebust 			__entry->fhandle = nfs_fhandle_hash(fh);
10338224b273SChuck Lever 		),
10348224b273SChuck Lever 
10358224b273SChuck Lever 		TP_printk(
10368224b273SChuck Lever 			"fileid=%02x:%02x:%llu fhandle=0x%08x "
10372343172dSTrond Myklebust 			"offset=%lld count=%u res=%u status=%d%s",
10388224b273SChuck Lever 			MAJOR(__entry->dev), MINOR(__entry->dev),
10398224b273SChuck Lever 			(unsigned long long)__entry->fileid,
10408224b273SChuck Lever 			__entry->fhandle,
10412343172dSTrond Myklebust 			(long long)__entry->offset, __entry->arg_count,
10422343172dSTrond Myklebust 			__entry->res_count, __entry->status,
10438224b273SChuck Lever 			__entry->eof ? " eof" : ""
10448224b273SChuck Lever 		)
10458224b273SChuck Lever );
10468224b273SChuck Lever 
1047fd2b6121SChuck Lever TRACE_EVENT(nfs_readpage_short,
1048fd2b6121SChuck Lever 		TP_PROTO(
1049fd2b6121SChuck Lever 			const struct rpc_task *task,
1050fd2b6121SChuck Lever 			const struct nfs_pgio_header *hdr
1051fd2b6121SChuck Lever 		),
1052fd2b6121SChuck Lever 
1053fd2b6121SChuck Lever 		TP_ARGS(task, hdr),
1054fd2b6121SChuck Lever 
1055fd2b6121SChuck Lever 		TP_STRUCT__entry(
1056fd2b6121SChuck Lever 			__field(dev_t, dev)
1057fd2b6121SChuck Lever 			__field(u32, fhandle)
1058fd2b6121SChuck Lever 			__field(u64, fileid)
1059fd2b6121SChuck Lever 			__field(loff_t, offset)
1060fd2b6121SChuck Lever 			__field(u32, arg_count)
1061fd2b6121SChuck Lever 			__field(u32, res_count)
1062fd2b6121SChuck Lever 			__field(bool, eof)
1063fd2b6121SChuck Lever 			__field(int, status)
1064fd2b6121SChuck Lever 		),
1065fd2b6121SChuck Lever 
1066fd2b6121SChuck Lever 		TP_fast_assign(
1067fd2b6121SChuck Lever 			const struct inode *inode = hdr->inode;
1068fd2b6121SChuck Lever 			const struct nfs_inode *nfsi = NFS_I(inode);
1069fd2b6121SChuck Lever 			const struct nfs_fh *fh = hdr->args.fh ?
1070fd2b6121SChuck Lever 						  hdr->args.fh : &nfsi->fh;
1071fd2b6121SChuck Lever 
1072fd2b6121SChuck Lever 			__entry->status = task->tk_status;
1073fd2b6121SChuck Lever 			__entry->offset = hdr->args.offset;
1074fd2b6121SChuck Lever 			__entry->arg_count = hdr->args.count;
1075fd2b6121SChuck Lever 			__entry->res_count = hdr->res.count;
1076fd2b6121SChuck Lever 			__entry->eof = hdr->res.eof;
1077fd2b6121SChuck Lever 			__entry->dev = inode->i_sb->s_dev;
1078fd2b6121SChuck Lever 			__entry->fileid = nfsi->fileid;
1079fd2b6121SChuck Lever 			__entry->fhandle = nfs_fhandle_hash(fh);
1080fd2b6121SChuck Lever 		),
1081fd2b6121SChuck Lever 
1082fd2b6121SChuck Lever 		TP_printk(
1083fd2b6121SChuck Lever 			"fileid=%02x:%02x:%llu fhandle=0x%08x "
1084fd2b6121SChuck Lever 			"offset=%lld count=%u res=%u status=%d%s",
1085fd2b6121SChuck Lever 			MAJOR(__entry->dev), MINOR(__entry->dev),
1086fd2b6121SChuck Lever 			(unsigned long long)__entry->fileid,
1087fd2b6121SChuck Lever 			__entry->fhandle,
1088fd2b6121SChuck Lever 			(long long)__entry->offset, __entry->arg_count,
1089fd2b6121SChuck Lever 			__entry->res_count, __entry->status,
1090fd2b6121SChuck Lever 			__entry->eof ? " eof" : ""
1091fd2b6121SChuck Lever 		)
1092fd2b6121SChuck Lever );
1093fd2b6121SChuck Lever 
1094cd2ed9bdSChuck Lever TRACE_EVENT(nfs_pgio_error,
1095cd2ed9bdSChuck Lever 	TP_PROTO(
1096cd2ed9bdSChuck Lever 		const struct nfs_pgio_header *hdr,
1097cd2ed9bdSChuck Lever 		int error,
1098cd2ed9bdSChuck Lever 		loff_t pos
1099cd2ed9bdSChuck Lever 	),
1100cd2ed9bdSChuck Lever 
1101cd2ed9bdSChuck Lever 	TP_ARGS(hdr, error, pos),
1102cd2ed9bdSChuck Lever 
1103cd2ed9bdSChuck Lever 	TP_STRUCT__entry(
1104cd2ed9bdSChuck Lever 		__field(dev_t, dev)
1105cd2ed9bdSChuck Lever 		__field(u32, fhandle)
1106cd2ed9bdSChuck Lever 		__field(u64, fileid)
1107cd2ed9bdSChuck Lever 		__field(loff_t, offset)
1108cd2ed9bdSChuck Lever 		__field(u32, arg_count)
1109cd2ed9bdSChuck Lever 		__field(u32, res_count)
1110cd2ed9bdSChuck Lever 		__field(loff_t, pos)
1111cd2ed9bdSChuck Lever 		__field(int, status)
1112cd2ed9bdSChuck Lever 	),
1113cd2ed9bdSChuck Lever 
1114cd2ed9bdSChuck Lever 	TP_fast_assign(
1115cd2ed9bdSChuck Lever 		const struct inode *inode = hdr->inode;
1116cd2ed9bdSChuck Lever 		const struct nfs_inode *nfsi = NFS_I(inode);
1117cd2ed9bdSChuck Lever 		const struct nfs_fh *fh = hdr->args.fh ?
1118cd2ed9bdSChuck Lever 					  hdr->args.fh : &nfsi->fh;
1119cd2ed9bdSChuck Lever 
1120cd2ed9bdSChuck Lever 		__entry->status = error;
1121cd2ed9bdSChuck Lever 		__entry->offset = hdr->args.offset;
1122cd2ed9bdSChuck Lever 		__entry->arg_count = hdr->args.count;
1123cd2ed9bdSChuck Lever 		__entry->res_count = hdr->res.count;
1124cd2ed9bdSChuck Lever 		__entry->dev = inode->i_sb->s_dev;
1125cd2ed9bdSChuck Lever 		__entry->fileid = nfsi->fileid;
1126cd2ed9bdSChuck Lever 		__entry->fhandle = nfs_fhandle_hash(fh);
1127cd2ed9bdSChuck Lever 	),
1128cd2ed9bdSChuck Lever 
1129cd2ed9bdSChuck Lever 	TP_printk("fileid=%02x:%02x:%llu fhandle=0x%08x "
1130cd2ed9bdSChuck Lever 		  "offset=%lld count=%u res=%u pos=%llu status=%d",
1131cd2ed9bdSChuck Lever 		MAJOR(__entry->dev), MINOR(__entry->dev),
1132cd2ed9bdSChuck Lever 		(unsigned long long)__entry->fileid, __entry->fhandle,
1133cd2ed9bdSChuck Lever 		(long long)__entry->offset, __entry->arg_count, __entry->res_count,
1134cd2ed9bdSChuck Lever 		__entry->pos, __entry->status
1135cd2ed9bdSChuck Lever 	)
1136cd2ed9bdSChuck Lever );
1137cd2ed9bdSChuck Lever 
11388224b273SChuck Lever TRACE_EVENT(nfs_initiate_write,
11398224b273SChuck Lever 		TP_PROTO(
11405bb2a7cbSTrond Myklebust 			const struct nfs_pgio_header *hdr
11418224b273SChuck Lever 		),
11428224b273SChuck Lever 
11435bb2a7cbSTrond Myklebust 		TP_ARGS(hdr),
11448224b273SChuck Lever 
11458224b273SChuck Lever 		TP_STRUCT__entry(
11468224b273SChuck Lever 			__field(dev_t, dev)
11478224b273SChuck Lever 			__field(u32, fhandle)
11488224b273SChuck Lever 			__field(u64, fileid)
11495bb2a7cbSTrond Myklebust 			__field(loff_t, offset)
11505bb2a7cbSTrond Myklebust 			__field(u32, count)
1151*8791545eSChuck Lever 			__field(unsigned long, stable)
11528224b273SChuck Lever 		),
11538224b273SChuck Lever 
11548224b273SChuck Lever 		TP_fast_assign(
11555bb2a7cbSTrond Myklebust 			const struct inode *inode = hdr->inode;
11568224b273SChuck Lever 			const struct nfs_inode *nfsi = NFS_I(inode);
11575bb2a7cbSTrond Myklebust 			const struct nfs_fh *fh = hdr->args.fh ?
11585bb2a7cbSTrond Myklebust 						  hdr->args.fh : &nfsi->fh;
11598224b273SChuck Lever 
11605bb2a7cbSTrond Myklebust 			__entry->offset = hdr->args.offset;
11615bb2a7cbSTrond Myklebust 			__entry->count = hdr->args.count;
11625bb2a7cbSTrond Myklebust 			__entry->stable = hdr->args.stable;
11638224b273SChuck Lever 			__entry->dev = inode->i_sb->s_dev;
11648224b273SChuck Lever 			__entry->fileid = nfsi->fileid;
11655bb2a7cbSTrond Myklebust 			__entry->fhandle = nfs_fhandle_hash(fh);
11668224b273SChuck Lever 		),
11678224b273SChuck Lever 
11688224b273SChuck Lever 		TP_printk(
11698224b273SChuck Lever 			"fileid=%02x:%02x:%llu fhandle=0x%08x "
11705bb2a7cbSTrond Myklebust 			"offset=%lld count=%u stable=%s",
11718224b273SChuck Lever 			MAJOR(__entry->dev), MINOR(__entry->dev),
11728224b273SChuck Lever 			(unsigned long long)__entry->fileid,
11738224b273SChuck Lever 			__entry->fhandle,
11745bb2a7cbSTrond Myklebust 			(long long)__entry->offset, __entry->count,
1175*8791545eSChuck Lever 			show_nfs_stable_how(__entry->stable)
11768224b273SChuck Lever 		)
11778224b273SChuck Lever );
11788224b273SChuck Lever 
11798224b273SChuck Lever TRACE_EVENT(nfs_writeback_done,
11808224b273SChuck Lever 		TP_PROTO(
11815bb2a7cbSTrond Myklebust 			const struct rpc_task *task,
11825bb2a7cbSTrond Myklebust 			const struct nfs_pgio_header *hdr
11838224b273SChuck Lever 		),
11848224b273SChuck Lever 
11855bb2a7cbSTrond Myklebust 		TP_ARGS(task, hdr),
11868224b273SChuck Lever 
11878224b273SChuck Lever 		TP_STRUCT__entry(
11888224b273SChuck Lever 			__field(dev_t, dev)
11898224b273SChuck Lever 			__field(u32, fhandle)
11908224b273SChuck Lever 			__field(u64, fileid)
11915bb2a7cbSTrond Myklebust 			__field(loff_t, offset)
11925bb2a7cbSTrond Myklebust 			__field(u32, arg_count)
11935bb2a7cbSTrond Myklebust 			__field(u32, res_count)
11945bb2a7cbSTrond Myklebust 			__field(int, status)
1195*8791545eSChuck Lever 			__field(unsigned long, stable)
11965bb2a7cbSTrond Myklebust 			__array(char, verifier, NFS4_VERIFIER_SIZE)
11978224b273SChuck Lever 		),
11988224b273SChuck Lever 
11998224b273SChuck Lever 		TP_fast_assign(
12005bb2a7cbSTrond Myklebust 			const struct inode *inode = hdr->inode;
12018224b273SChuck Lever 			const struct nfs_inode *nfsi = NFS_I(inode);
12025bb2a7cbSTrond Myklebust 			const struct nfs_fh *fh = hdr->args.fh ?
12035bb2a7cbSTrond Myklebust 						  hdr->args.fh : &nfsi->fh;
12045bb2a7cbSTrond Myklebust 			const struct nfs_writeverf *verf = hdr->res.verf;
12058224b273SChuck Lever 
12065bb2a7cbSTrond Myklebust 			__entry->status = task->tk_status;
12075bb2a7cbSTrond Myklebust 			__entry->offset = hdr->args.offset;
12085bb2a7cbSTrond Myklebust 			__entry->arg_count = hdr->args.count;
12095bb2a7cbSTrond Myklebust 			__entry->res_count = hdr->res.count;
12105bb2a7cbSTrond Myklebust 			__entry->stable = verf->committed;
12115bb2a7cbSTrond Myklebust 			memcpy(__entry->verifier,
12125bb2a7cbSTrond Myklebust 				&verf->verifier,
12135bb2a7cbSTrond Myklebust 				NFS4_VERIFIER_SIZE);
12148224b273SChuck Lever 			__entry->dev = inode->i_sb->s_dev;
12158224b273SChuck Lever 			__entry->fileid = nfsi->fileid;
12165bb2a7cbSTrond Myklebust 			__entry->fhandle = nfs_fhandle_hash(fh);
12178224b273SChuck Lever 		),
12188224b273SChuck Lever 
12198224b273SChuck Lever 		TP_printk(
12208224b273SChuck Lever 			"fileid=%02x:%02x:%llu fhandle=0x%08x "
12215bb2a7cbSTrond Myklebust 			"offset=%lld count=%u res=%u status=%d stable=%s "
12225bb2a7cbSTrond Myklebust 			"verifier=%s",
12238224b273SChuck Lever 			MAJOR(__entry->dev), MINOR(__entry->dev),
12248224b273SChuck Lever 			(unsigned long long)__entry->fileid,
12258224b273SChuck Lever 			__entry->fhandle,
12265bb2a7cbSTrond Myklebust 			(long long)__entry->offset, __entry->arg_count,
12275bb2a7cbSTrond Myklebust 			__entry->res_count, __entry->status,
1228*8791545eSChuck Lever 			show_nfs_stable_how(__entry->stable),
1229*8791545eSChuck Lever 			show_nfs4_verifier(__entry->verifier)
12308224b273SChuck Lever 		)
12318224b273SChuck Lever );
12328224b273SChuck Lever 
1233861e1671SChuck Lever DECLARE_EVENT_CLASS(nfs_page_error_class,
1234861e1671SChuck Lever 		TP_PROTO(
1235861e1671SChuck Lever 			const struct nfs_page *req,
1236861e1671SChuck Lever 			int error
1237861e1671SChuck Lever 		),
1238861e1671SChuck Lever 
1239861e1671SChuck Lever 		TP_ARGS(req, error),
1240861e1671SChuck Lever 
1241861e1671SChuck Lever 		TP_STRUCT__entry(
1242861e1671SChuck Lever 			__field(const void *, req)
1243861e1671SChuck Lever 			__field(pgoff_t, index)
1244861e1671SChuck Lever 			__field(unsigned int, offset)
1245861e1671SChuck Lever 			__field(unsigned int, pgbase)
1246861e1671SChuck Lever 			__field(unsigned int, bytes)
1247861e1671SChuck Lever 			__field(int, error)
1248861e1671SChuck Lever 		),
1249861e1671SChuck Lever 
1250861e1671SChuck Lever 		TP_fast_assign(
1251861e1671SChuck Lever 			__entry->req = req;
1252861e1671SChuck Lever 			__entry->index = req->wb_index;
1253861e1671SChuck Lever 			__entry->offset = req->wb_offset;
1254861e1671SChuck Lever 			__entry->pgbase = req->wb_pgbase;
1255861e1671SChuck Lever 			__entry->bytes = req->wb_bytes;
1256861e1671SChuck Lever 			__entry->error = error;
1257861e1671SChuck Lever 		),
1258861e1671SChuck Lever 
1259861e1671SChuck Lever 		TP_printk(
1260861e1671SChuck Lever 			"req=%p index=%lu offset=%u pgbase=%u bytes=%u error=%d",
1261861e1671SChuck Lever 			__entry->req, __entry->index, __entry->offset,
1262861e1671SChuck Lever 			__entry->pgbase, __entry->bytes, __entry->error
1263861e1671SChuck Lever 		)
1264861e1671SChuck Lever );
1265861e1671SChuck Lever 
1266861e1671SChuck Lever #define DEFINE_NFS_PAGEERR_EVENT(name) \
1267861e1671SChuck Lever 	DEFINE_EVENT(nfs_page_error_class, name, \
1268861e1671SChuck Lever 			TP_PROTO( \
1269861e1671SChuck Lever 				const struct nfs_page *req, \
1270861e1671SChuck Lever 				int error \
1271861e1671SChuck Lever 			), \
1272861e1671SChuck Lever 			TP_ARGS(req, error))
1273861e1671SChuck Lever 
1274861e1671SChuck Lever DEFINE_NFS_PAGEERR_EVENT(nfs_write_error);
1275861e1671SChuck Lever DEFINE_NFS_PAGEERR_EVENT(nfs_comp_error);
1276861e1671SChuck Lever DEFINE_NFS_PAGEERR_EVENT(nfs_commit_error);
1277861e1671SChuck Lever 
12788224b273SChuck Lever TRACE_EVENT(nfs_initiate_commit,
12798224b273SChuck Lever 		TP_PROTO(
12808224b273SChuck Lever 			const struct nfs_commit_data *data
12818224b273SChuck Lever 		),
12828224b273SChuck Lever 
12838224b273SChuck Lever 		TP_ARGS(data),
12848224b273SChuck Lever 
12858224b273SChuck Lever 		TP_STRUCT__entry(
12868224b273SChuck Lever 			__field(dev_t, dev)
12878224b273SChuck Lever 			__field(u32, fhandle)
12888224b273SChuck Lever 			__field(u64, fileid)
12897bdd297eSTrond Myklebust 			__field(loff_t, offset)
12907bdd297eSTrond Myklebust 			__field(u32, count)
12918224b273SChuck Lever 		),
12928224b273SChuck Lever 
12938224b273SChuck Lever 		TP_fast_assign(
12948224b273SChuck Lever 			const struct inode *inode = data->inode;
12958224b273SChuck Lever 			const struct nfs_inode *nfsi = NFS_I(inode);
12967bdd297eSTrond Myklebust 			const struct nfs_fh *fh = data->args.fh ?
12977bdd297eSTrond Myklebust 						  data->args.fh : &nfsi->fh;
12988224b273SChuck Lever 
12998224b273SChuck Lever 			__entry->offset = data->args.offset;
13008224b273SChuck Lever 			__entry->count = data->args.count;
13018224b273SChuck Lever 			__entry->dev = inode->i_sb->s_dev;
13028224b273SChuck Lever 			__entry->fileid = nfsi->fileid;
13037bdd297eSTrond Myklebust 			__entry->fhandle = nfs_fhandle_hash(fh);
13048224b273SChuck Lever 		),
13058224b273SChuck Lever 
13068224b273SChuck Lever 		TP_printk(
13078224b273SChuck Lever 			"fileid=%02x:%02x:%llu fhandle=0x%08x "
13087bdd297eSTrond Myklebust 			"offset=%lld count=%u",
13098224b273SChuck Lever 			MAJOR(__entry->dev), MINOR(__entry->dev),
13108224b273SChuck Lever 			(unsigned long long)__entry->fileid,
13118224b273SChuck Lever 			__entry->fhandle,
13127bdd297eSTrond Myklebust 			(long long)__entry->offset, __entry->count
13138224b273SChuck Lever 		)
13148224b273SChuck Lever );
13158224b273SChuck Lever 
13168224b273SChuck Lever TRACE_EVENT(nfs_commit_done,
13178224b273SChuck Lever 		TP_PROTO(
13187bdd297eSTrond Myklebust 			const struct rpc_task *task,
13198224b273SChuck Lever 			const struct nfs_commit_data *data
13208224b273SChuck Lever 		),
13218224b273SChuck Lever 
13227bdd297eSTrond Myklebust 		TP_ARGS(task, data),
13238224b273SChuck Lever 
13248224b273SChuck Lever 		TP_STRUCT__entry(
13258224b273SChuck Lever 			__field(dev_t, dev)
13268224b273SChuck Lever 			__field(u32, fhandle)
13278224b273SChuck Lever 			__field(u64, fileid)
13287bdd297eSTrond Myklebust 			__field(loff_t, offset)
13297bdd297eSTrond Myklebust 			__field(int, status)
1330*8791545eSChuck Lever 			__field(unsigned long, stable)
13317bdd297eSTrond Myklebust 			__array(char, verifier, NFS4_VERIFIER_SIZE)
13328224b273SChuck Lever 		),
13338224b273SChuck Lever 
13348224b273SChuck Lever 		TP_fast_assign(
13358224b273SChuck Lever 			const struct inode *inode = data->inode;
13368224b273SChuck Lever 			const struct nfs_inode *nfsi = NFS_I(inode);
13377bdd297eSTrond Myklebust 			const struct nfs_fh *fh = data->args.fh ?
13387bdd297eSTrond Myklebust 						  data->args.fh : &nfsi->fh;
13397bdd297eSTrond Myklebust 			const struct nfs_writeverf *verf = data->res.verf;
13408224b273SChuck Lever 
13417bdd297eSTrond Myklebust 			__entry->status = task->tk_status;
13428224b273SChuck Lever 			__entry->offset = data->args.offset;
13437bdd297eSTrond Myklebust 			__entry->stable = verf->committed;
13447bdd297eSTrond Myklebust 			memcpy(__entry->verifier,
13457bdd297eSTrond Myklebust 				&verf->verifier,
13467bdd297eSTrond Myklebust 				NFS4_VERIFIER_SIZE);
13478224b273SChuck Lever 			__entry->dev = inode->i_sb->s_dev;
13488224b273SChuck Lever 			__entry->fileid = nfsi->fileid;
13497bdd297eSTrond Myklebust 			__entry->fhandle = nfs_fhandle_hash(fh);
13508224b273SChuck Lever 		),
13518224b273SChuck Lever 
13528224b273SChuck Lever 		TP_printk(
13538224b273SChuck Lever 			"fileid=%02x:%02x:%llu fhandle=0x%08x "
13547bdd297eSTrond Myklebust 			"offset=%lld status=%d stable=%s verifier=%s",
13558224b273SChuck Lever 			MAJOR(__entry->dev), MINOR(__entry->dev),
13568224b273SChuck Lever 			(unsigned long long)__entry->fileid,
13578224b273SChuck Lever 			__entry->fhandle,
13587bdd297eSTrond Myklebust 			(long long)__entry->offset, __entry->status,
1359*8791545eSChuck Lever 			show_nfs_stable_how(__entry->stable),
1360*8791545eSChuck Lever 			show_nfs4_verifier(__entry->verifier)
13618224b273SChuck Lever 		)
13628224b273SChuck Lever );
13638224b273SChuck Lever 
136443622eabSTrond Myklebust TRACE_EVENT(nfs_fh_to_dentry,
136543622eabSTrond Myklebust 		TP_PROTO(
136643622eabSTrond Myklebust 			const struct super_block *sb,
136743622eabSTrond Myklebust 			const struct nfs_fh *fh,
136843622eabSTrond Myklebust 			u64 fileid,
136943622eabSTrond Myklebust 			int error
137043622eabSTrond Myklebust 		),
137143622eabSTrond Myklebust 
137243622eabSTrond Myklebust 		TP_ARGS(sb, fh, fileid, error),
137343622eabSTrond Myklebust 
137443622eabSTrond Myklebust 		TP_STRUCT__entry(
137543622eabSTrond Myklebust 			__field(int, error)
137643622eabSTrond Myklebust 			__field(dev_t, dev)
137743622eabSTrond Myklebust 			__field(u32, fhandle)
137843622eabSTrond Myklebust 			__field(u64, fileid)
137943622eabSTrond Myklebust 		),
138043622eabSTrond Myklebust 
138143622eabSTrond Myklebust 		TP_fast_assign(
138243622eabSTrond Myklebust 			__entry->error = error;
138343622eabSTrond Myklebust 			__entry->dev = sb->s_dev;
138443622eabSTrond Myklebust 			__entry->fileid = fileid;
138543622eabSTrond Myklebust 			__entry->fhandle = nfs_fhandle_hash(fh);
138643622eabSTrond Myklebust 		),
138743622eabSTrond Myklebust 
138843622eabSTrond Myklebust 		TP_printk(
138943622eabSTrond Myklebust 			"error=%d fileid=%02x:%02x:%llu fhandle=0x%08x ",
139043622eabSTrond Myklebust 			__entry->error,
139143622eabSTrond Myklebust 			MAJOR(__entry->dev), MINOR(__entry->dev),
139243622eabSTrond Myklebust 			(unsigned long long)__entry->fileid,
139343622eabSTrond Myklebust 			__entry->fhandle
139443622eabSTrond Myklebust 		)
139543622eabSTrond Myklebust );
139643622eabSTrond Myklebust 
13973d66bae1STrond Myklebust DECLARE_EVENT_CLASS(nfs_xdr_event,
1398f23f6584SChuck Lever 		TP_PROTO(
139962a92ba9SChuck Lever 			const struct xdr_stream *xdr,
1400f23f6584SChuck Lever 			int error
1401f23f6584SChuck Lever 		),
1402f23f6584SChuck Lever 
140362a92ba9SChuck Lever 		TP_ARGS(xdr, error),
1404f23f6584SChuck Lever 
1405f23f6584SChuck Lever 		TP_STRUCT__entry(
140662a92ba9SChuck Lever 			__field(unsigned int, task_id)
140762a92ba9SChuck Lever 			__field(unsigned int, client_id)
140862a92ba9SChuck Lever 			__field(u32, xid)
14095be59458SChuck Lever 			__field(int, version)
141038a638a7SChuck Lever 			__field(unsigned long, error)
14115be59458SChuck Lever 			__string(program,
14125be59458SChuck Lever 				 xdr->rqst->rq_task->tk_client->cl_program->name)
14135be59458SChuck Lever 			__string(procedure,
14145be59458SChuck Lever 				 xdr->rqst->rq_task->tk_msg.rpc_proc->p_name)
1415f23f6584SChuck Lever 		),
1416f23f6584SChuck Lever 
1417f23f6584SChuck Lever 		TP_fast_assign(
141862a92ba9SChuck Lever 			const struct rpc_rqst *rqstp = xdr->rqst;
141962a92ba9SChuck Lever 			const struct rpc_task *task = rqstp->rq_task;
142062a92ba9SChuck Lever 
142162a92ba9SChuck Lever 			__entry->task_id = task->tk_pid;
142262a92ba9SChuck Lever 			__entry->client_id = task->tk_client->cl_clid;
142362a92ba9SChuck Lever 			__entry->xid = be32_to_cpu(rqstp->rq_xid);
14245be59458SChuck Lever 			__entry->version = task->tk_client->cl_vers;
1425f23f6584SChuck Lever 			__entry->error = error;
14265be59458SChuck Lever 			__assign_str(program,
142778c14b38SJoe Perches 				     task->tk_client->cl_program->name);
142878c14b38SJoe Perches 			__assign_str(procedure, task->tk_msg.rpc_proc->p_name);
1429f23f6584SChuck Lever 		),
1430f23f6584SChuck Lever 
1431b4776a34SChuck Lever 		TP_printk(SUNRPC_TRACE_TASK_SPECIFIER
1432b4776a34SChuck Lever 			  " xid=0x%08x %sv%d %s error=%ld (%s)",
143362a92ba9SChuck Lever 			__entry->task_id, __entry->client_id, __entry->xid,
14345be59458SChuck Lever 			__get_str(program), __entry->version,
14355be59458SChuck Lever 			__get_str(procedure), -__entry->error,
1436*8791545eSChuck Lever 			show_nfs_status(__entry->error)
1437f23f6584SChuck Lever 		)
1438f23f6584SChuck Lever );
14393d66bae1STrond Myklebust #define DEFINE_NFS_XDR_EVENT(name) \
14403d66bae1STrond Myklebust 	DEFINE_EVENT(nfs_xdr_event, name, \
14413d66bae1STrond Myklebust 			TP_PROTO( \
14423d66bae1STrond Myklebust 				const struct xdr_stream *xdr, \
14433d66bae1STrond Myklebust 				int error \
14443d66bae1STrond Myklebust 			), \
14453d66bae1STrond Myklebust 			TP_ARGS(xdr, error))
14463d66bae1STrond Myklebust DEFINE_NFS_XDR_EVENT(nfs_xdr_status);
1447eb3d58c6STrond Myklebust DEFINE_NFS_XDR_EVENT(nfs_xdr_bad_filehandle);
1448f23f6584SChuck Lever 
1449f4ce1299STrond Myklebust #endif /* _TRACE_NFS_H */
1450f4ce1299STrond Myklebust 
1451f4ce1299STrond Myklebust #undef TRACE_INCLUDE_PATH
1452f4ce1299STrond Myklebust #define TRACE_INCLUDE_PATH .
1453f4ce1299STrond Myklebust #define TRACE_INCLUDE_FILE nfstrace
1454f4ce1299STrond Myklebust /* This part must be outside protection */
1455f4ce1299STrond Myklebust #include <trace/define_trace.h>
1456