xref: /linux/fs/nfs/nfstrace.h (revision af0bc3ac9a9e830cb52b718ecb237c4e76a466be)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * Copyright (c) 2013 Trond Myklebust <Trond.Myklebust@netapp.com>
4  */
5 #undef TRACE_SYSTEM
6 #define TRACE_SYSTEM nfs
7 
8 #if !defined(_TRACE_NFS_H) || defined(TRACE_HEADER_MULTI_READ)
9 #define _TRACE_NFS_H
10 
11 #include <linux/tracepoint.h>
12 #include <linux/iversion.h>
13 
14 #include <trace/misc/fs.h>
15 #include <trace/misc/nfs.h>
16 #include <trace/misc/sunrpc.h>
17 
18 #define nfs_show_cache_validity(v) \
19 	__print_flags(v, "|", \
20 			{ NFS_INO_INVALID_DATA, "INVALID_DATA" }, \
21 			{ NFS_INO_INVALID_ATIME, "INVALID_ATIME" }, \
22 			{ NFS_INO_INVALID_ACCESS, "INVALID_ACCESS" }, \
23 			{ NFS_INO_INVALID_ACL, "INVALID_ACL" }, \
24 			{ NFS_INO_REVAL_FORCED, "REVAL_FORCED" }, \
25 			{ NFS_INO_INVALID_LABEL, "INVALID_LABEL" }, \
26 			{ NFS_INO_INVALID_CHANGE, "INVALID_CHANGE" }, \
27 			{ NFS_INO_INVALID_CTIME, "INVALID_CTIME" }, \
28 			{ NFS_INO_INVALID_MTIME, "INVALID_MTIME" }, \
29 			{ NFS_INO_INVALID_SIZE, "INVALID_SIZE" }, \
30 			{ NFS_INO_INVALID_OTHER, "INVALID_OTHER" }, \
31 			{ NFS_INO_DATA_INVAL_DEFER, "DATA_INVAL_DEFER" }, \
32 			{ NFS_INO_INVALID_BLOCKS, "INVALID_BLOCKS" }, \
33 			{ NFS_INO_INVALID_XATTR, "INVALID_XATTR" }, \
34 			{ NFS_INO_INVALID_NLINK, "INVALID_NLINK" }, \
35 			{ NFS_INO_INVALID_MODE, "INVALID_MODE" }, \
36 			{ NFS_INO_INVALID_BTIME, "INVALID_BTIME" })
37 
38 #define nfs_show_nfsi_flags(v) \
39 	__print_flags(v, "|", \
40 			{ BIT(NFS_INO_STALE), "STALE" }, \
41 			{ BIT(NFS_INO_ACL_LRU_SET), "ACL_LRU_SET" }, \
42 			{ BIT(NFS_INO_INVALIDATING), "INVALIDATING" }, \
43 			{ BIT(NFS_INO_LAYOUTCOMMIT), "NEED_LAYOUTCOMMIT" }, \
44 			{ BIT(NFS_INO_LAYOUTCOMMITTING), "LAYOUTCOMMIT" }, \
45 			{ BIT(NFS_INO_LAYOUTSTATS), "LAYOUTSTATS" }, \
46 			{ BIT(NFS_INO_ODIRECT), "ODIRECT" })
47 
48 #define nfs_show_wb_flags(v) \
49 	__print_flags(v, "|", \
50 			{ BIT(PG_BUSY), "BUSY" }, \
51 			{ BIT(PG_MAPPED), "MAPPED" }, \
52 			{ BIT(PG_FOLIO), "FOLIO" }, \
53 			{ BIT(PG_CLEAN), "CLEAN" }, \
54 			{ BIT(PG_COMMIT_TO_DS), "COMMIT_TO_DS" }, \
55 			{ BIT(PG_INODE_REF), "INODE_REF" }, \
56 			{ BIT(PG_HEADLOCK), "HEADLOCK" }, \
57 			{ BIT(PG_TEARDOWN), "TEARDOWN" }, \
58 			{ BIT(PG_UNLOCKPAGE), "UNLOCKPAGE" }, \
59 			{ BIT(PG_UPTODATE), "UPTODATE" }, \
60 			{ BIT(PG_WB_END), "WB_END" }, \
61 			{ BIT(PG_REMOVE), "REMOVE" }, \
62 			{ BIT(PG_CONTENDED1), "CONTENDED1" }, \
63 			{ BIT(PG_CONTENDED2), "CONTENDED2" })
64 
65 DECLARE_EVENT_CLASS(nfs_inode_event,
66 		TP_PROTO(
67 			const struct inode *inode
68 		),
69 
70 		TP_ARGS(inode),
71 
72 		TP_STRUCT__entry(
73 			__field(dev_t, dev)
74 			__field(u32, fhandle)
75 			__field(u64, fileid)
76 			__field(u64, version)
77 			__field(unsigned long, cache_validity)
78 		),
79 
80 		TP_fast_assign(
81 			const struct nfs_inode *nfsi = NFS_I(inode);
82 			__entry->dev = inode->i_sb->s_dev;
83 			__entry->fileid = nfsi->fileid;
84 			__entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
85 			__entry->version = inode_peek_iversion_raw(inode);
86 			__entry->cache_validity = nfsi->cache_validity;
87 		),
88 
89 		TP_printk(
90 			"fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu cache_validity=0x%lx (%s)",
91 			MAJOR(__entry->dev), MINOR(__entry->dev),
92 			(unsigned long long)__entry->fileid,
93 			__entry->fhandle,
94 			(unsigned long long)__entry->version,
95 			__entry->cache_validity,
96 			nfs_show_cache_validity(__entry->cache_validity)
97 		)
98 );
99 
100 DECLARE_EVENT_CLASS(nfs_inode_event_done,
101 		TP_PROTO(
102 			const struct inode *inode,
103 			int error
104 		),
105 
106 		TP_ARGS(inode, error),
107 
108 		TP_STRUCT__entry(
109 			__field(unsigned long, error)
110 			__field(dev_t, dev)
111 			__field(u32, fhandle)
112 			__field(unsigned char, type)
113 			__field(u64, fileid)
114 			__field(u64, version)
115 			__field(loff_t, size)
116 			__field(unsigned long, nfsi_flags)
117 			__field(unsigned long, cache_validity)
118 		),
119 
120 		TP_fast_assign(
121 			const struct nfs_inode *nfsi = NFS_I(inode);
122 			__entry->error = error < 0 ? -error : 0;
123 			__entry->dev = inode->i_sb->s_dev;
124 			__entry->fileid = nfsi->fileid;
125 			__entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
126 			__entry->type = nfs_umode_to_dtype(inode->i_mode);
127 			__entry->version = inode_peek_iversion_raw(inode);
128 			__entry->size = i_size_read(inode);
129 			__entry->nfsi_flags = nfsi->flags;
130 			__entry->cache_validity = nfsi->cache_validity;
131 		),
132 
133 		TP_printk(
134 			"error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x "
135 			"type=%u (%s) version=%llu size=%lld "
136 			"cache_validity=0x%lx (%s) nfs_flags=0x%lx (%s)",
137 			-__entry->error, show_nfs_status(__entry->error),
138 			MAJOR(__entry->dev), MINOR(__entry->dev),
139 			(unsigned long long)__entry->fileid,
140 			__entry->fhandle,
141 			__entry->type,
142 			show_fs_dirent_type(__entry->type),
143 			(unsigned long long)__entry->version,
144 			(long long)__entry->size,
145 			__entry->cache_validity,
146 			nfs_show_cache_validity(__entry->cache_validity),
147 			__entry->nfsi_flags,
148 			nfs_show_nfsi_flags(__entry->nfsi_flags)
149 		)
150 );
151 
152 #define DEFINE_NFS_INODE_EVENT(name) \
153 	DEFINE_EVENT(nfs_inode_event, name, \
154 			TP_PROTO( \
155 				const struct inode *inode \
156 			), \
157 			TP_ARGS(inode))
158 #define DEFINE_NFS_INODE_EVENT_DONE(name) \
159 	DEFINE_EVENT(nfs_inode_event_done, name, \
160 			TP_PROTO( \
161 				const struct inode *inode, \
162 				int error \
163 			), \
164 			TP_ARGS(inode, error))
165 DEFINE_NFS_INODE_EVENT(nfs_set_inode_stale);
166 DEFINE_NFS_INODE_EVENT(nfs_refresh_inode_enter);
167 DEFINE_NFS_INODE_EVENT_DONE(nfs_refresh_inode_exit);
168 DEFINE_NFS_INODE_EVENT(nfs_revalidate_inode_enter);
169 DEFINE_NFS_INODE_EVENT_DONE(nfs_revalidate_inode_exit);
170 DEFINE_NFS_INODE_EVENT(nfs_invalidate_mapping_enter);
171 DEFINE_NFS_INODE_EVENT_DONE(nfs_invalidate_mapping_exit);
172 DEFINE_NFS_INODE_EVENT(nfs_getattr_enter);
173 DEFINE_NFS_INODE_EVENT_DONE(nfs_getattr_exit);
174 DEFINE_NFS_INODE_EVENT(nfs_setattr_enter);
175 DEFINE_NFS_INODE_EVENT_DONE(nfs_setattr_exit);
176 DEFINE_NFS_INODE_EVENT(nfs_writeback_inode_enter);
177 DEFINE_NFS_INODE_EVENT_DONE(nfs_writeback_inode_exit);
178 DEFINE_NFS_INODE_EVENT(nfs_fsync_enter);
179 DEFINE_NFS_INODE_EVENT_DONE(nfs_fsync_exit);
180 DEFINE_NFS_INODE_EVENT(nfs_access_enter);
181 DEFINE_NFS_INODE_EVENT_DONE(nfs_set_cache_invalid);
182 DEFINE_NFS_INODE_EVENT(nfs_readdir_force_readdirplus);
183 DEFINE_NFS_INODE_EVENT_DONE(nfs_readdir_cache_fill_done);
184 DEFINE_NFS_INODE_EVENT_DONE(nfs_readdir_uncached_done);
185 
186 TRACE_EVENT(nfs_access_exit,
187 		TP_PROTO(
188 			const struct inode *inode,
189 			unsigned int mask,
190 			unsigned int permitted,
191 			int error
192 		),
193 
194 		TP_ARGS(inode, mask, permitted, error),
195 
196 		TP_STRUCT__entry(
197 			__field(unsigned long, error)
198 			__field(dev_t, dev)
199 			__field(u32, fhandle)
200 			__field(unsigned char, type)
201 			__field(u64, fileid)
202 			__field(u64, version)
203 			__field(loff_t, size)
204 			__field(unsigned long, nfsi_flags)
205 			__field(unsigned long, cache_validity)
206 			__field(unsigned int, mask)
207 			__field(unsigned int, permitted)
208 		),
209 
210 		TP_fast_assign(
211 			const struct nfs_inode *nfsi = NFS_I(inode);
212 			__entry->error = error < 0 ? -error : 0;
213 			__entry->dev = inode->i_sb->s_dev;
214 			__entry->fileid = nfsi->fileid;
215 			__entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
216 			__entry->type = nfs_umode_to_dtype(inode->i_mode);
217 			__entry->version = inode_peek_iversion_raw(inode);
218 			__entry->size = i_size_read(inode);
219 			__entry->nfsi_flags = nfsi->flags;
220 			__entry->cache_validity = nfsi->cache_validity;
221 			__entry->mask = mask;
222 			__entry->permitted = permitted;
223 		),
224 
225 		TP_printk(
226 			"error=%ld (%s) fileid=%02x:%02x:%llu fhandle=0x%08x "
227 			"type=%u (%s) version=%llu size=%lld "
228 			"cache_validity=0x%lx (%s) nfs_flags=0x%lx (%s) "
229 			"mask=0x%x permitted=0x%x",
230 			-__entry->error, show_nfs_status(__entry->error),
231 			MAJOR(__entry->dev), MINOR(__entry->dev),
232 			(unsigned long long)__entry->fileid,
233 			__entry->fhandle,
234 			__entry->type,
235 			show_fs_dirent_type(__entry->type),
236 			(unsigned long long)__entry->version,
237 			(long long)__entry->size,
238 			__entry->cache_validity,
239 			nfs_show_cache_validity(__entry->cache_validity),
240 			__entry->nfsi_flags,
241 			nfs_show_nfsi_flags(__entry->nfsi_flags),
242 			__entry->mask, __entry->permitted
243 		)
244 );
245 
246 DECLARE_EVENT_CLASS(nfs_update_size_class,
247 		TP_PROTO(
248 			const struct inode *inode,
249 			loff_t new_size
250 		),
251 
252 		TP_ARGS(inode, new_size),
253 
254 		TP_STRUCT__entry(
255 			__field(dev_t, dev)
256 			__field(u32, fhandle)
257 			__field(u64, fileid)
258 			__field(u64, version)
259 			__field(loff_t, cur_size)
260 			__field(loff_t, new_size)
261 		),
262 
263 		TP_fast_assign(
264 			const struct nfs_inode *nfsi = NFS_I(inode);
265 
266 			__entry->dev = inode->i_sb->s_dev;
267 			__entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
268 			__entry->fileid = nfsi->fileid;
269 			__entry->version = inode_peek_iversion_raw(inode);
270 			__entry->cur_size = i_size_read(inode);
271 			__entry->new_size = new_size;
272 		),
273 
274 		TP_printk(
275 			"fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu cursize=%lld newsize=%lld",
276 			MAJOR(__entry->dev), MINOR(__entry->dev),
277 			(unsigned long long)__entry->fileid,
278 			__entry->fhandle, __entry->version,
279 			__entry->cur_size, __entry->new_size
280 		)
281 );
282 
283 #define DEFINE_NFS_UPDATE_SIZE_EVENT(name) \
284 	DEFINE_EVENT(nfs_update_size_class, nfs_size_##name, \
285 			TP_PROTO( \
286 				const struct inode *inode, \
287 				loff_t new_size \
288 			), \
289 			TP_ARGS(inode, new_size))
290 
291 DEFINE_NFS_UPDATE_SIZE_EVENT(truncate);
292 DEFINE_NFS_UPDATE_SIZE_EVENT(truncate_folio);
293 DEFINE_NFS_UPDATE_SIZE_EVENT(wcc);
294 DEFINE_NFS_UPDATE_SIZE_EVENT(update);
295 DEFINE_NFS_UPDATE_SIZE_EVENT(grow);
296 
297 DECLARE_EVENT_CLASS(nfs_inode_range_event,
298 		TP_PROTO(
299 			const struct inode *inode,
300 			loff_t range_start,
301 			loff_t range_end
302 		),
303 
304 		TP_ARGS(inode, range_start, range_end),
305 
306 		TP_STRUCT__entry(
307 			__field(dev_t, dev)
308 			__field(u32, fhandle)
309 			__field(u64, fileid)
310 			__field(u64, version)
311 			__field(loff_t, range_start)
312 			__field(loff_t, range_end)
313 		),
314 
315 		TP_fast_assign(
316 			const struct nfs_inode *nfsi = NFS_I(inode);
317 
318 			__entry->dev = inode->i_sb->s_dev;
319 			__entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
320 			__entry->fileid = nfsi->fileid;
321 			__entry->version = inode_peek_iversion_raw(inode);
322 			__entry->range_start = range_start;
323 			__entry->range_end = range_end;
324 		),
325 
326 		TP_printk(
327 			"fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu "
328 			"range=[%lld, %lld]",
329 			MAJOR(__entry->dev), MINOR(__entry->dev),
330 			(unsigned long long)__entry->fileid,
331 			__entry->fhandle, __entry->version,
332 			__entry->range_start, __entry->range_end
333 		)
334 );
335 
336 #define DEFINE_NFS_INODE_RANGE_EVENT(name) \
337 	DEFINE_EVENT(nfs_inode_range_event, name, \
338 			TP_PROTO( \
339 				const struct inode *inode, \
340 				loff_t range_start, \
341 				loff_t range_end \
342 			), \
343 			TP_ARGS(inode, range_start, range_end))
344 
345 DEFINE_NFS_INODE_RANGE_EVENT(nfs_readdir_invalidate_cache_range);
346 
347 DECLARE_EVENT_CLASS(nfs_readdir_event,
348 		TP_PROTO(
349 			const struct file *file,
350 			const __be32 *verifier,
351 			u64 cookie,
352 			pgoff_t page_index,
353 			unsigned int dtsize
354 		),
355 
356 		TP_ARGS(file, verifier, cookie, page_index, dtsize),
357 
358 		TP_STRUCT__entry(
359 			__field(dev_t, dev)
360 			__field(u32, fhandle)
361 			__field(u64, fileid)
362 			__field(u64, version)
363 			__array(char, verifier, NFS4_VERIFIER_SIZE)
364 			__field(u64, cookie)
365 			__field(pgoff_t, index)
366 			__field(unsigned int, dtsize)
367 		),
368 
369 		TP_fast_assign(
370 			const struct inode *dir = file_inode(file);
371 			const struct nfs_inode *nfsi = NFS_I(dir);
372 
373 			__entry->dev = dir->i_sb->s_dev;
374 			__entry->fileid = nfsi->fileid;
375 			__entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
376 			__entry->version = inode_peek_iversion_raw(dir);
377 			if (cookie != 0)
378 				memcpy(__entry->verifier, verifier,
379 				       NFS4_VERIFIER_SIZE);
380 			else
381 				memset(__entry->verifier, 0,
382 				       NFS4_VERIFIER_SIZE);
383 			__entry->cookie = cookie;
384 			__entry->index = page_index;
385 			__entry->dtsize = dtsize;
386 		),
387 
388 		TP_printk(
389 			"fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu "
390 			"cookie=%s:0x%llx cache_index=%lu dtsize=%u",
391 			MAJOR(__entry->dev), MINOR(__entry->dev),
392 			(unsigned long long)__entry->fileid, __entry->fhandle,
393 			__entry->version, show_nfs4_verifier(__entry->verifier),
394 			(unsigned long long)__entry->cookie, __entry->index,
395 			__entry->dtsize
396 		)
397 );
398 
399 #define DEFINE_NFS_READDIR_EVENT(name) \
400 	DEFINE_EVENT(nfs_readdir_event, name, \
401 			TP_PROTO( \
402 				const struct file *file, \
403 				const __be32 *verifier, \
404 				u64 cookie, \
405 				pgoff_t page_index, \
406 				unsigned int dtsize \
407 				), \
408 			TP_ARGS(file, verifier, cookie, page_index, dtsize))
409 
410 DEFINE_NFS_READDIR_EVENT(nfs_readdir_cache_fill);
411 DEFINE_NFS_READDIR_EVENT(nfs_readdir_uncached);
412 
413 DECLARE_EVENT_CLASS(nfs_lookup_event,
414 		TP_PROTO(
415 			const struct inode *dir,
416 			const struct dentry *dentry,
417 			unsigned int flags
418 		),
419 
420 		TP_ARGS(dir, dentry, flags),
421 
422 		TP_STRUCT__entry(
423 			__field(unsigned long, flags)
424 			__field(dev_t, dev)
425 			__field(u64, dir)
426 			__field(u64, fileid)
427 			__string(name, dentry->d_name.name)
428 		),
429 
430 		TP_fast_assign(
431 			__entry->dev = dir->i_sb->s_dev;
432 			__entry->dir = NFS_FILEID(dir);
433 			__entry->flags = flags;
434 			__entry->fileid = d_is_negative(dentry) ? 0 : NFS_FILEID(d_inode(dentry));
435 			__assign_str(name);
436 		),
437 
438 		TP_printk(
439 			"flags=0x%lx (%s) name=%02x:%02x:%llu/%s fileid=%llu",
440 			__entry->flags,
441 			show_fs_lookup_flags(__entry->flags),
442 			MAJOR(__entry->dev), MINOR(__entry->dev),
443 			(unsigned long long)__entry->dir,
444 			__get_str(name),
445 			__entry->fileid
446 		)
447 );
448 
449 #define DEFINE_NFS_LOOKUP_EVENT(name) \
450 	DEFINE_EVENT(nfs_lookup_event, name, \
451 			TP_PROTO( \
452 				const struct inode *dir, \
453 				const struct dentry *dentry, \
454 				unsigned int flags \
455 			), \
456 			TP_ARGS(dir, dentry, flags))
457 
458 DECLARE_EVENT_CLASS(nfs_lookup_event_done,
459 		TP_PROTO(
460 			const struct inode *dir,
461 			const struct dentry *dentry,
462 			unsigned int flags,
463 			int error
464 		),
465 
466 		TP_ARGS(dir, dentry, flags, error),
467 
468 		TP_STRUCT__entry(
469 			__field(unsigned long, error)
470 			__field(unsigned long, flags)
471 			__field(dev_t, dev)
472 			__field(u64, dir)
473 			__field(u64, fileid)
474 			__string(name, dentry->d_name.name)
475 		),
476 
477 		TP_fast_assign(
478 			__entry->dev = dir->i_sb->s_dev;
479 			__entry->dir = NFS_FILEID(dir);
480 			__entry->error = error < 0 ? -error : 0;
481 			__entry->flags = flags;
482 			__entry->fileid = d_is_negative(dentry) ? 0 : NFS_FILEID(d_inode(dentry));
483 			__assign_str(name);
484 		),
485 
486 		TP_printk(
487 			"error=%ld (%s) flags=0x%lx (%s) name=%02x:%02x:%llu/%s fileid=%llu",
488 			-__entry->error, show_nfs_status(__entry->error),
489 			__entry->flags,
490 			show_fs_lookup_flags(__entry->flags),
491 			MAJOR(__entry->dev), MINOR(__entry->dev),
492 			(unsigned long long)__entry->dir,
493 			__get_str(name),
494 			__entry->fileid
495 		)
496 );
497 
498 #define DEFINE_NFS_LOOKUP_EVENT_DONE(name) \
499 	DEFINE_EVENT(nfs_lookup_event_done, name, \
500 			TP_PROTO( \
501 				const struct inode *dir, \
502 				const struct dentry *dentry, \
503 				unsigned int flags, \
504 				int error \
505 			), \
506 			TP_ARGS(dir, dentry, flags, error))
507 
508 DEFINE_NFS_LOOKUP_EVENT(nfs_lookup_enter);
509 DEFINE_NFS_LOOKUP_EVENT_DONE(nfs_lookup_exit);
510 DEFINE_NFS_LOOKUP_EVENT(nfs_lookup_revalidate_enter);
511 DEFINE_NFS_LOOKUP_EVENT_DONE(nfs_lookup_revalidate_exit);
512 DEFINE_NFS_LOOKUP_EVENT(nfs_readdir_lookup);
513 DEFINE_NFS_LOOKUP_EVENT(nfs_readdir_lookup_revalidate_failed);
514 DEFINE_NFS_LOOKUP_EVENT_DONE(nfs_readdir_lookup_revalidate);
515 
516 TRACE_EVENT(nfs_atomic_open_enter,
517 		TP_PROTO(
518 			const struct inode *dir,
519 			const struct nfs_open_context *ctx,
520 			unsigned int flags
521 		),
522 
523 		TP_ARGS(dir, ctx, flags),
524 
525 		TP_STRUCT__entry(
526 			__field(unsigned long, flags)
527 			__field(unsigned long, fmode)
528 			__field(dev_t, dev)
529 			__field(u64, dir)
530 			__string(name, ctx->dentry->d_name.name)
531 		),
532 
533 		TP_fast_assign(
534 			__entry->dev = dir->i_sb->s_dev;
535 			__entry->dir = NFS_FILEID(dir);
536 			__entry->flags = flags;
537 			__entry->fmode = (__force unsigned long)ctx->mode;
538 			__assign_str(name);
539 		),
540 
541 		TP_printk(
542 			"flags=0x%lx (%s) fmode=%s name=%02x:%02x:%llu/%s",
543 			__entry->flags,
544 			show_fs_fcntl_open_flags(__entry->flags),
545 			show_fs_fmode_flags(__entry->fmode),
546 			MAJOR(__entry->dev), MINOR(__entry->dev),
547 			(unsigned long long)__entry->dir,
548 			__get_str(name)
549 		)
550 );
551 
552 TRACE_EVENT(nfs_atomic_open_exit,
553 		TP_PROTO(
554 			const struct inode *dir,
555 			const struct nfs_open_context *ctx,
556 			unsigned int flags,
557 			int error
558 		),
559 
560 		TP_ARGS(dir, ctx, flags, error),
561 
562 		TP_STRUCT__entry(
563 			__field(unsigned long, error)
564 			__field(unsigned long, flags)
565 			__field(unsigned long, fmode)
566 			__field(dev_t, dev)
567 			__field(u64, dir)
568 			__string(name, ctx->dentry->d_name.name)
569 		),
570 
571 		TP_fast_assign(
572 			__entry->error = -error;
573 			__entry->dev = dir->i_sb->s_dev;
574 			__entry->dir = NFS_FILEID(dir);
575 			__entry->flags = flags;
576 			__entry->fmode = (__force unsigned long)ctx->mode;
577 			__assign_str(name);
578 		),
579 
580 		TP_printk(
581 			"error=%ld (%s) flags=0x%lx (%s) fmode=%s "
582 			"name=%02x:%02x:%llu/%s",
583 			-__entry->error, show_nfs_status(__entry->error),
584 			__entry->flags,
585 			show_fs_fcntl_open_flags(__entry->flags),
586 			show_fs_fmode_flags(__entry->fmode),
587 			MAJOR(__entry->dev), MINOR(__entry->dev),
588 			(unsigned long long)__entry->dir,
589 			__get_str(name)
590 		)
591 );
592 
593 TRACE_EVENT(nfs_create_enter,
594 		TP_PROTO(
595 			const struct inode *dir,
596 			const struct dentry *dentry,
597 			unsigned int flags
598 		),
599 
600 		TP_ARGS(dir, dentry, flags),
601 
602 		TP_STRUCT__entry(
603 			__field(unsigned long, flags)
604 			__field(dev_t, dev)
605 			__field(u64, dir)
606 			__string(name, dentry->d_name.name)
607 		),
608 
609 		TP_fast_assign(
610 			__entry->dev = dir->i_sb->s_dev;
611 			__entry->dir = NFS_FILEID(dir);
612 			__entry->flags = flags;
613 			__assign_str(name);
614 		),
615 
616 		TP_printk(
617 			"flags=0x%lx (%s) name=%02x:%02x:%llu/%s",
618 			__entry->flags,
619 			show_fs_fcntl_open_flags(__entry->flags),
620 			MAJOR(__entry->dev), MINOR(__entry->dev),
621 			(unsigned long long)__entry->dir,
622 			__get_str(name)
623 		)
624 );
625 
626 TRACE_EVENT(nfs_create_exit,
627 		TP_PROTO(
628 			const struct inode *dir,
629 			const struct dentry *dentry,
630 			unsigned int flags,
631 			int error
632 		),
633 
634 		TP_ARGS(dir, dentry, flags, error),
635 
636 		TP_STRUCT__entry(
637 			__field(unsigned long, error)
638 			__field(unsigned long, flags)
639 			__field(dev_t, dev)
640 			__field(u64, dir)
641 			__string(name, dentry->d_name.name)
642 		),
643 
644 		TP_fast_assign(
645 			__entry->error = -error;
646 			__entry->dev = dir->i_sb->s_dev;
647 			__entry->dir = NFS_FILEID(dir);
648 			__entry->flags = flags;
649 			__assign_str(name);
650 		),
651 
652 		TP_printk(
653 			"error=%ld (%s) flags=0x%lx (%s) name=%02x:%02x:%llu/%s",
654 			-__entry->error, show_nfs_status(__entry->error),
655 			__entry->flags,
656 			show_fs_fcntl_open_flags(__entry->flags),
657 			MAJOR(__entry->dev), MINOR(__entry->dev),
658 			(unsigned long long)__entry->dir,
659 			__get_str(name)
660 		)
661 );
662 
663 DECLARE_EVENT_CLASS(nfs_directory_event,
664 		TP_PROTO(
665 			const struct inode *dir,
666 			const struct dentry *dentry
667 		),
668 
669 		TP_ARGS(dir, dentry),
670 
671 		TP_STRUCT__entry(
672 			__field(dev_t, dev)
673 			__field(u64, dir)
674 			__string(name, dentry->d_name.name)
675 		),
676 
677 		TP_fast_assign(
678 			__entry->dev = dir->i_sb->s_dev;
679 			__entry->dir = NFS_FILEID(dir);
680 			__assign_str(name);
681 		),
682 
683 		TP_printk(
684 			"name=%02x:%02x:%llu/%s",
685 			MAJOR(__entry->dev), MINOR(__entry->dev),
686 			(unsigned long long)__entry->dir,
687 			__get_str(name)
688 		)
689 );
690 
691 #define DEFINE_NFS_DIRECTORY_EVENT(name) \
692 	DEFINE_EVENT(nfs_directory_event, name, \
693 			TP_PROTO( \
694 				const struct inode *dir, \
695 				const struct dentry *dentry \
696 			), \
697 			TP_ARGS(dir, dentry))
698 
699 DECLARE_EVENT_CLASS(nfs_directory_event_done,
700 		TP_PROTO(
701 			const struct inode *dir,
702 			const struct dentry *dentry,
703 			int error
704 		),
705 
706 		TP_ARGS(dir, dentry, error),
707 
708 		TP_STRUCT__entry(
709 			__field(unsigned long, error)
710 			__field(dev_t, dev)
711 			__field(u64, dir)
712 			__string(name, dentry->d_name.name)
713 		),
714 
715 		TP_fast_assign(
716 			__entry->dev = dir->i_sb->s_dev;
717 			__entry->dir = NFS_FILEID(dir);
718 			__entry->error = error < 0 ? -error : 0;
719 			__assign_str(name);
720 		),
721 
722 		TP_printk(
723 			"error=%ld (%s) name=%02x:%02x:%llu/%s",
724 			-__entry->error, show_nfs_status(__entry->error),
725 			MAJOR(__entry->dev), MINOR(__entry->dev),
726 			(unsigned long long)__entry->dir,
727 			__get_str(name)
728 		)
729 );
730 
731 #define DEFINE_NFS_DIRECTORY_EVENT_DONE(name) \
732 	DEFINE_EVENT(nfs_directory_event_done, name, \
733 			TP_PROTO( \
734 				const struct inode *dir, \
735 				const struct dentry *dentry, \
736 				int error \
737 			), \
738 			TP_ARGS(dir, dentry, error))
739 
740 DEFINE_NFS_DIRECTORY_EVENT(nfs_mknod_enter);
741 DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_mknod_exit);
742 DEFINE_NFS_DIRECTORY_EVENT(nfs_mkdir_enter);
743 DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_mkdir_exit);
744 DEFINE_NFS_DIRECTORY_EVENT(nfs_rmdir_enter);
745 DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_rmdir_exit);
746 DEFINE_NFS_DIRECTORY_EVENT(nfs_remove_enter);
747 DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_remove_exit);
748 DEFINE_NFS_DIRECTORY_EVENT(nfs_unlink_enter);
749 DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_unlink_exit);
750 DEFINE_NFS_DIRECTORY_EVENT(nfs_symlink_enter);
751 DEFINE_NFS_DIRECTORY_EVENT_DONE(nfs_symlink_exit);
752 
753 TRACE_EVENT(nfs_link_enter,
754 		TP_PROTO(
755 			const struct inode *inode,
756 			const struct inode *dir,
757 			const struct dentry *dentry
758 		),
759 
760 		TP_ARGS(inode, dir, dentry),
761 
762 		TP_STRUCT__entry(
763 			__field(dev_t, dev)
764 			__field(u64, fileid)
765 			__field(u64, dir)
766 			__string(name, dentry->d_name.name)
767 		),
768 
769 		TP_fast_assign(
770 			__entry->dev = inode->i_sb->s_dev;
771 			__entry->fileid = NFS_FILEID(inode);
772 			__entry->dir = NFS_FILEID(dir);
773 			__assign_str(name);
774 		),
775 
776 		TP_printk(
777 			"fileid=%02x:%02x:%llu name=%02x:%02x:%llu/%s",
778 			MAJOR(__entry->dev), MINOR(__entry->dev),
779 			__entry->fileid,
780 			MAJOR(__entry->dev), MINOR(__entry->dev),
781 			(unsigned long long)__entry->dir,
782 			__get_str(name)
783 		)
784 );
785 
786 TRACE_EVENT(nfs_link_exit,
787 		TP_PROTO(
788 			const struct inode *inode,
789 			const struct inode *dir,
790 			const struct dentry *dentry,
791 			int error
792 		),
793 
794 		TP_ARGS(inode, dir, dentry, error),
795 
796 		TP_STRUCT__entry(
797 			__field(unsigned long, error)
798 			__field(dev_t, dev)
799 			__field(u64, fileid)
800 			__field(u64, dir)
801 			__string(name, dentry->d_name.name)
802 		),
803 
804 		TP_fast_assign(
805 			__entry->dev = inode->i_sb->s_dev;
806 			__entry->fileid = NFS_FILEID(inode);
807 			__entry->dir = NFS_FILEID(dir);
808 			__entry->error = error < 0 ? -error : 0;
809 			__assign_str(name);
810 		),
811 
812 		TP_printk(
813 			"error=%ld (%s) fileid=%02x:%02x:%llu name=%02x:%02x:%llu/%s",
814 			-__entry->error, show_nfs_status(__entry->error),
815 			MAJOR(__entry->dev), MINOR(__entry->dev),
816 			__entry->fileid,
817 			MAJOR(__entry->dev), MINOR(__entry->dev),
818 			(unsigned long long)__entry->dir,
819 			__get_str(name)
820 		)
821 );
822 
823 DECLARE_EVENT_CLASS(nfs_rename_event,
824 		TP_PROTO(
825 			const struct inode *old_dir,
826 			const struct dentry *old_dentry,
827 			const struct inode *new_dir,
828 			const struct dentry *new_dentry
829 		),
830 
831 		TP_ARGS(old_dir, old_dentry, new_dir, new_dentry),
832 
833 		TP_STRUCT__entry(
834 			__field(dev_t, dev)
835 			__field(u64, old_dir)
836 			__field(u64, new_dir)
837 			__string(old_name, old_dentry->d_name.name)
838 			__string(new_name, new_dentry->d_name.name)
839 		),
840 
841 		TP_fast_assign(
842 			__entry->dev = old_dir->i_sb->s_dev;
843 			__entry->old_dir = NFS_FILEID(old_dir);
844 			__entry->new_dir = NFS_FILEID(new_dir);
845 			__assign_str(old_name);
846 			__assign_str(new_name);
847 		),
848 
849 		TP_printk(
850 			"old_name=%02x:%02x:%llu/%s new_name=%02x:%02x:%llu/%s",
851 			MAJOR(__entry->dev), MINOR(__entry->dev),
852 			(unsigned long long)__entry->old_dir,
853 			__get_str(old_name),
854 			MAJOR(__entry->dev), MINOR(__entry->dev),
855 			(unsigned long long)__entry->new_dir,
856 			__get_str(new_name)
857 		)
858 );
859 #define DEFINE_NFS_RENAME_EVENT(name) \
860 	DEFINE_EVENT(nfs_rename_event, name, \
861 			TP_PROTO( \
862 				const struct inode *old_dir, \
863 				const struct dentry *old_dentry, \
864 				const struct inode *new_dir, \
865 				const struct dentry *new_dentry \
866 			), \
867 			TP_ARGS(old_dir, old_dentry, new_dir, new_dentry))
868 
869 DECLARE_EVENT_CLASS(nfs_rename_event_done,
870 		TP_PROTO(
871 			const struct inode *old_dir,
872 			const struct dentry *old_dentry,
873 			const struct inode *new_dir,
874 			const struct dentry *new_dentry,
875 			int error
876 		),
877 
878 		TP_ARGS(old_dir, old_dentry, new_dir, new_dentry, error),
879 
880 		TP_STRUCT__entry(
881 			__field(dev_t, dev)
882 			__field(unsigned long, error)
883 			__field(u64, old_dir)
884 			__string(old_name, old_dentry->d_name.name)
885 			__field(u64, new_dir)
886 			__string(new_name, new_dentry->d_name.name)
887 		),
888 
889 		TP_fast_assign(
890 			__entry->dev = old_dir->i_sb->s_dev;
891 			__entry->error = -error;
892 			__entry->old_dir = NFS_FILEID(old_dir);
893 			__entry->new_dir = NFS_FILEID(new_dir);
894 			__assign_str(old_name);
895 			__assign_str(new_name);
896 		),
897 
898 		TP_printk(
899 			"error=%ld (%s) old_name=%02x:%02x:%llu/%s "
900 			"new_name=%02x:%02x:%llu/%s",
901 			-__entry->error, show_nfs_status(__entry->error),
902 			MAJOR(__entry->dev), MINOR(__entry->dev),
903 			(unsigned long long)__entry->old_dir,
904 			__get_str(old_name),
905 			MAJOR(__entry->dev), MINOR(__entry->dev),
906 			(unsigned long long)__entry->new_dir,
907 			__get_str(new_name)
908 		)
909 );
910 #define DEFINE_NFS_RENAME_EVENT_DONE(name) \
911 	DEFINE_EVENT(nfs_rename_event_done, name, \
912 			TP_PROTO( \
913 				const struct inode *old_dir, \
914 				const struct dentry *old_dentry, \
915 				const struct inode *new_dir, \
916 				const struct dentry *new_dentry, \
917 				int error \
918 			), \
919 			TP_ARGS(old_dir, old_dentry, new_dir, \
920 				new_dentry, error))
921 
922 DEFINE_NFS_RENAME_EVENT(nfs_rename_enter);
923 DEFINE_NFS_RENAME_EVENT_DONE(nfs_rename_exit);
924 
925 DEFINE_NFS_RENAME_EVENT_DONE(nfs_async_rename_done);
926 
927 TRACE_EVENT(nfs_sillyrename_unlink,
928 		TP_PROTO(
929 			const struct nfs_unlinkdata *data,
930 			int error
931 		),
932 
933 		TP_ARGS(data, error),
934 
935 		TP_STRUCT__entry(
936 			__field(dev_t, dev)
937 			__field(unsigned long, error)
938 			__field(u64, dir)
939 			__dynamic_array(char, name, data->args.name.len + 1)
940 		),
941 
942 		TP_fast_assign(
943 			struct inode *dir = d_inode(data->dentry->d_parent);
944 			size_t len = data->args.name.len;
945 			__entry->dev = dir->i_sb->s_dev;
946 			__entry->dir = NFS_FILEID(dir);
947 			__entry->error = -error;
948 			memcpy(__get_str(name),
949 				data->args.name.name, len);
950 			__get_str(name)[len] = 0;
951 		),
952 
953 		TP_printk(
954 			"error=%ld (%s) name=%02x:%02x:%llu/%s",
955 			-__entry->error, show_nfs_status(__entry->error),
956 			MAJOR(__entry->dev), MINOR(__entry->dev),
957 			(unsigned long long)__entry->dir,
958 			__get_str(name)
959 		)
960 );
961 
962 DECLARE_EVENT_CLASS(nfs_folio_event,
963 		TP_PROTO(
964 			const struct inode *inode,
965 			loff_t offset,
966 			size_t count
967 		),
968 
969 		TP_ARGS(inode, offset, count),
970 
971 		TP_STRUCT__entry(
972 			__field(dev_t, dev)
973 			__field(u32, fhandle)
974 			__field(u64, fileid)
975 			__field(u64, version)
976 			__field(loff_t, offset)
977 			__field(size_t, count)
978 		),
979 
980 		TP_fast_assign(
981 			const struct nfs_inode *nfsi = NFS_I(inode);
982 
983 			__entry->dev = inode->i_sb->s_dev;
984 			__entry->fileid = nfsi->fileid;
985 			__entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
986 			__entry->version = inode_peek_iversion_raw(inode);
987 			__entry->offset = offset;
988 			__entry->count = count;
989 		),
990 
991 		TP_printk(
992 			"fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu "
993 			"offset=%lld count=%zu",
994 			MAJOR(__entry->dev), MINOR(__entry->dev),
995 			(unsigned long long)__entry->fileid,
996 			__entry->fhandle, __entry->version,
997 			__entry->offset, __entry->count
998 		)
999 );
1000 
1001 #define DEFINE_NFS_FOLIO_EVENT(name) \
1002 	DEFINE_EVENT(nfs_folio_event, name, \
1003 			TP_PROTO( \
1004 				const struct inode *inode, \
1005 				loff_t offset, \
1006 				size_t count \
1007 			), \
1008 			TP_ARGS(inode, offset, count))
1009 
1010 DECLARE_EVENT_CLASS(nfs_folio_event_done,
1011 		TP_PROTO(
1012 			const struct inode *inode,
1013 			loff_t offset,
1014 			size_t count,
1015 			int ret
1016 		),
1017 
1018 		TP_ARGS(inode, offset, count, ret),
1019 
1020 		TP_STRUCT__entry(
1021 			__field(dev_t, dev)
1022 			__field(u32, fhandle)
1023 			__field(int, ret)
1024 			__field(u64, fileid)
1025 			__field(u64, version)
1026 			__field(loff_t, offset)
1027 			__field(size_t, count)
1028 		),
1029 
1030 		TP_fast_assign(
1031 			const struct nfs_inode *nfsi = NFS_I(inode);
1032 
1033 			__entry->dev = inode->i_sb->s_dev;
1034 			__entry->fileid = nfsi->fileid;
1035 			__entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
1036 			__entry->version = inode_peek_iversion_raw(inode);
1037 			__entry->offset = offset;
1038 			__entry->count = count;
1039 			__entry->ret = ret;
1040 		),
1041 
1042 		TP_printk(
1043 			"fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu "
1044 			"offset=%lld count=%zu ret=%d",
1045 			MAJOR(__entry->dev), MINOR(__entry->dev),
1046 			(unsigned long long)__entry->fileid,
1047 			__entry->fhandle, __entry->version,
1048 			__entry->offset, __entry->count, __entry->ret
1049 		)
1050 );
1051 
1052 #define DEFINE_NFS_FOLIO_EVENT_DONE(name) \
1053 	DEFINE_EVENT(nfs_folio_event_done, name, \
1054 			TP_PROTO( \
1055 				const struct inode *inode, \
1056 				loff_t offset, \
1057 				size_t count, \
1058 				int ret \
1059 			), \
1060 			TP_ARGS(inode, offset, count, ret))
1061 
1062 DEFINE_NFS_FOLIO_EVENT(nfs_aop_readpage);
1063 DEFINE_NFS_FOLIO_EVENT_DONE(nfs_aop_readpage_done);
1064 
1065 DEFINE_NFS_FOLIO_EVENT(nfs_writeback_folio_reclaim);
1066 DEFINE_NFS_FOLIO_EVENT_DONE(nfs_writeback_folio_reclaim_done);
1067 
1068 DEFINE_NFS_FOLIO_EVENT(nfs_writeback_folio);
1069 DEFINE_NFS_FOLIO_EVENT_DONE(nfs_writeback_folio_done);
1070 
1071 DEFINE_NFS_FOLIO_EVENT(nfs_invalidate_folio);
1072 DEFINE_NFS_FOLIO_EVENT_DONE(nfs_launder_folio_done);
1073 
1074 DEFINE_NFS_FOLIO_EVENT(nfs_try_to_update_request);
1075 DEFINE_NFS_FOLIO_EVENT_DONE(nfs_try_to_update_request_done);
1076 
1077 DEFINE_NFS_FOLIO_EVENT(nfs_update_folio);
1078 DEFINE_NFS_FOLIO_EVENT_DONE(nfs_update_folio_done);
1079 
1080 DEFINE_NFS_FOLIO_EVENT(nfs_write_begin);
1081 DEFINE_NFS_FOLIO_EVENT_DONE(nfs_write_begin_done);
1082 
1083 DEFINE_NFS_FOLIO_EVENT(nfs_write_end);
1084 DEFINE_NFS_FOLIO_EVENT_DONE(nfs_write_end_done);
1085 
1086 DEFINE_NFS_FOLIO_EVENT(nfs_writepages);
1087 DEFINE_NFS_FOLIO_EVENT_DONE(nfs_writepages_done);
1088 
1089 DECLARE_EVENT_CLASS(nfs_kiocb_event,
1090 		TP_PROTO(
1091 			const struct kiocb *iocb,
1092 			const struct iov_iter *iter
1093 		),
1094 
1095 		TP_ARGS(iocb, iter),
1096 
1097 		TP_STRUCT__entry(
1098 			__field(dev_t, dev)
1099 			__field(u32, fhandle)
1100 			__field(u64, fileid)
1101 			__field(u64, version)
1102 			__field(loff_t, offset)
1103 			__field(size_t, count)
1104 			__field(int, flags)
1105 		),
1106 
1107 		TP_fast_assign(
1108 			const struct inode *inode = file_inode(iocb->ki_filp);
1109 			const struct nfs_inode *nfsi = NFS_I(inode);
1110 
1111 			__entry->dev = inode->i_sb->s_dev;
1112 			__entry->fileid = nfsi->fileid;
1113 			__entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
1114 			__entry->version = inode_peek_iversion_raw(inode);
1115 			__entry->offset = iocb->ki_pos;
1116 			__entry->count = iov_iter_count(iter);
1117 			__entry->flags = iocb->ki_flags;
1118 		),
1119 
1120 		TP_printk(
1121 			"fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu offset=%lld count=%zu ki_flags=%s",
1122 			MAJOR(__entry->dev), MINOR(__entry->dev),
1123 			(unsigned long long)__entry->fileid,
1124 			__entry->fhandle, __entry->version,
1125 			__entry->offset, __entry->count,
1126 			__print_flags(__entry->flags, "|", TRACE_IOCB_STRINGS)
1127 		)
1128 );
1129 
1130 #define DEFINE_NFS_KIOCB_EVENT(name) \
1131 	DEFINE_EVENT(nfs_kiocb_event, name, \
1132 			TP_PROTO( \
1133 				const struct kiocb *iocb, \
1134 				const struct iov_iter *iter \
1135 			), \
1136 			TP_ARGS(iocb, iter))
1137 
1138 DEFINE_NFS_KIOCB_EVENT(nfs_file_read);
1139 DEFINE_NFS_KIOCB_EVENT(nfs_file_write);
1140 
1141 TRACE_EVENT(nfs_aop_readahead,
1142 		TP_PROTO(
1143 			const struct inode *inode,
1144 			loff_t pos,
1145 			unsigned int nr_pages
1146 		),
1147 
1148 		TP_ARGS(inode, pos, nr_pages),
1149 
1150 		TP_STRUCT__entry(
1151 			__field(dev_t, dev)
1152 			__field(u32, fhandle)
1153 			__field(u64, fileid)
1154 			__field(u64, version)
1155 			__field(loff_t, offset)
1156 			__field(unsigned int, nr_pages)
1157 		),
1158 
1159 		TP_fast_assign(
1160 			const struct nfs_inode *nfsi = NFS_I(inode);
1161 
1162 			__entry->dev = inode->i_sb->s_dev;
1163 			__entry->fileid = nfsi->fileid;
1164 			__entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
1165 			__entry->version = inode_peek_iversion_raw(inode);
1166 			__entry->offset = pos;
1167 			__entry->nr_pages = nr_pages;
1168 		),
1169 
1170 		TP_printk(
1171 			"fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu offset=%lld nr_pages=%u",
1172 			MAJOR(__entry->dev), MINOR(__entry->dev),
1173 			(unsigned long long)__entry->fileid,
1174 			__entry->fhandle, __entry->version,
1175 			__entry->offset, __entry->nr_pages
1176 		)
1177 );
1178 
1179 TRACE_EVENT(nfs_aop_readahead_done,
1180 		TP_PROTO(
1181 			const struct inode *inode,
1182 			unsigned int nr_pages,
1183 			int ret
1184 		),
1185 
1186 		TP_ARGS(inode, nr_pages, ret),
1187 
1188 		TP_STRUCT__entry(
1189 			__field(dev_t, dev)
1190 			__field(u32, fhandle)
1191 			__field(int, ret)
1192 			__field(u64, fileid)
1193 			__field(u64, version)
1194 			__field(loff_t, offset)
1195 			__field(unsigned int, nr_pages)
1196 		),
1197 
1198 		TP_fast_assign(
1199 			const struct nfs_inode *nfsi = NFS_I(inode);
1200 
1201 			__entry->dev = inode->i_sb->s_dev;
1202 			__entry->fileid = nfsi->fileid;
1203 			__entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
1204 			__entry->version = inode_peek_iversion_raw(inode);
1205 			__entry->nr_pages = nr_pages;
1206 			__entry->ret = ret;
1207 		),
1208 
1209 		TP_printk(
1210 			"fileid=%02x:%02x:%llu fhandle=0x%08x version=%llu nr_pages=%u ret=%d",
1211 			MAJOR(__entry->dev), MINOR(__entry->dev),
1212 			(unsigned long long)__entry->fileid,
1213 			__entry->fhandle, __entry->version,
1214 			__entry->nr_pages, __entry->ret
1215 		)
1216 );
1217 
1218 TRACE_EVENT(nfs_initiate_read,
1219 		TP_PROTO(
1220 			const struct nfs_pgio_header *hdr
1221 		),
1222 
1223 		TP_ARGS(hdr),
1224 
1225 		TP_STRUCT__entry(
1226 			__field(dev_t, dev)
1227 			__field(u32, fhandle)
1228 			__field(u64, fileid)
1229 			__field(loff_t, offset)
1230 			__field(u32, count)
1231 		),
1232 
1233 		TP_fast_assign(
1234 			const struct inode *inode = hdr->inode;
1235 			const struct nfs_inode *nfsi = NFS_I(inode);
1236 			const struct nfs_fh *fh = hdr->args.fh ?
1237 						  hdr->args.fh : &nfsi->fh;
1238 
1239 			__entry->offset = hdr->args.offset;
1240 			__entry->count = hdr->args.count;
1241 			__entry->dev = inode->i_sb->s_dev;
1242 			__entry->fileid = nfsi->fileid;
1243 			__entry->fhandle = nfs_fhandle_hash(fh);
1244 		),
1245 
1246 		TP_printk(
1247 			"fileid=%02x:%02x:%llu fhandle=0x%08x "
1248 			"offset=%lld count=%u",
1249 			MAJOR(__entry->dev), MINOR(__entry->dev),
1250 			(unsigned long long)__entry->fileid,
1251 			__entry->fhandle,
1252 			(long long)__entry->offset, __entry->count
1253 		)
1254 );
1255 
1256 TRACE_EVENT(nfs_readpage_done,
1257 		TP_PROTO(
1258 			const struct rpc_task *task,
1259 			const struct nfs_pgio_header *hdr
1260 		),
1261 
1262 		TP_ARGS(task, hdr),
1263 
1264 		TP_STRUCT__entry(
1265 			__field(dev_t, dev)
1266 			__field(u32, fhandle)
1267 			__field(u64, fileid)
1268 			__field(loff_t, offset)
1269 			__field(u32, arg_count)
1270 			__field(u32, res_count)
1271 			__field(bool, eof)
1272 			__field(int, error)
1273 		),
1274 
1275 		TP_fast_assign(
1276 			const struct inode *inode = hdr->inode;
1277 			const struct nfs_inode *nfsi = NFS_I(inode);
1278 			const struct nfs_fh *fh = hdr->args.fh ?
1279 						  hdr->args.fh : &nfsi->fh;
1280 
1281 			__entry->error = task->tk_status;
1282 			__entry->offset = hdr->args.offset;
1283 			__entry->arg_count = hdr->args.count;
1284 			__entry->res_count = hdr->res.count;
1285 			__entry->eof = hdr->res.eof;
1286 			__entry->dev = inode->i_sb->s_dev;
1287 			__entry->fileid = nfsi->fileid;
1288 			__entry->fhandle = nfs_fhandle_hash(fh);
1289 		),
1290 
1291 		TP_printk(
1292 			"error=%d fileid=%02x:%02x:%llu fhandle=0x%08x "
1293 			"offset=%lld count=%u res=%u%s", __entry->error,
1294 			MAJOR(__entry->dev), MINOR(__entry->dev),
1295 			(unsigned long long)__entry->fileid,
1296 			__entry->fhandle,
1297 			(long long)__entry->offset, __entry->arg_count,
1298 			__entry->res_count, __entry->eof ? " eof" : ""
1299 		)
1300 );
1301 
1302 TRACE_EVENT(nfs_readpage_short,
1303 		TP_PROTO(
1304 			const struct rpc_task *task,
1305 			const struct nfs_pgio_header *hdr
1306 		),
1307 
1308 		TP_ARGS(task, hdr),
1309 
1310 		TP_STRUCT__entry(
1311 			__field(dev_t, dev)
1312 			__field(u32, fhandle)
1313 			__field(u64, fileid)
1314 			__field(loff_t, offset)
1315 			__field(u32, arg_count)
1316 			__field(u32, res_count)
1317 			__field(bool, eof)
1318 			__field(int, error)
1319 		),
1320 
1321 		TP_fast_assign(
1322 			const struct inode *inode = hdr->inode;
1323 			const struct nfs_inode *nfsi = NFS_I(inode);
1324 			const struct nfs_fh *fh = hdr->args.fh ?
1325 						  hdr->args.fh : &nfsi->fh;
1326 
1327 			__entry->error = task->tk_status;
1328 			__entry->offset = hdr->args.offset;
1329 			__entry->arg_count = hdr->args.count;
1330 			__entry->res_count = hdr->res.count;
1331 			__entry->eof = hdr->res.eof;
1332 			__entry->dev = inode->i_sb->s_dev;
1333 			__entry->fileid = nfsi->fileid;
1334 			__entry->fhandle = nfs_fhandle_hash(fh);
1335 		),
1336 
1337 		TP_printk(
1338 			"error=%d fileid=%02x:%02x:%llu fhandle=0x%08x "
1339 			"offset=%lld count=%u res=%u%s", __entry->error,
1340 			MAJOR(__entry->dev), MINOR(__entry->dev),
1341 			(unsigned long long)__entry->fileid,
1342 			__entry->fhandle,
1343 			(long long)__entry->offset, __entry->arg_count,
1344 			__entry->res_count, __entry->eof ? " eof" : ""
1345 		)
1346 );
1347 
1348 
1349 TRACE_EVENT(nfs_pgio_error,
1350 	TP_PROTO(
1351 		const struct nfs_pgio_header *hdr,
1352 		int error,
1353 		loff_t pos
1354 	),
1355 
1356 	TP_ARGS(hdr, error, pos),
1357 
1358 	TP_STRUCT__entry(
1359 		__field(dev_t, dev)
1360 		__field(u32, fhandle)
1361 		__field(u64, fileid)
1362 		__field(loff_t, offset)
1363 		__field(u32, arg_count)
1364 		__field(u32, res_count)
1365 		__field(loff_t, pos)
1366 		__field(int, error)
1367 	),
1368 
1369 	TP_fast_assign(
1370 		const struct inode *inode = hdr->inode;
1371 		const struct nfs_inode *nfsi = NFS_I(inode);
1372 		const struct nfs_fh *fh = hdr->args.fh ?
1373 					  hdr->args.fh : &nfsi->fh;
1374 
1375 		__entry->error = error;
1376 		__entry->offset = hdr->args.offset;
1377 		__entry->arg_count = hdr->args.count;
1378 		__entry->res_count = hdr->res.count;
1379 		__entry->dev = inode->i_sb->s_dev;
1380 		__entry->fileid = nfsi->fileid;
1381 		__entry->fhandle = nfs_fhandle_hash(fh);
1382 	),
1383 
1384 	TP_printk("error=%d fileid=%02x:%02x:%llu fhandle=0x%08x "
1385 		  "offset=%lld count=%u res=%u pos=%llu", __entry->error,
1386 		MAJOR(__entry->dev), MINOR(__entry->dev),
1387 		(unsigned long long)__entry->fileid, __entry->fhandle,
1388 		(long long)__entry->offset, __entry->arg_count, __entry->res_count,
1389 		__entry->pos
1390 	)
1391 );
1392 
1393 TRACE_EVENT(nfs_initiate_write,
1394 		TP_PROTO(
1395 			const struct nfs_pgio_header *hdr
1396 		),
1397 
1398 		TP_ARGS(hdr),
1399 
1400 		TP_STRUCT__entry(
1401 			__field(dev_t, dev)
1402 			__field(u32, fhandle)
1403 			__field(u64, fileid)
1404 			__field(loff_t, offset)
1405 			__field(u32, count)
1406 			__field(unsigned long, stable)
1407 		),
1408 
1409 		TP_fast_assign(
1410 			const struct inode *inode = hdr->inode;
1411 			const struct nfs_inode *nfsi = NFS_I(inode);
1412 			const struct nfs_fh *fh = hdr->args.fh ?
1413 						  hdr->args.fh : &nfsi->fh;
1414 
1415 			__entry->offset = hdr->args.offset;
1416 			__entry->count = hdr->args.count;
1417 			__entry->stable = hdr->args.stable;
1418 			__entry->dev = inode->i_sb->s_dev;
1419 			__entry->fileid = nfsi->fileid;
1420 			__entry->fhandle = nfs_fhandle_hash(fh);
1421 		),
1422 
1423 		TP_printk(
1424 			"fileid=%02x:%02x:%llu fhandle=0x%08x "
1425 			"offset=%lld count=%u stable=%s",
1426 			MAJOR(__entry->dev), MINOR(__entry->dev),
1427 			(unsigned long long)__entry->fileid,
1428 			__entry->fhandle,
1429 			(long long)__entry->offset, __entry->count,
1430 			show_nfs_stable_how(__entry->stable)
1431 		)
1432 );
1433 
1434 TRACE_EVENT(nfs_writeback_done,
1435 		TP_PROTO(
1436 			const struct rpc_task *task,
1437 			const struct nfs_pgio_header *hdr
1438 		),
1439 
1440 		TP_ARGS(task, hdr),
1441 
1442 		TP_STRUCT__entry(
1443 			__field(dev_t, dev)
1444 			__field(u32, fhandle)
1445 			__field(u64, fileid)
1446 			__field(loff_t, offset)
1447 			__field(u32, arg_count)
1448 			__field(u32, res_count)
1449 			__field(int, error)
1450 			__field(unsigned long, stable)
1451 			__array(char, verifier, NFS4_VERIFIER_SIZE)
1452 		),
1453 
1454 		TP_fast_assign(
1455 			const struct inode *inode = hdr->inode;
1456 			const struct nfs_inode *nfsi = NFS_I(inode);
1457 			const struct nfs_fh *fh = hdr->args.fh ?
1458 						  hdr->args.fh : &nfsi->fh;
1459 			const struct nfs_writeverf *verf = hdr->res.verf;
1460 
1461 			__entry->error = task->tk_status;
1462 			__entry->offset = hdr->args.offset;
1463 			__entry->arg_count = hdr->args.count;
1464 			__entry->res_count = hdr->res.count;
1465 			__entry->stable = verf->committed;
1466 			memcpy(__entry->verifier,
1467 				&verf->verifier,
1468 				NFS4_VERIFIER_SIZE);
1469 			__entry->dev = inode->i_sb->s_dev;
1470 			__entry->fileid = nfsi->fileid;
1471 			__entry->fhandle = nfs_fhandle_hash(fh);
1472 		),
1473 
1474 		TP_printk(
1475 			"error=%d fileid=%02x:%02x:%llu fhandle=0x%08x "
1476 			"offset=%lld count=%u res=%u stable=%s "
1477 			"verifier=%s", __entry->error,
1478 			MAJOR(__entry->dev), MINOR(__entry->dev),
1479 			(unsigned long long)__entry->fileid,
1480 			__entry->fhandle,
1481 			(long long)__entry->offset, __entry->arg_count,
1482 			__entry->res_count,
1483 			show_nfs_stable_how(__entry->stable),
1484 			show_nfs4_verifier(__entry->verifier)
1485 		)
1486 );
1487 
1488 DECLARE_EVENT_CLASS(nfs_page_class,
1489 		TP_PROTO(
1490 			const struct nfs_page *req
1491 		),
1492 
1493 		TP_ARGS(req),
1494 
1495 		TP_STRUCT__entry(
1496 			__field(dev_t, dev)
1497 			__field(u32, fhandle)
1498 			__field(u64, fileid)
1499 			__field(const struct nfs_page *__private, req)
1500 			__field(loff_t, offset)
1501 			__field(unsigned int, count)
1502 			__field(unsigned long, flags)
1503 		),
1504 
1505 		TP_fast_assign(
1506 			const struct inode *inode = folio_inode(req->wb_folio);
1507 			const struct nfs_inode *nfsi = NFS_I(inode);
1508 
1509 			__entry->dev = inode->i_sb->s_dev;
1510 			__entry->fileid = nfsi->fileid;
1511 			__entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
1512 			__entry->req = req;
1513 			__entry->offset = req_offset(req);
1514 			__entry->count = req->wb_bytes;
1515 			__entry->flags = req->wb_flags;
1516 		),
1517 
1518 		TP_printk(
1519 			"fileid=%02x:%02x:%llu fhandle=0x%08x req=%p offset=%lld count=%u flags=%s",
1520 			MAJOR(__entry->dev), MINOR(__entry->dev),
1521 			(unsigned long long)__entry->fileid, __entry->fhandle,
1522 			__entry->req, __entry->offset, __entry->count,
1523 			nfs_show_wb_flags(__entry->flags)
1524 		)
1525 );
1526 
1527 #define DEFINE_NFS_PAGE_EVENT(name) \
1528 	DEFINE_EVENT(nfs_page_class, name, \
1529 			TP_PROTO( \
1530 				const struct nfs_page *req \
1531 			), \
1532 			TP_ARGS(req))
1533 
1534 DEFINE_NFS_PAGE_EVENT(nfs_writepage_setup);
1535 DEFINE_NFS_PAGE_EVENT(nfs_do_writepage);
1536 
1537 DECLARE_EVENT_CLASS(nfs_page_error_class,
1538 		TP_PROTO(
1539 			const struct inode *inode,
1540 			const struct nfs_page *req,
1541 			int error
1542 		),
1543 
1544 		TP_ARGS(inode, req, error),
1545 
1546 		TP_STRUCT__entry(
1547 			__field(dev_t, dev)
1548 			__field(u32, fhandle)
1549 			__field(u64, fileid)
1550 			__field(loff_t, offset)
1551 			__field(unsigned int, count)
1552 			__field(int, error)
1553 		),
1554 
1555 		TP_fast_assign(
1556 			const struct nfs_inode *nfsi = NFS_I(inode);
1557 			__entry->dev = inode->i_sb->s_dev;
1558 			__entry->fileid = nfsi->fileid;
1559 			__entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
1560 			__entry->offset = req_offset(req);
1561 			__entry->count = req->wb_bytes;
1562 			__entry->error = error;
1563 		),
1564 
1565 		TP_printk(
1566 			"error=%d fileid=%02x:%02x:%llu fhandle=0x%08x "
1567 			"offset=%lld count=%u", __entry->error,
1568 			MAJOR(__entry->dev), MINOR(__entry->dev),
1569 			(unsigned long long)__entry->fileid,
1570 			__entry->fhandle, __entry->offset,
1571 			__entry->count
1572 		)
1573 );
1574 
1575 #define DEFINE_NFS_PAGEERR_EVENT(name) \
1576 	DEFINE_EVENT(nfs_page_error_class, name, \
1577 			TP_PROTO( \
1578 				const struct inode *inode, \
1579 				const struct nfs_page *req, \
1580 				int error \
1581 			), \
1582 			TP_ARGS(inode, req, error))
1583 
1584 DEFINE_NFS_PAGEERR_EVENT(nfs_write_error);
1585 DEFINE_NFS_PAGEERR_EVENT(nfs_comp_error);
1586 DEFINE_NFS_PAGEERR_EVENT(nfs_commit_error);
1587 
1588 TRACE_EVENT(nfs_initiate_commit,
1589 		TP_PROTO(
1590 			const struct nfs_commit_data *data
1591 		),
1592 
1593 		TP_ARGS(data),
1594 
1595 		TP_STRUCT__entry(
1596 			__field(dev_t, dev)
1597 			__field(u32, fhandle)
1598 			__field(u64, fileid)
1599 			__field(loff_t, offset)
1600 			__field(u32, count)
1601 		),
1602 
1603 		TP_fast_assign(
1604 			const struct inode *inode = data->inode;
1605 			const struct nfs_inode *nfsi = NFS_I(inode);
1606 			const struct nfs_fh *fh = data->args.fh ?
1607 						  data->args.fh : &nfsi->fh;
1608 
1609 			__entry->offset = data->args.offset;
1610 			__entry->count = data->args.count;
1611 			__entry->dev = inode->i_sb->s_dev;
1612 			__entry->fileid = nfsi->fileid;
1613 			__entry->fhandle = nfs_fhandle_hash(fh);
1614 		),
1615 
1616 		TP_printk(
1617 			"fileid=%02x:%02x:%llu fhandle=0x%08x "
1618 			"offset=%lld count=%u",
1619 			MAJOR(__entry->dev), MINOR(__entry->dev),
1620 			(unsigned long long)__entry->fileid,
1621 			__entry->fhandle,
1622 			(long long)__entry->offset, __entry->count
1623 		)
1624 );
1625 
1626 TRACE_EVENT(nfs_commit_done,
1627 		TP_PROTO(
1628 			const struct rpc_task *task,
1629 			const struct nfs_commit_data *data
1630 		),
1631 
1632 		TP_ARGS(task, data),
1633 
1634 		TP_STRUCT__entry(
1635 			__field(dev_t, dev)
1636 			__field(u32, fhandle)
1637 			__field(u64, fileid)
1638 			__field(loff_t, offset)
1639 			__field(int, error)
1640 			__field(unsigned long, stable)
1641 			__array(char, verifier, NFS4_VERIFIER_SIZE)
1642 		),
1643 
1644 		TP_fast_assign(
1645 			const struct inode *inode = data->inode;
1646 			const struct nfs_inode *nfsi = NFS_I(inode);
1647 			const struct nfs_fh *fh = data->args.fh ?
1648 						  data->args.fh : &nfsi->fh;
1649 			const struct nfs_writeverf *verf = data->res.verf;
1650 
1651 			__entry->error = task->tk_status;
1652 			__entry->offset = data->args.offset;
1653 			__entry->stable = verf->committed;
1654 			memcpy(__entry->verifier,
1655 				&verf->verifier,
1656 				NFS4_VERIFIER_SIZE);
1657 			__entry->dev = inode->i_sb->s_dev;
1658 			__entry->fileid = nfsi->fileid;
1659 			__entry->fhandle = nfs_fhandle_hash(fh);
1660 		),
1661 
1662 		TP_printk(
1663 			"error=%d fileid=%02x:%02x:%llu fhandle=0x%08x "
1664 			"offset=%lld stable=%s verifier=%s", __entry->error,
1665 			MAJOR(__entry->dev), MINOR(__entry->dev),
1666 			(unsigned long long)__entry->fileid,
1667 			__entry->fhandle,
1668 			(long long)__entry->offset,
1669 			show_nfs_stable_how(__entry->stable),
1670 			show_nfs4_verifier(__entry->verifier)
1671 		)
1672 );
1673 
1674 #define nfs_show_direct_req_flags(v) \
1675 	__print_flags(v, "|", \
1676 			{ NFS_ODIRECT_DO_COMMIT, "DO_COMMIT" }, \
1677 			{ NFS_ODIRECT_RESCHED_WRITES, "RESCHED_WRITES" }, \
1678 			{ NFS_ODIRECT_SHOULD_DIRTY, "SHOULD DIRTY" }, \
1679 			{ NFS_ODIRECT_DONE, "DONE" } )
1680 
1681 DECLARE_EVENT_CLASS(nfs_direct_req_class,
1682 		TP_PROTO(
1683 			const struct nfs_direct_req *dreq
1684 		),
1685 
1686 		TP_ARGS(dreq),
1687 
1688 		TP_STRUCT__entry(
1689 			__field(dev_t, dev)
1690 			__field(u64, fileid)
1691 			__field(u32, fhandle)
1692 			__field(loff_t, offset)
1693 			__field(ssize_t, count)
1694 			__field(ssize_t, error)
1695 			__field(int, flags)
1696 		),
1697 
1698 		TP_fast_assign(
1699 			const struct inode *inode = dreq->inode;
1700 			const struct nfs_inode *nfsi = NFS_I(inode);
1701 			const struct nfs_fh *fh = &nfsi->fh;
1702 
1703 			__entry->dev = inode->i_sb->s_dev;
1704 			__entry->fileid = nfsi->fileid;
1705 			__entry->fhandle = nfs_fhandle_hash(fh);
1706 			__entry->offset = dreq->io_start;
1707 			__entry->count = dreq->count;
1708 			__entry->error = dreq->error;
1709 			__entry->flags = dreq->flags;
1710 		),
1711 
1712 		TP_printk(
1713 			"error=%zd fileid=%02x:%02x:%llu fhandle=0x%08x "
1714 			"offset=%lld count=%zd flags=%s",
1715 			__entry->error, MAJOR(__entry->dev),
1716 			MINOR(__entry->dev),
1717 			(unsigned long long)__entry->fileid,
1718 			__entry->fhandle, __entry->offset,
1719 			__entry->count,
1720 			nfs_show_direct_req_flags(__entry->flags)
1721 		)
1722 );
1723 
1724 #define DEFINE_NFS_DIRECT_REQ_EVENT(name) \
1725 	DEFINE_EVENT(nfs_direct_req_class, name, \
1726 			TP_PROTO( \
1727 				const struct nfs_direct_req *dreq \
1728 			), \
1729 			TP_ARGS(dreq))
1730 
1731 DEFINE_NFS_DIRECT_REQ_EVENT(nfs_direct_commit_complete);
1732 DEFINE_NFS_DIRECT_REQ_EVENT(nfs_direct_resched_write);
1733 DEFINE_NFS_DIRECT_REQ_EVENT(nfs_direct_write_complete);
1734 DEFINE_NFS_DIRECT_REQ_EVENT(nfs_direct_write_completion);
1735 DEFINE_NFS_DIRECT_REQ_EVENT(nfs_direct_write_schedule_iovec);
1736 DEFINE_NFS_DIRECT_REQ_EVENT(nfs_direct_write_reschedule_io);
1737 
1738 #if IS_ENABLED(CONFIG_NFS_LOCALIO)
1739 
1740 DECLARE_EVENT_CLASS(nfs_local_dio_class,
1741 	TP_PROTO(
1742 		const struct inode *inode,
1743 		loff_t offset,
1744 		ssize_t count,
1745 		const struct nfs_local_dio *local_dio
1746 	),
1747 	TP_ARGS(inode, offset, count, local_dio),
1748 	TP_STRUCT__entry(
1749 		__field(dev_t, dev)
1750 		__field(u64, fileid)
1751 		__field(u32, fhandle)
1752 		__field(loff_t, offset)
1753 		__field(ssize_t, count)
1754 		__field(u32, mem_align)
1755 		__field(u32, offset_align)
1756 		__field(loff_t, start)
1757 		__field(ssize_t, start_len)
1758 		__field(loff_t, middle)
1759 		__field(ssize_t, middle_len)
1760 		__field(loff_t, end)
1761 		__field(ssize_t, end_len)
1762 	),
1763 	TP_fast_assign(
1764 		const struct nfs_inode *nfsi = NFS_I(inode);
1765 		const struct nfs_fh *fh = &nfsi->fh;
1766 
1767 		__entry->dev = inode->i_sb->s_dev;
1768 		__entry->fileid = nfsi->fileid;
1769 		__entry->fhandle = nfs_fhandle_hash(fh);
1770 		__entry->offset = offset;
1771 		__entry->count = count;
1772 		__entry->mem_align = local_dio->mem_align;
1773 		__entry->offset_align = local_dio->offset_align;
1774 		__entry->start = offset;
1775 		__entry->start_len = local_dio->start_len;
1776 		__entry->middle = local_dio->middle_offset;
1777 		__entry->middle_len = local_dio->middle_len;
1778 		__entry->end = local_dio->end_offset;
1779 		__entry->end_len = local_dio->end_len;
1780 	),
1781 	TP_printk("fileid=%02x:%02x:%llu fhandle=0x%08x "
1782 		  "offset=%lld count=%zd "
1783 		  "mem_align=%u offset_align=%u "
1784 		  "start=%llu+%zd middle=%llu+%zd end=%llu+%zd",
1785 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1786 		  (unsigned long long)__entry->fileid,
1787 		  __entry->fhandle, __entry->offset, __entry->count,
1788 		  __entry->mem_align, __entry->offset_align,
1789 		  __entry->start, __entry->start_len,
1790 		  __entry->middle, __entry->middle_len,
1791 		  __entry->end, __entry->end_len)
1792 )
1793 
1794 #define DEFINE_NFS_LOCAL_DIO_EVENT(name)		\
1795 DEFINE_EVENT(nfs_local_dio_class, nfs_local_dio_##name,	\
1796 	TP_PROTO(const struct inode *inode,		\
1797 		 loff_t offset,				\
1798 		 ssize_t count,				\
1799 		 const struct nfs_local_dio *local_dio),\
1800 	TP_ARGS(inode, offset, count, local_dio))
1801 
1802 DEFINE_NFS_LOCAL_DIO_EVENT(read);
1803 DEFINE_NFS_LOCAL_DIO_EVENT(write);
1804 DEFINE_NFS_LOCAL_DIO_EVENT(misaligned);
1805 
1806 #endif /* CONFIG_NFS_LOCALIO */
1807 
1808 TRACE_EVENT(nfs_fh_to_dentry,
1809 		TP_PROTO(
1810 			const struct super_block *sb,
1811 			const struct nfs_fh *fh,
1812 			u64 fileid,
1813 			int error
1814 		),
1815 
1816 		TP_ARGS(sb, fh, fileid, error),
1817 
1818 		TP_STRUCT__entry(
1819 			__field(int, error)
1820 			__field(dev_t, dev)
1821 			__field(u32, fhandle)
1822 			__field(u64, fileid)
1823 		),
1824 
1825 		TP_fast_assign(
1826 			__entry->error = error;
1827 			__entry->dev = sb->s_dev;
1828 			__entry->fileid = fileid;
1829 			__entry->fhandle = nfs_fhandle_hash(fh);
1830 		),
1831 
1832 		TP_printk(
1833 			"error=%d fileid=%02x:%02x:%llu fhandle=0x%08x ",
1834 			__entry->error,
1835 			MAJOR(__entry->dev), MINOR(__entry->dev),
1836 			(unsigned long long)__entry->fileid,
1837 			__entry->fhandle
1838 		)
1839 );
1840 
1841 TRACE_EVENT(nfs_mount_assign,
1842 	TP_PROTO(
1843 		const char *option,
1844 		const char *value
1845 	),
1846 
1847 	TP_ARGS(option, value),
1848 
1849 	TP_STRUCT__entry(
1850 		__string(option, option)
1851 		__string(value, value)
1852 	),
1853 
1854 	TP_fast_assign(
1855 		__assign_str(option);
1856 		__assign_str(value);
1857 	),
1858 
1859 	TP_printk("option %s=%s",
1860 		__get_str(option), __get_str(value)
1861 	)
1862 );
1863 
1864 TRACE_EVENT(nfs_mount_option,
1865 	TP_PROTO(
1866 		const struct fs_parameter *param
1867 	),
1868 
1869 	TP_ARGS(param),
1870 
1871 	TP_STRUCT__entry(
1872 		__string(option, param->key)
1873 	),
1874 
1875 	TP_fast_assign(
1876 		__assign_str(option);
1877 	),
1878 
1879 	TP_printk("option %s", __get_str(option))
1880 );
1881 
1882 TRACE_EVENT(nfs_mount_path,
1883 	TP_PROTO(
1884 		const char *path
1885 	),
1886 
1887 	TP_ARGS(path),
1888 
1889 	TP_STRUCT__entry(
1890 		__string(path, path)
1891 	),
1892 
1893 	TP_fast_assign(
1894 		__assign_str(path);
1895 	),
1896 
1897 	TP_printk("path='%s'", __get_str(path))
1898 );
1899 
1900 TRACE_EVENT(nfs_local_open_fh,
1901 		TP_PROTO(
1902 			const struct nfs_fh *fh,
1903 			fmode_t fmode,
1904 			int error
1905 		),
1906 
1907 		TP_ARGS(fh, fmode, error),
1908 
1909 		TP_STRUCT__entry(
1910 			__field(int, error)
1911 			__field(u32, fhandle)
1912 			__field(unsigned int, fmode)
1913 		),
1914 
1915 		TP_fast_assign(
1916 			__entry->error = error;
1917 			__entry->fhandle = nfs_fhandle_hash(fh);
1918 			__entry->fmode = (__force unsigned int)fmode;
1919 		),
1920 
1921 		TP_printk(
1922 			"fhandle=0x%08x mode=%s result=%d",
1923 			__entry->fhandle,
1924 			show_fs_fmode_flags(__entry->fmode),
1925 			__entry->error
1926 		)
1927 );
1928 
1929 DECLARE_EVENT_CLASS(nfs_xdr_event,
1930 		TP_PROTO(
1931 			const struct xdr_stream *xdr,
1932 			int error
1933 		),
1934 
1935 		TP_ARGS(xdr, error),
1936 
1937 		TP_STRUCT__entry(
1938 			__field(unsigned int, task_id)
1939 			__field(unsigned int, client_id)
1940 			__field(u32, xid)
1941 			__field(int, version)
1942 			__field(unsigned long, error)
1943 			__string(program,
1944 				 xdr->rqst->rq_task->tk_client->cl_program->name)
1945 			__string(procedure,
1946 				 xdr->rqst->rq_task->tk_msg.rpc_proc->p_name)
1947 		),
1948 
1949 		TP_fast_assign(
1950 			const struct rpc_rqst *rqstp = xdr->rqst;
1951 			const struct rpc_task *task = rqstp->rq_task;
1952 
1953 			__entry->task_id = task->tk_pid;
1954 			__entry->client_id = task->tk_client->cl_clid;
1955 			__entry->xid = be32_to_cpu(rqstp->rq_xid);
1956 			__entry->version = task->tk_client->cl_vers;
1957 			__entry->error = error;
1958 			__assign_str(program);
1959 			__assign_str(procedure);
1960 		),
1961 
1962 		TP_printk(SUNRPC_TRACE_TASK_SPECIFIER
1963 			  " xid=0x%08x %sv%d %s error=%ld (%s)",
1964 			__entry->task_id, __entry->client_id, __entry->xid,
1965 			__get_str(program), __entry->version,
1966 			__get_str(procedure), -__entry->error,
1967 			show_nfs_status(__entry->error)
1968 		)
1969 );
1970 #define DEFINE_NFS_XDR_EVENT(name) \
1971 	DEFINE_EVENT(nfs_xdr_event, name, \
1972 			TP_PROTO( \
1973 				const struct xdr_stream *xdr, \
1974 				int error \
1975 			), \
1976 			TP_ARGS(xdr, error))
1977 DEFINE_NFS_XDR_EVENT(nfs_xdr_status);
1978 DEFINE_NFS_XDR_EVENT(nfs_xdr_bad_filehandle);
1979 
1980 #endif /* _TRACE_NFS_H */
1981 
1982 #undef TRACE_INCLUDE_PATH
1983 #define TRACE_INCLUDE_PATH .
1984 #define TRACE_INCLUDE_FILE nfstrace
1985 /* This part must be outside protection */
1986 #include <trace/define_trace.h>
1987