xref: /linux/include/trace/events/ext4.h (revision 69050f8d6d075dc01af7a5f2f550a8067510366f)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #undef TRACE_SYSTEM
3 #define TRACE_SYSTEM ext4
4 
5 #if !defined(_TRACE_EXT4_H) || defined(TRACE_HEADER_MULTI_READ)
6 #define _TRACE_EXT4_H
7 
8 #include <linux/writeback.h>
9 #include <linux/tracepoint.h>
10 
11 struct ext4_allocation_context;
12 struct ext4_allocation_request;
13 struct ext4_extent;
14 struct ext4_prealloc_space;
15 struct ext4_inode_info;
16 struct mpage_da_data;
17 struct ext4_map_blocks;
18 struct extent_status;
19 struct ext4_fsmap;
20 struct partial_cluster;
21 
22 #define EXT4_I(inode) (container_of(inode, struct ext4_inode_info, vfs_inode))
23 
24 #define show_mballoc_flags(flags) __print_flags(flags, "|",	\
25 	{ EXT4_MB_HINT_MERGE,		"HINT_MERGE" },		\
26 	{ EXT4_MB_HINT_FIRST,		"HINT_FIRST" },		\
27 	{ EXT4_MB_HINT_DATA,		"HINT_DATA" },		\
28 	{ EXT4_MB_HINT_NOPREALLOC,	"HINT_NOPREALLOC" },	\
29 	{ EXT4_MB_HINT_GROUP_ALLOC,	"HINT_GRP_ALLOC" },	\
30 	{ EXT4_MB_HINT_GOAL_ONLY,	"HINT_GOAL_ONLY" },	\
31 	{ EXT4_MB_HINT_TRY_GOAL,	"HINT_TRY_GOAL" },	\
32 	{ EXT4_MB_DELALLOC_RESERVED,	"DELALLOC_RESV" },	\
33 	{ EXT4_MB_STREAM_ALLOC,		"STREAM_ALLOC" },	\
34 	{ EXT4_MB_USE_ROOT_BLOCKS,	"USE_ROOT_BLKS" },	\
35 	{ EXT4_MB_USE_RESERVED,		"USE_RESV" },		\
36 	{ EXT4_MB_STRICT_CHECK,		"STRICT_CHECK" })
37 
38 #define show_map_flags(flags) __print_flags(flags, "|",			\
39 	{ EXT4_GET_BLOCKS_CREATE,		"CREATE" },		\
40 	{ EXT4_GET_BLOCKS_UNWRIT_EXT,		"UNWRIT" },		\
41 	{ EXT4_GET_BLOCKS_DELALLOC_RESERVE,	"DELALLOC" },		\
42 	{ EXT4_GET_BLOCKS_SPLIT_NOMERGE,	"SPLIT_NOMERGE" },	\
43 	{ EXT4_GET_BLOCKS_CONVERT,		"CONVERT" },		\
44 	{ EXT4_GET_BLOCKS_METADATA_NOFAIL,	"METADATA_NOFAIL" },	\
45 	{ EXT4_GET_BLOCKS_NO_NORMALIZE,		"NO_NORMALIZE" },	\
46 	{ EXT4_GET_BLOCKS_CONVERT_UNWRITTEN,	"CONVERT_UNWRITTEN" },  \
47 	{ EXT4_GET_BLOCKS_ZERO,			"ZERO" },		\
48 	{ EXT4_GET_BLOCKS_IO_SUBMIT,		"IO_SUBMIT" },		\
49 	{ EXT4_EX_NOCACHE,			"EX_NOCACHE" })
50 
51 /*
52  * __print_flags() requires that all enum values be wrapped in the
53  * TRACE_DEFINE_ENUM macro so that the enum value can be encoded in the ftrace
54  * ring buffer.
55  */
56 TRACE_DEFINE_ENUM(BH_New);
57 TRACE_DEFINE_ENUM(BH_Mapped);
58 TRACE_DEFINE_ENUM(BH_Unwritten);
59 TRACE_DEFINE_ENUM(BH_Boundary);
60 
61 #define show_mflags(flags) __print_flags(flags, "",	\
62 	{ EXT4_MAP_NEW,		"N" },			\
63 	{ EXT4_MAP_MAPPED,	"M" },			\
64 	{ EXT4_MAP_UNWRITTEN,	"U" },			\
65 	{ EXT4_MAP_BOUNDARY,	"B" })
66 
67 #define show_free_flags(flags) __print_flags(flags, "|",	\
68 	{ EXT4_FREE_BLOCKS_METADATA,		"METADATA" },	\
69 	{ EXT4_FREE_BLOCKS_FORGET,		"FORGET" },	\
70 	{ EXT4_FREE_BLOCKS_VALIDATED,		"VALIDATED" },	\
71 	{ EXT4_FREE_BLOCKS_NO_QUOT_UPDATE,	"NO_QUOTA" },	\
72 	{ EXT4_FREE_BLOCKS_NOFREE_FIRST_CLUSTER,"1ST_CLUSTER" },\
73 	{ EXT4_FREE_BLOCKS_NOFREE_LAST_CLUSTER,	"LAST_CLUSTER" })
74 
75 TRACE_DEFINE_ENUM(ES_WRITTEN_B);
76 TRACE_DEFINE_ENUM(ES_UNWRITTEN_B);
77 TRACE_DEFINE_ENUM(ES_DELAYED_B);
78 TRACE_DEFINE_ENUM(ES_HOLE_B);
79 TRACE_DEFINE_ENUM(ES_REFERENCED_B);
80 
81 #define show_extent_status(status) __print_flags(status, "",	\
82 	{ EXTENT_STATUS_WRITTEN,	"W" },			\
83 	{ EXTENT_STATUS_UNWRITTEN,	"U" },			\
84 	{ EXTENT_STATUS_DELAYED,	"D" },			\
85 	{ EXTENT_STATUS_HOLE,		"H" },			\
86 	{ EXTENT_STATUS_REFERENCED,	"R" })
87 
88 #define show_falloc_mode(mode) __print_flags(mode, "|",		\
89 	{ FALLOC_FL_KEEP_SIZE,		"KEEP_SIZE"},		\
90 	{ FALLOC_FL_PUNCH_HOLE,		"PUNCH_HOLE"},		\
91 	{ FALLOC_FL_COLLAPSE_RANGE,	"COLLAPSE_RANGE"},	\
92 	{ FALLOC_FL_ZERO_RANGE,		"ZERO_RANGE"},		\
93 	{ FALLOC_FL_WRITE_ZEROES,	"WRITE_ZEROES"})
94 
95 TRACE_DEFINE_ENUM(EXT4_FC_REASON_XATTR);
96 TRACE_DEFINE_ENUM(EXT4_FC_REASON_CROSS_RENAME);
97 TRACE_DEFINE_ENUM(EXT4_FC_REASON_JOURNAL_FLAG_CHANGE);
98 TRACE_DEFINE_ENUM(EXT4_FC_REASON_NOMEM);
99 TRACE_DEFINE_ENUM(EXT4_FC_REASON_SWAP_BOOT);
100 TRACE_DEFINE_ENUM(EXT4_FC_REASON_RESIZE);
101 TRACE_DEFINE_ENUM(EXT4_FC_REASON_RENAME_DIR);
102 TRACE_DEFINE_ENUM(EXT4_FC_REASON_FALLOC_RANGE);
103 TRACE_DEFINE_ENUM(EXT4_FC_REASON_INODE_JOURNAL_DATA);
104 TRACE_DEFINE_ENUM(EXT4_FC_REASON_ENCRYPTED_FILENAME);
105 TRACE_DEFINE_ENUM(EXT4_FC_REASON_MIGRATE);
106 TRACE_DEFINE_ENUM(EXT4_FC_REASON_VERITY);
107 TRACE_DEFINE_ENUM(EXT4_FC_REASON_MOVE_EXT);
108 TRACE_DEFINE_ENUM(EXT4_FC_REASON_MAX);
109 
110 #define show_fc_reason(reason)						\
111 	__print_symbolic(reason,					\
112 		{ EXT4_FC_REASON_XATTR,		"XATTR"},		\
113 		{ EXT4_FC_REASON_CROSS_RENAME,	"CROSS_RENAME"},	\
114 		{ EXT4_FC_REASON_JOURNAL_FLAG_CHANGE, "JOURNAL_FLAG_CHANGE"}, \
115 		{ EXT4_FC_REASON_NOMEM,	"NO_MEM"},			\
116 		{ EXT4_FC_REASON_SWAP_BOOT,	"SWAP_BOOT"},		\
117 		{ EXT4_FC_REASON_RESIZE,	"RESIZE"},		\
118 		{ EXT4_FC_REASON_RENAME_DIR,	"RENAME_DIR"},		\
119 		{ EXT4_FC_REASON_FALLOC_RANGE,	"FALLOC_RANGE"},	\
120 		{ EXT4_FC_REASON_INODE_JOURNAL_DATA,	"INODE_JOURNAL_DATA"}, \
121 		{ EXT4_FC_REASON_ENCRYPTED_FILENAME,	"ENCRYPTED_FILENAME"}, \
122 		{ EXT4_FC_REASON_MIGRATE,		"MIGRATE"},	\
123 		{ EXT4_FC_REASON_VERITY,		"VERITY"},	\
124 		{ EXT4_FC_REASON_MOVE_EXT,		"MOVE_EXT"})
125 
126 TRACE_DEFINE_ENUM(CR_POWER2_ALIGNED);
127 TRACE_DEFINE_ENUM(CR_GOAL_LEN_FAST);
128 TRACE_DEFINE_ENUM(CR_BEST_AVAIL_LEN);
129 TRACE_DEFINE_ENUM(CR_GOAL_LEN_SLOW);
130 TRACE_DEFINE_ENUM(CR_ANY_FREE);
131 
132 #define show_criteria(cr)                                               \
133 	__print_symbolic(cr,                                            \
134 			 { CR_POWER2_ALIGNED, "CR_POWER2_ALIGNED" },	\
135 			 { CR_GOAL_LEN_FAST, "CR_GOAL_LEN_FAST" },      \
136 			 { CR_BEST_AVAIL_LEN, "CR_BEST_AVAIL_LEN" },    \
137 			 { CR_GOAL_LEN_SLOW, "CR_GOAL_LEN_SLOW" },      \
138 			 { CR_ANY_FREE, "CR_ANY_FREE" })
139 
140 TRACE_EVENT(ext4_other_inode_update_time,
141 	TP_PROTO(struct inode *inode, ino_t orig_ino),
142 
143 	TP_ARGS(inode, orig_ino),
144 
145 	TP_STRUCT__entry(
146 		__field(	dev_t,	dev			)
147 		__field(	ino_t,	ino			)
148 		__field(	ino_t,	orig_ino		)
149 		__field(	uid_t,	uid			)
150 		__field(	gid_t,	gid			)
151 		__field(	__u16, mode			)
152 	),
153 
154 	TP_fast_assign(
155 		__entry->orig_ino = orig_ino;
156 		__entry->dev	= inode->i_sb->s_dev;
157 		__entry->ino	= inode->i_ino;
158 		__entry->uid	= i_uid_read(inode);
159 		__entry->gid	= i_gid_read(inode);
160 		__entry->mode	= inode->i_mode;
161 	),
162 
163 	TP_printk("dev %d,%d orig_ino %lu ino %lu mode 0%o uid %u gid %u",
164 		  MAJOR(__entry->dev), MINOR(__entry->dev),
165 		  (unsigned long) __entry->orig_ino,
166 		  (unsigned long) __entry->ino, __entry->mode,
167 		  __entry->uid, __entry->gid)
168 );
169 
170 TRACE_EVENT(ext4_free_inode,
171 	TP_PROTO(struct inode *inode),
172 
173 	TP_ARGS(inode),
174 
175 	TP_STRUCT__entry(
176 		__field(	dev_t,	dev			)
177 		__field(	ino_t,	ino			)
178 		__field(	uid_t,	uid			)
179 		__field(	gid_t,	gid			)
180 		__field(	__u64, blocks			)
181 		__field(	__u16, mode			)
182 	),
183 
184 	TP_fast_assign(
185 		__entry->dev	= inode->i_sb->s_dev;
186 		__entry->ino	= inode->i_ino;
187 		__entry->uid	= i_uid_read(inode);
188 		__entry->gid	= i_gid_read(inode);
189 		__entry->blocks	= inode->i_blocks;
190 		__entry->mode	= inode->i_mode;
191 	),
192 
193 	TP_printk("dev %d,%d ino %lu mode 0%o uid %u gid %u blocks %llu",
194 		  MAJOR(__entry->dev), MINOR(__entry->dev),
195 		  (unsigned long) __entry->ino, __entry->mode,
196 		  __entry->uid, __entry->gid, __entry->blocks)
197 );
198 
199 TRACE_EVENT(ext4_request_inode,
200 	TP_PROTO(struct inode *dir, int mode),
201 
202 	TP_ARGS(dir, mode),
203 
204 	TP_STRUCT__entry(
205 		__field(	dev_t,	dev			)
206 		__field(	ino_t,	dir			)
207 		__field(	__u16, mode			)
208 	),
209 
210 	TP_fast_assign(
211 		__entry->dev	= dir->i_sb->s_dev;
212 		__entry->dir	= dir->i_ino;
213 		__entry->mode	= mode;
214 	),
215 
216 	TP_printk("dev %d,%d dir %lu mode 0%o",
217 		  MAJOR(__entry->dev), MINOR(__entry->dev),
218 		  (unsigned long) __entry->dir, __entry->mode)
219 );
220 
221 TRACE_EVENT(ext4_allocate_inode,
222 	TP_PROTO(struct inode *inode, struct inode *dir, int mode),
223 
224 	TP_ARGS(inode, dir, mode),
225 
226 	TP_STRUCT__entry(
227 		__field(	dev_t,	dev			)
228 		__field(	ino_t,	ino			)
229 		__field(	ino_t,	dir			)
230 		__field(	__u16,	mode			)
231 	),
232 
233 	TP_fast_assign(
234 		__entry->dev	= inode->i_sb->s_dev;
235 		__entry->ino	= inode->i_ino;
236 		__entry->dir	= dir->i_ino;
237 		__entry->mode	= mode;
238 	),
239 
240 	TP_printk("dev %d,%d ino %lu dir %lu mode 0%o",
241 		  MAJOR(__entry->dev), MINOR(__entry->dev),
242 		  (unsigned long) __entry->ino,
243 		  (unsigned long) __entry->dir, __entry->mode)
244 );
245 
246 TRACE_EVENT(ext4_evict_inode,
247 	TP_PROTO(struct inode *inode),
248 
249 	TP_ARGS(inode),
250 
251 	TP_STRUCT__entry(
252 		__field(	dev_t,	dev			)
253 		__field(	ino_t,	ino			)
254 		__field(	int,	nlink			)
255 	),
256 
257 	TP_fast_assign(
258 		__entry->dev	= inode->i_sb->s_dev;
259 		__entry->ino	= inode->i_ino;
260 		__entry->nlink	= inode->i_nlink;
261 	),
262 
263 	TP_printk("dev %d,%d ino %lu nlink %d",
264 		  MAJOR(__entry->dev), MINOR(__entry->dev),
265 		  (unsigned long) __entry->ino, __entry->nlink)
266 );
267 
268 TRACE_EVENT(ext4_drop_inode,
269 	TP_PROTO(struct inode *inode, int drop),
270 
271 	TP_ARGS(inode, drop),
272 
273 	TP_STRUCT__entry(
274 		__field(	dev_t,	dev			)
275 		__field(	ino_t,	ino			)
276 		__field(	int,	drop			)
277 	),
278 
279 	TP_fast_assign(
280 		__entry->dev	= inode->i_sb->s_dev;
281 		__entry->ino	= inode->i_ino;
282 		__entry->drop	= drop;
283 	),
284 
285 	TP_printk("dev %d,%d ino %lu drop %d",
286 		  MAJOR(__entry->dev), MINOR(__entry->dev),
287 		  (unsigned long) __entry->ino, __entry->drop)
288 );
289 
290 TRACE_EVENT(ext4_nfs_commit_metadata,
291 	TP_PROTO(struct inode *inode),
292 
293 	TP_ARGS(inode),
294 
295 	TP_STRUCT__entry(
296 		__field(	dev_t,	dev			)
297 		__field(	ino_t,	ino			)
298 	),
299 
300 	TP_fast_assign(
301 		__entry->dev	= inode->i_sb->s_dev;
302 		__entry->ino	= inode->i_ino;
303 	),
304 
305 	TP_printk("dev %d,%d ino %lu",
306 		  MAJOR(__entry->dev), MINOR(__entry->dev),
307 		  (unsigned long) __entry->ino)
308 );
309 
310 TRACE_EVENT(ext4_mark_inode_dirty,
311 	TP_PROTO(struct inode *inode, unsigned long IP),
312 
313 	TP_ARGS(inode, IP),
314 
315 	TP_STRUCT__entry(
316 		__field(	dev_t,	dev			)
317 		__field(	ino_t,	ino			)
318 		__field(unsigned long,	ip			)
319 	),
320 
321 	TP_fast_assign(
322 		__entry->dev	= inode->i_sb->s_dev;
323 		__entry->ino	= inode->i_ino;
324 		__entry->ip	= IP;
325 	),
326 
327 	TP_printk("dev %d,%d ino %lu caller %pS",
328 		  MAJOR(__entry->dev), MINOR(__entry->dev),
329 		  (unsigned long) __entry->ino, (void *)__entry->ip)
330 );
331 
332 TRACE_EVENT(ext4_begin_ordered_truncate,
333 	TP_PROTO(struct inode *inode, loff_t new_size),
334 
335 	TP_ARGS(inode, new_size),
336 
337 	TP_STRUCT__entry(
338 		__field(	dev_t,	dev			)
339 		__field(	ino_t,	ino			)
340 		__field(	loff_t,	new_size		)
341 	),
342 
343 	TP_fast_assign(
344 		__entry->dev		= inode->i_sb->s_dev;
345 		__entry->ino		= inode->i_ino;
346 		__entry->new_size	= new_size;
347 	),
348 
349 	TP_printk("dev %d,%d ino %lu new_size %lld",
350 		  MAJOR(__entry->dev), MINOR(__entry->dev),
351 		  (unsigned long) __entry->ino,
352 		  __entry->new_size)
353 );
354 
355 DECLARE_EVENT_CLASS(ext4__write_begin,
356 
357 	TP_PROTO(struct inode *inode, loff_t pos, unsigned int len),
358 
359 	TP_ARGS(inode, pos, len),
360 
361 	TP_STRUCT__entry(
362 		__field(	dev_t,	dev			)
363 		__field(	ino_t,	ino			)
364 		__field(	loff_t,	pos			)
365 		__field(	unsigned int, len		)
366 	),
367 
368 	TP_fast_assign(
369 		__entry->dev	= inode->i_sb->s_dev;
370 		__entry->ino	= inode->i_ino;
371 		__entry->pos	= pos;
372 		__entry->len	= len;
373 	),
374 
375 	TP_printk("dev %d,%d ino %lu pos %lld len %u",
376 		  MAJOR(__entry->dev), MINOR(__entry->dev),
377 		  (unsigned long) __entry->ino,
378 		  __entry->pos, __entry->len)
379 );
380 
381 DEFINE_EVENT(ext4__write_begin, ext4_write_begin,
382 
383 	TP_PROTO(struct inode *inode, loff_t pos, unsigned int len),
384 
385 	TP_ARGS(inode, pos, len)
386 );
387 
388 DEFINE_EVENT(ext4__write_begin, ext4_da_write_begin,
389 
390 	TP_PROTO(struct inode *inode, loff_t pos, unsigned int len),
391 
392 	TP_ARGS(inode, pos, len)
393 );
394 
395 DECLARE_EVENT_CLASS(ext4__write_end,
396 	TP_PROTO(struct inode *inode, loff_t pos, unsigned int len,
397 			unsigned int copied),
398 
399 	TP_ARGS(inode, pos, len, copied),
400 
401 	TP_STRUCT__entry(
402 		__field(	dev_t,	dev			)
403 		__field(	ino_t,	ino			)
404 		__field(	loff_t,	pos			)
405 		__field(	unsigned int, len		)
406 		__field(	unsigned int, copied		)
407 	),
408 
409 	TP_fast_assign(
410 		__entry->dev	= inode->i_sb->s_dev;
411 		__entry->ino	= inode->i_ino;
412 		__entry->pos	= pos;
413 		__entry->len	= len;
414 		__entry->copied	= copied;
415 	),
416 
417 	TP_printk("dev %d,%d ino %lu pos %lld len %u copied %u",
418 		  MAJOR(__entry->dev), MINOR(__entry->dev),
419 		  (unsigned long) __entry->ino,
420 		  __entry->pos, __entry->len, __entry->copied)
421 );
422 
423 DEFINE_EVENT(ext4__write_end, ext4_write_end,
424 
425 	TP_PROTO(struct inode *inode, loff_t pos, unsigned int len,
426 		 unsigned int copied),
427 
428 	TP_ARGS(inode, pos, len, copied)
429 );
430 
431 DEFINE_EVENT(ext4__write_end, ext4_journalled_write_end,
432 
433 	TP_PROTO(struct inode *inode, loff_t pos, unsigned int len,
434 		 unsigned int copied),
435 
436 	TP_ARGS(inode, pos, len, copied)
437 );
438 
439 DEFINE_EVENT(ext4__write_end, ext4_da_write_end,
440 
441 	TP_PROTO(struct inode *inode, loff_t pos, unsigned int len,
442 		 unsigned int copied),
443 
444 	TP_ARGS(inode, pos, len, copied)
445 );
446 
447 TRACE_EVENT(ext4_writepages,
448 	TP_PROTO(struct inode *inode, struct writeback_control *wbc),
449 
450 	TP_ARGS(inode, wbc),
451 
452 	TP_STRUCT__entry(
453 		__field(	dev_t,	dev			)
454 		__field(	ino_t,	ino			)
455 		__field(	long,	nr_to_write		)
456 		__field(	long,	pages_skipped		)
457 		__field(	loff_t,	range_start		)
458 		__field(	loff_t,	range_end		)
459 		__field(       pgoff_t,	writeback_index		)
460 		__field(	int,	sync_mode		)
461 		__field(	char,	for_kupdate		)
462 		__field(	char,	range_cyclic		)
463 	),
464 
465 	TP_fast_assign(
466 		__entry->dev		= inode->i_sb->s_dev;
467 		__entry->ino		= inode->i_ino;
468 		__entry->nr_to_write	= wbc->nr_to_write;
469 		__entry->pages_skipped	= wbc->pages_skipped;
470 		__entry->range_start	= wbc->range_start;
471 		__entry->range_end	= wbc->range_end;
472 		__entry->writeback_index = inode->i_mapping->writeback_index;
473 		__entry->sync_mode	= wbc->sync_mode;
474 		__entry->for_kupdate	= wbc->for_kupdate;
475 		__entry->range_cyclic	= wbc->range_cyclic;
476 	),
477 
478 	TP_printk("dev %d,%d ino %lu nr_to_write %ld pages_skipped %ld "
479 		  "range_start %lld range_end %lld sync_mode %d "
480 		  "for_kupdate %d range_cyclic %d writeback_index %lu",
481 		  MAJOR(__entry->dev), MINOR(__entry->dev),
482 		  (unsigned long) __entry->ino, __entry->nr_to_write,
483 		  __entry->pages_skipped, __entry->range_start,
484 		  __entry->range_end, __entry->sync_mode,
485 		  __entry->for_kupdate, __entry->range_cyclic,
486 		  (unsigned long) __entry->writeback_index)
487 );
488 
489 TRACE_EVENT(ext4_da_write_folios_start,
490 	TP_PROTO(struct inode *inode, loff_t start_pos, loff_t next_pos,
491 		 struct writeback_control *wbc),
492 
493 	TP_ARGS(inode, start_pos, next_pos, wbc),
494 
495 	TP_STRUCT__entry(
496 		__field(	dev_t,	dev			)
497 		__field(	ino_t,	ino			)
498 		__field(       loff_t,	start_pos		)
499 		__field(       loff_t,	next_pos		)
500 		__field(	 long,	nr_to_write		)
501 		__field(	  int,	sync_mode		)
502 	),
503 
504 	TP_fast_assign(
505 		__entry->dev		= inode->i_sb->s_dev;
506 		__entry->ino		= inode->i_ino;
507 		__entry->start_pos	= start_pos;
508 		__entry->next_pos	= next_pos;
509 		__entry->nr_to_write	= wbc->nr_to_write;
510 		__entry->sync_mode	= wbc->sync_mode;
511 	),
512 
513 	TP_printk("dev %d,%d ino %lu start_pos 0x%llx next_pos 0x%llx nr_to_write %ld sync_mode %d",
514 		  MAJOR(__entry->dev), MINOR(__entry->dev),
515 		  (unsigned long) __entry->ino, __entry->start_pos, __entry->next_pos,
516 		  __entry->nr_to_write, __entry->sync_mode)
517 );
518 
519 TRACE_EVENT(ext4_da_write_folios_end,
520 	TP_PROTO(struct inode *inode, loff_t start_pos, loff_t next_pos,
521 		 struct writeback_control *wbc, int ret),
522 
523 	TP_ARGS(inode, start_pos, next_pos, wbc, ret),
524 
525 	TP_STRUCT__entry(
526 		__field(	dev_t,	dev			)
527 		__field(	ino_t,	ino			)
528 		__field(       loff_t,	start_pos		)
529 		__field(       loff_t,	next_pos		)
530 		__field(	 long,	nr_to_write		)
531 		__field(	  int,	ret			)
532 	),
533 
534 	TP_fast_assign(
535 		__entry->dev		= inode->i_sb->s_dev;
536 		__entry->ino		= inode->i_ino;
537 		__entry->start_pos	= start_pos;
538 		__entry->next_pos	= next_pos;
539 		__entry->nr_to_write	= wbc->nr_to_write;
540 		__entry->ret		= ret;
541 	),
542 
543 	TP_printk("dev %d,%d ino %lu start_pos 0x%llx next_pos 0x%llx nr_to_write %ld ret %d",
544 		  MAJOR(__entry->dev), MINOR(__entry->dev),
545 		  (unsigned long) __entry->ino, __entry->start_pos, __entry->next_pos,
546 		  __entry->nr_to_write, __entry->ret)
547 );
548 
549 TRACE_EVENT(ext4_da_write_pages_extent,
550 	TP_PROTO(struct inode *inode, struct ext4_map_blocks *map),
551 
552 	TP_ARGS(inode, map),
553 
554 	TP_STRUCT__entry(
555 		__field(	dev_t,	dev			)
556 		__field(	ino_t,	ino			)
557 		__field(	__u64,	lblk			)
558 		__field(	__u32,	len			)
559 		__field(	__u32,	flags			)
560 	),
561 
562 	TP_fast_assign(
563 		__entry->dev		= inode->i_sb->s_dev;
564 		__entry->ino		= inode->i_ino;
565 		__entry->lblk		= map->m_lblk;
566 		__entry->len		= map->m_len;
567 		__entry->flags		= map->m_flags;
568 	),
569 
570 	TP_printk("dev %d,%d ino %lu lblk %llu len %u flags %s",
571 		  MAJOR(__entry->dev), MINOR(__entry->dev),
572 		  (unsigned long) __entry->ino, __entry->lblk, __entry->len,
573 		  show_mflags(__entry->flags))
574 );
575 
576 TRACE_EVENT(ext4_writepages_result,
577 	TP_PROTO(struct inode *inode, struct writeback_control *wbc,
578 			int ret, int pages_written),
579 
580 	TP_ARGS(inode, wbc, ret, pages_written),
581 
582 	TP_STRUCT__entry(
583 		__field(	dev_t,	dev			)
584 		__field(	ino_t,	ino			)
585 		__field(	int,	ret			)
586 		__field(	int,	pages_written		)
587 		__field(	long,	pages_skipped		)
588 		__field(       pgoff_t,	writeback_index		)
589 		__field(	int,	sync_mode		)
590 	),
591 
592 	TP_fast_assign(
593 		__entry->dev		= inode->i_sb->s_dev;
594 		__entry->ino		= inode->i_ino;
595 		__entry->ret		= ret;
596 		__entry->pages_written	= pages_written;
597 		__entry->pages_skipped	= wbc->pages_skipped;
598 		__entry->writeback_index = inode->i_mapping->writeback_index;
599 		__entry->sync_mode	= wbc->sync_mode;
600 	),
601 
602 	TP_printk("dev %d,%d ino %lu ret %d pages_written %d pages_skipped %ld "
603 		  "sync_mode %d writeback_index %lu",
604 		  MAJOR(__entry->dev), MINOR(__entry->dev),
605 		  (unsigned long) __entry->ino, __entry->ret,
606 		  __entry->pages_written, __entry->pages_skipped,
607 		  __entry->sync_mode,
608 		  (unsigned long) __entry->writeback_index)
609 );
610 
611 DECLARE_EVENT_CLASS(ext4__folio_op,
612 	TP_PROTO(struct inode *inode, struct folio *folio),
613 
614 	TP_ARGS(inode, folio),
615 
616 	TP_STRUCT__entry(
617 		__field(	dev_t,	dev			)
618 		__field(	ino_t,	ino			)
619 		__field(	pgoff_t, index			)
620 
621 	),
622 
623 	TP_fast_assign(
624 		__entry->dev	= inode->i_sb->s_dev;
625 		__entry->ino	= inode->i_ino;
626 		__entry->index	= folio->index;
627 	),
628 
629 	TP_printk("dev %d,%d ino %lu folio_index %lu",
630 		  MAJOR(__entry->dev), MINOR(__entry->dev),
631 		  (unsigned long) __entry->ino,
632 		  (unsigned long) __entry->index)
633 );
634 
635 DEFINE_EVENT(ext4__folio_op, ext4_read_folio,
636 
637 	TP_PROTO(struct inode *inode, struct folio *folio),
638 
639 	TP_ARGS(inode, folio)
640 );
641 
642 DEFINE_EVENT(ext4__folio_op, ext4_release_folio,
643 
644 	TP_PROTO(struct inode *inode, struct folio *folio),
645 
646 	TP_ARGS(inode, folio)
647 );
648 
649 DECLARE_EVENT_CLASS(ext4_invalidate_folio_op,
650 	TP_PROTO(struct folio *folio, size_t offset, size_t length),
651 
652 	TP_ARGS(folio, offset, length),
653 
654 	TP_STRUCT__entry(
655 		__field(	dev_t,	dev			)
656 		__field(	ino_t,	ino			)
657 		__field(	pgoff_t, index			)
658 		__field(	size_t, offset			)
659 		__field(	size_t, length			)
660 	),
661 
662 	TP_fast_assign(
663 		__entry->dev	= folio->mapping->host->i_sb->s_dev;
664 		__entry->ino	= folio->mapping->host->i_ino;
665 		__entry->index	= folio->index;
666 		__entry->offset	= offset;
667 		__entry->length	= length;
668 	),
669 
670 	TP_printk("dev %d,%d ino %lu folio_index %lu offset %zu length %zu",
671 		  MAJOR(__entry->dev), MINOR(__entry->dev),
672 		  (unsigned long) __entry->ino,
673 		  (unsigned long) __entry->index,
674 		  __entry->offset, __entry->length)
675 );
676 
677 DEFINE_EVENT(ext4_invalidate_folio_op, ext4_invalidate_folio,
678 	TP_PROTO(struct folio *folio, size_t offset, size_t length),
679 
680 	TP_ARGS(folio, offset, length)
681 );
682 
683 DEFINE_EVENT(ext4_invalidate_folio_op, ext4_journalled_invalidate_folio,
684 	TP_PROTO(struct folio *folio, size_t offset, size_t length),
685 
686 	TP_ARGS(folio, offset, length)
687 );
688 
689 TRACE_EVENT(ext4_discard_blocks,
690 	TP_PROTO(struct super_block *sb, unsigned long long blk,
691 			unsigned long long count),
692 
693 	TP_ARGS(sb, blk, count),
694 
695 	TP_STRUCT__entry(
696 		__field(	dev_t,	dev			)
697 		__field(	__u64,	blk			)
698 		__field(	__u64,	count			)
699 
700 	),
701 
702 	TP_fast_assign(
703 		__entry->dev	= sb->s_dev;
704 		__entry->blk	= blk;
705 		__entry->count	= count;
706 	),
707 
708 	TP_printk("dev %d,%d blk %llu count %llu",
709 		  MAJOR(__entry->dev), MINOR(__entry->dev),
710 		  __entry->blk, __entry->count)
711 );
712 
713 DECLARE_EVENT_CLASS(ext4__mb_new_pa,
714 	TP_PROTO(struct ext4_allocation_context *ac,
715 		 struct ext4_prealloc_space *pa),
716 
717 	TP_ARGS(ac, pa),
718 
719 	TP_STRUCT__entry(
720 		__field(	dev_t,	dev			)
721 		__field(	ino_t,	ino			)
722 		__field(	__u64,	pa_pstart		)
723 		__field(	__u64,	pa_lstart		)
724 		__field(	__u32,	pa_len			)
725 
726 	),
727 
728 	TP_fast_assign(
729 		__entry->dev		= ac->ac_sb->s_dev;
730 		__entry->ino		= ac->ac_inode->i_ino;
731 		__entry->pa_pstart	= pa->pa_pstart;
732 		__entry->pa_lstart	= pa->pa_lstart;
733 		__entry->pa_len		= pa->pa_len;
734 	),
735 
736 	TP_printk("dev %d,%d ino %lu pstart %llu len %u lstart %llu",
737 		  MAJOR(__entry->dev), MINOR(__entry->dev),
738 		  (unsigned long) __entry->ino,
739 		  __entry->pa_pstart, __entry->pa_len, __entry->pa_lstart)
740 );
741 
742 DEFINE_EVENT(ext4__mb_new_pa, ext4_mb_new_inode_pa,
743 
744 	TP_PROTO(struct ext4_allocation_context *ac,
745 		 struct ext4_prealloc_space *pa),
746 
747 	TP_ARGS(ac, pa)
748 );
749 
750 DEFINE_EVENT(ext4__mb_new_pa, ext4_mb_new_group_pa,
751 
752 	TP_PROTO(struct ext4_allocation_context *ac,
753 		 struct ext4_prealloc_space *pa),
754 
755 	TP_ARGS(ac, pa)
756 );
757 
758 TRACE_EVENT(ext4_mb_release_inode_pa,
759 	TP_PROTO(struct ext4_prealloc_space *pa,
760 		 unsigned long long block, unsigned int count),
761 
762 	TP_ARGS(pa, block, count),
763 
764 	TP_STRUCT__entry(
765 		__field(	dev_t,	dev			)
766 		__field(	ino_t,	ino			)
767 		__field(	__u64,	block			)
768 		__field(	__u32,	count			)
769 
770 	),
771 
772 	TP_fast_assign(
773 		__entry->dev		= pa->pa_inode->i_sb->s_dev;
774 		__entry->ino		= pa->pa_inode->i_ino;
775 		__entry->block		= block;
776 		__entry->count		= count;
777 	),
778 
779 	TP_printk("dev %d,%d ino %lu block %llu count %u",
780 		  MAJOR(__entry->dev), MINOR(__entry->dev),
781 		  (unsigned long) __entry->ino,
782 		  __entry->block, __entry->count)
783 );
784 
785 TRACE_EVENT(ext4_mb_release_group_pa,
786 	TP_PROTO(struct super_block *sb, struct ext4_prealloc_space *pa),
787 
788 	TP_ARGS(sb, pa),
789 
790 	TP_STRUCT__entry(
791 		__field(	dev_t,	dev			)
792 		__field(	__u64,	pa_pstart		)
793 		__field(	__u32,	pa_len			)
794 
795 	),
796 
797 	TP_fast_assign(
798 		__entry->dev		= sb->s_dev;
799 		__entry->pa_pstart	= pa->pa_pstart;
800 		__entry->pa_len		= pa->pa_len;
801 	),
802 
803 	TP_printk("dev %d,%d pstart %llu len %u",
804 		  MAJOR(__entry->dev), MINOR(__entry->dev),
805 		  __entry->pa_pstart, __entry->pa_len)
806 );
807 
808 TRACE_EVENT(ext4_discard_preallocations,
809 	TP_PROTO(struct inode *inode, unsigned int len),
810 
811 	TP_ARGS(inode, len),
812 
813 	TP_STRUCT__entry(
814 		__field(	dev_t,		dev		)
815 		__field(	ino_t,		ino		)
816 		__field(	unsigned int,	len		)
817 
818 	),
819 
820 	TP_fast_assign(
821 		__entry->dev	= inode->i_sb->s_dev;
822 		__entry->ino	= inode->i_ino;
823 		__entry->len	= len;
824 	),
825 
826 	TP_printk("dev %d,%d ino %lu len: %u",
827 		  MAJOR(__entry->dev), MINOR(__entry->dev),
828 		  (unsigned long) __entry->ino, __entry->len)
829 );
830 
831 TRACE_EVENT(ext4_mb_discard_preallocations,
832 	TP_PROTO(struct super_block *sb, int needed),
833 
834 	TP_ARGS(sb, needed),
835 
836 	TP_STRUCT__entry(
837 		__field(	dev_t,	dev			)
838 		__field(	int,	needed			)
839 
840 	),
841 
842 	TP_fast_assign(
843 		__entry->dev	= sb->s_dev;
844 		__entry->needed	= needed;
845 	),
846 
847 	TP_printk("dev %d,%d needed %d",
848 		  MAJOR(__entry->dev), MINOR(__entry->dev),
849 		  __entry->needed)
850 );
851 
852 TRACE_EVENT(ext4_request_blocks,
853 	TP_PROTO(struct ext4_allocation_request *ar),
854 
855 	TP_ARGS(ar),
856 
857 	TP_STRUCT__entry(
858 		__field(	dev_t,	dev			)
859 		__field(	ino_t,	ino			)
860 		__field(	unsigned int, len		)
861 		__field(	__u32,  logical			)
862 		__field(	__u32,	lleft			)
863 		__field(	__u32,	lright			)
864 		__field(	__u64,	goal			)
865 		__field(	__u64,	pleft			)
866 		__field(	__u64,	pright			)
867 		__field(	unsigned int, flags		)
868 	),
869 
870 	TP_fast_assign(
871 		__entry->dev	= ar->inode->i_sb->s_dev;
872 		__entry->ino	= ar->inode->i_ino;
873 		__entry->len	= ar->len;
874 		__entry->logical = ar->logical;
875 		__entry->goal	= ar->goal;
876 		__entry->lleft	= ar->lleft;
877 		__entry->lright	= ar->lright;
878 		__entry->pleft	= ar->pleft;
879 		__entry->pright	= ar->pright;
880 		__entry->flags	= ar->flags;
881 	),
882 
883 	TP_printk("dev %d,%d ino %lu flags %s len %u lblk %u goal %llu "
884 		  "lleft %u lright %u pleft %llu pright %llu ",
885 		  MAJOR(__entry->dev), MINOR(__entry->dev),
886 		  (unsigned long) __entry->ino, show_mballoc_flags(__entry->flags),
887 		  __entry->len, __entry->logical, __entry->goal,
888 		  __entry->lleft, __entry->lright, __entry->pleft,
889 		  __entry->pright)
890 );
891 
892 TRACE_EVENT(ext4_allocate_blocks,
893 	TP_PROTO(struct ext4_allocation_request *ar, unsigned long long block),
894 
895 	TP_ARGS(ar, block),
896 
897 	TP_STRUCT__entry(
898 		__field(	dev_t,	dev			)
899 		__field(	ino_t,	ino			)
900 		__field(	__u64,	block			)
901 		__field(	unsigned int, len		)
902 		__field(	__u32,  logical			)
903 		__field(	__u32,	lleft			)
904 		__field(	__u32,	lright			)
905 		__field(	__u64,	goal			)
906 		__field(	__u64,	pleft			)
907 		__field(	__u64,	pright			)
908 		__field(	unsigned int, flags		)
909 	),
910 
911 	TP_fast_assign(
912 		__entry->dev	= ar->inode->i_sb->s_dev;
913 		__entry->ino	= ar->inode->i_ino;
914 		__entry->block	= block;
915 		__entry->len	= ar->len;
916 		__entry->logical = ar->logical;
917 		__entry->goal	= ar->goal;
918 		__entry->lleft	= ar->lleft;
919 		__entry->lright	= ar->lright;
920 		__entry->pleft	= ar->pleft;
921 		__entry->pright	= ar->pright;
922 		__entry->flags	= ar->flags;
923 	),
924 
925 	TP_printk("dev %d,%d ino %lu flags %s len %u block %llu lblk %u "
926 		  "goal %llu lleft %u lright %u pleft %llu pright %llu",
927 		  MAJOR(__entry->dev), MINOR(__entry->dev),
928 		  (unsigned long) __entry->ino, show_mballoc_flags(__entry->flags),
929 		  __entry->len, __entry->block, __entry->logical,
930 		  __entry->goal,  __entry->lleft, __entry->lright,
931 		  __entry->pleft, __entry->pright)
932 );
933 
934 TRACE_EVENT(ext4_free_blocks,
935 	TP_PROTO(struct inode *inode, __u64 block, unsigned long count,
936 		 int flags),
937 
938 	TP_ARGS(inode, block, count, flags),
939 
940 	TP_STRUCT__entry(
941 		__field(	dev_t,	dev			)
942 		__field(	ino_t,	ino			)
943 		__field(	__u64,	block			)
944 		__field(	unsigned long,	count		)
945 		__field(	int,	flags			)
946 		__field(	__u16,	mode			)
947 	),
948 
949 	TP_fast_assign(
950 		__entry->dev		= inode->i_sb->s_dev;
951 		__entry->ino		= inode->i_ino;
952 		__entry->block		= block;
953 		__entry->count		= count;
954 		__entry->flags		= flags;
955 		__entry->mode		= inode->i_mode;
956 	),
957 
958 	TP_printk("dev %d,%d ino %lu mode 0%o block %llu count %lu flags %s",
959 		  MAJOR(__entry->dev), MINOR(__entry->dev),
960 		  (unsigned long) __entry->ino,
961 		  __entry->mode, __entry->block, __entry->count,
962 		  show_free_flags(__entry->flags))
963 );
964 
965 TRACE_EVENT(ext4_sync_file_enter,
966 	TP_PROTO(struct file *file, int datasync),
967 
968 	TP_ARGS(file, datasync),
969 
970 	TP_STRUCT__entry(
971 		__field(	dev_t,	dev			)
972 		__field(	ino_t,	ino			)
973 		__field(	ino_t,	parent			)
974 		__field(	int,	datasync		)
975 	),
976 
977 	TP_fast_assign(
978 		struct dentry *dentry = file->f_path.dentry;
979 
980 		__entry->dev		= dentry->d_sb->s_dev;
981 		__entry->ino		= d_inode(dentry)->i_ino;
982 		__entry->datasync	= datasync;
983 		__entry->parent		= d_inode(dentry->d_parent)->i_ino;
984 	),
985 
986 	TP_printk("dev %d,%d ino %lu parent %lu datasync %d ",
987 		  MAJOR(__entry->dev), MINOR(__entry->dev),
988 		  (unsigned long) __entry->ino,
989 		  (unsigned long) __entry->parent, __entry->datasync)
990 );
991 
992 TRACE_EVENT(ext4_sync_file_exit,
993 	TP_PROTO(struct inode *inode, int ret),
994 
995 	TP_ARGS(inode, ret),
996 
997 	TP_STRUCT__entry(
998 		__field(	dev_t,	dev			)
999 		__field(	ino_t,	ino			)
1000 		__field(	int,	ret			)
1001 	),
1002 
1003 	TP_fast_assign(
1004 		__entry->dev		= inode->i_sb->s_dev;
1005 		__entry->ino		= inode->i_ino;
1006 		__entry->ret		= ret;
1007 	),
1008 
1009 	TP_printk("dev %d,%d ino %lu ret %d",
1010 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1011 		  (unsigned long) __entry->ino,
1012 		  __entry->ret)
1013 );
1014 
1015 TRACE_EVENT(ext4_sync_fs,
1016 	TP_PROTO(struct super_block *sb, int wait),
1017 
1018 	TP_ARGS(sb, wait),
1019 
1020 	TP_STRUCT__entry(
1021 		__field(	dev_t,	dev			)
1022 		__field(	int,	wait			)
1023 
1024 	),
1025 
1026 	TP_fast_assign(
1027 		__entry->dev	= sb->s_dev;
1028 		__entry->wait	= wait;
1029 	),
1030 
1031 	TP_printk("dev %d,%d wait %d",
1032 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1033 		  __entry->wait)
1034 );
1035 
1036 TRACE_EVENT(ext4_alloc_da_blocks,
1037 	TP_PROTO(struct inode *inode),
1038 
1039 	TP_ARGS(inode),
1040 
1041 	TP_STRUCT__entry(
1042 		__field(	dev_t,	dev			)
1043 		__field(	ino_t,	ino			)
1044 		__field( unsigned int,	data_blocks		)
1045 	),
1046 
1047 	TP_fast_assign(
1048 		__entry->dev	= inode->i_sb->s_dev;
1049 		__entry->ino	= inode->i_ino;
1050 		__entry->data_blocks = EXT4_I(inode)->i_reserved_data_blocks;
1051 	),
1052 
1053 	TP_printk("dev %d,%d ino %lu reserved_data_blocks %u",
1054 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1055 		  (unsigned long) __entry->ino,
1056 		  __entry->data_blocks)
1057 );
1058 
1059 TRACE_EVENT(ext4_mballoc_alloc,
1060 	TP_PROTO(struct ext4_allocation_context *ac),
1061 
1062 	TP_ARGS(ac),
1063 
1064 	TP_STRUCT__entry(
1065 		__field(	dev_t,	dev			)
1066 		__field(	ino_t,	ino			)
1067 		__field(	__u32, 	orig_logical		)
1068 		__field(	  int,	orig_start		)
1069 		__field(	__u32, 	orig_group		)
1070 		__field(	  int,	orig_len		)
1071 		__field(	__u32, 	goal_logical		)
1072 		__field(	  int,	goal_start		)
1073 		__field(	__u32, 	goal_group		)
1074 		__field(	  int,	goal_len		)
1075 		__field(	__u32, 	result_logical		)
1076 		__field(	  int,	result_start		)
1077 		__field(	__u32, 	result_group		)
1078 		__field(	  int,	result_len		)
1079 		__field(	__u16,	found			)
1080 		__field(	__u16,	groups			)
1081 		__field(	__u16,	buddy			)
1082 		__field(	__u16,	flags			)
1083 		__field(	__u16,	tail			)
1084 		__field(	__u8,	cr			)
1085 	),
1086 
1087 	TP_fast_assign(
1088 		__entry->dev		= ac->ac_inode->i_sb->s_dev;
1089 		__entry->ino		= ac->ac_inode->i_ino;
1090 		__entry->orig_logical	= ac->ac_o_ex.fe_logical;
1091 		__entry->orig_start	= ac->ac_o_ex.fe_start;
1092 		__entry->orig_group	= ac->ac_o_ex.fe_group;
1093 		__entry->orig_len	= ac->ac_o_ex.fe_len;
1094 		__entry->goal_logical	= ac->ac_g_ex.fe_logical;
1095 		__entry->goal_start	= ac->ac_g_ex.fe_start;
1096 		__entry->goal_group	= ac->ac_g_ex.fe_group;
1097 		__entry->goal_len	= ac->ac_g_ex.fe_len;
1098 		__entry->result_logical	= ac->ac_f_ex.fe_logical;
1099 		__entry->result_start	= ac->ac_f_ex.fe_start;
1100 		__entry->result_group	= ac->ac_f_ex.fe_group;
1101 		__entry->result_len	= ac->ac_f_ex.fe_len;
1102 		__entry->found		= ac->ac_found;
1103 		__entry->flags		= ac->ac_flags;
1104 		__entry->groups		= ac->ac_groups_scanned;
1105 		__entry->buddy		= ac->ac_buddy;
1106 		__entry->tail		= ac->ac_tail;
1107 		__entry->cr		= ac->ac_criteria;
1108 	),
1109 
1110 	TP_printk("dev %d,%d inode %lu orig %u/%d/%u@%u goal %u/%d/%u@%u "
1111 		  "result %u/%d/%u@%u blks %u grps %u cr %s flags %s "
1112 		  "tail %u broken %u",
1113 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1114 		  (unsigned long) __entry->ino,
1115 		  __entry->orig_group, __entry->orig_start,
1116 		  __entry->orig_len, __entry->orig_logical,
1117 		  __entry->goal_group, __entry->goal_start,
1118 		  __entry->goal_len, __entry->goal_logical,
1119 		  __entry->result_group, __entry->result_start,
1120 		  __entry->result_len, __entry->result_logical,
1121 		  __entry->found, __entry->groups, show_criteria(__entry->cr),
1122 		  show_mballoc_flags(__entry->flags), __entry->tail,
1123 		  __entry->buddy ? 1 << __entry->buddy : 0)
1124 );
1125 
1126 TRACE_EVENT(ext4_mballoc_prealloc,
1127 	TP_PROTO(struct ext4_allocation_context *ac),
1128 
1129 	TP_ARGS(ac),
1130 
1131 	TP_STRUCT__entry(
1132 		__field(	dev_t,	dev			)
1133 		__field(	ino_t,	ino			)
1134 		__field(	__u32, 	orig_logical		)
1135 		__field(	  int,	orig_start		)
1136 		__field(	__u32, 	orig_group		)
1137 		__field(	  int,	orig_len		)
1138 		__field(	__u32, 	result_logical		)
1139 		__field(	  int,	result_start		)
1140 		__field(	__u32, 	result_group		)
1141 		__field(	  int,	result_len		)
1142 	),
1143 
1144 	TP_fast_assign(
1145 		__entry->dev		= ac->ac_inode->i_sb->s_dev;
1146 		__entry->ino		= ac->ac_inode->i_ino;
1147 		__entry->orig_logical	= ac->ac_o_ex.fe_logical;
1148 		__entry->orig_start	= ac->ac_o_ex.fe_start;
1149 		__entry->orig_group	= ac->ac_o_ex.fe_group;
1150 		__entry->orig_len	= ac->ac_o_ex.fe_len;
1151 		__entry->result_logical	= ac->ac_b_ex.fe_logical;
1152 		__entry->result_start	= ac->ac_b_ex.fe_start;
1153 		__entry->result_group	= ac->ac_b_ex.fe_group;
1154 		__entry->result_len	= ac->ac_b_ex.fe_len;
1155 	),
1156 
1157 	TP_printk("dev %d,%d inode %lu orig %u/%d/%u@%u result %u/%d/%u@%u",
1158 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1159 		  (unsigned long) __entry->ino,
1160 		  __entry->orig_group, __entry->orig_start,
1161 		  __entry->orig_len, __entry->orig_logical,
1162 		  __entry->result_group, __entry->result_start,
1163 		  __entry->result_len, __entry->result_logical)
1164 );
1165 
1166 DECLARE_EVENT_CLASS(ext4__mballoc,
1167 	TP_PROTO(struct super_block *sb,
1168 		 struct inode *inode,
1169 		 ext4_group_t group,
1170 		 ext4_grpblk_t start,
1171 		 ext4_grpblk_t len),
1172 
1173 	TP_ARGS(sb, inode, group, start, len),
1174 
1175 	TP_STRUCT__entry(
1176 		__field(	dev_t,	dev			)
1177 		__field(	ino_t,	ino			)
1178 		__field(	  int,	result_start		)
1179 		__field(	__u32, 	result_group		)
1180 		__field(	  int,	result_len		)
1181 	),
1182 
1183 	TP_fast_assign(
1184 		__entry->dev		= sb->s_dev;
1185 		__entry->ino		= inode ? inode->i_ino : 0;
1186 		__entry->result_start	= start;
1187 		__entry->result_group	= group;
1188 		__entry->result_len	= len;
1189 	),
1190 
1191 	TP_printk("dev %d,%d inode %lu extent %u/%d/%d ",
1192 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1193 		  (unsigned long) __entry->ino,
1194 		  __entry->result_group, __entry->result_start,
1195 		  __entry->result_len)
1196 );
1197 
1198 DEFINE_EVENT(ext4__mballoc, ext4_mballoc_discard,
1199 
1200 	TP_PROTO(struct super_block *sb,
1201 		 struct inode *inode,
1202 		 ext4_group_t group,
1203 		 ext4_grpblk_t start,
1204 		 ext4_grpblk_t len),
1205 
1206 	TP_ARGS(sb, inode, group, start, len)
1207 );
1208 
1209 DEFINE_EVENT(ext4__mballoc, ext4_mballoc_free,
1210 
1211 	TP_PROTO(struct super_block *sb,
1212 		 struct inode *inode,
1213 		 ext4_group_t group,
1214 		 ext4_grpblk_t start,
1215 		 ext4_grpblk_t len),
1216 
1217 	TP_ARGS(sb, inode, group, start, len)
1218 );
1219 
1220 TRACE_EVENT(ext4_forget,
1221 	TP_PROTO(struct inode *inode, int is_metadata, __u64 block),
1222 
1223 	TP_ARGS(inode, is_metadata, block),
1224 
1225 	TP_STRUCT__entry(
1226 		__field(	dev_t,	dev			)
1227 		__field(	ino_t,	ino			)
1228 		__field(	__u64,	block			)
1229 		__field(	int,	is_metadata		)
1230 		__field(	__u16,	mode			)
1231 	),
1232 
1233 	TP_fast_assign(
1234 		__entry->dev	= inode->i_sb->s_dev;
1235 		__entry->ino	= inode->i_ino;
1236 		__entry->block	= block;
1237 		__entry->is_metadata = is_metadata;
1238 		__entry->mode	= inode->i_mode;
1239 	),
1240 
1241 	TP_printk("dev %d,%d ino %lu mode 0%o is_metadata %d block %llu",
1242 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1243 		  (unsigned long) __entry->ino,
1244 		  __entry->mode, __entry->is_metadata, __entry->block)
1245 );
1246 
1247 TRACE_EVENT(ext4_da_update_reserve_space,
1248 	TP_PROTO(struct inode *inode, int used_blocks, int quota_claim),
1249 
1250 	TP_ARGS(inode, used_blocks, quota_claim),
1251 
1252 	TP_STRUCT__entry(
1253 		__field(	dev_t,	dev			)
1254 		__field(	ino_t,	ino			)
1255 		__field(	__u64,	i_blocks		)
1256 		__field(	int,	used_blocks		)
1257 		__field(	int,	reserved_data_blocks	)
1258 		__field(	int,	quota_claim		)
1259 		__field(	__u16,	mode			)
1260 	),
1261 
1262 	TP_fast_assign(
1263 		__entry->dev	= inode->i_sb->s_dev;
1264 		__entry->ino	= inode->i_ino;
1265 		__entry->i_blocks = inode->i_blocks;
1266 		__entry->used_blocks = used_blocks;
1267 		__entry->reserved_data_blocks =
1268 				EXT4_I(inode)->i_reserved_data_blocks;
1269 		__entry->quota_claim = quota_claim;
1270 		__entry->mode	= inode->i_mode;
1271 	),
1272 
1273 	TP_printk("dev %d,%d ino %lu mode 0%o i_blocks %llu used_blocks %d "
1274 		  "reserved_data_blocks %d quota_claim %d",
1275 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1276 		  (unsigned long) __entry->ino,
1277 		  __entry->mode, __entry->i_blocks,
1278 		  __entry->used_blocks, __entry->reserved_data_blocks,
1279 		  __entry->quota_claim)
1280 );
1281 
1282 TRACE_EVENT(ext4_da_reserve_space,
1283 	TP_PROTO(struct inode *inode, int nr_resv),
1284 
1285 	TP_ARGS(inode, nr_resv),
1286 
1287 	TP_STRUCT__entry(
1288 		__field(	dev_t,	dev			)
1289 		__field(	ino_t,	ino			)
1290 		__field(	__u64,	i_blocks		)
1291 		__field(	int,	reserve_blocks		)
1292 		__field(	int,	reserved_data_blocks	)
1293 		__field(	__u16,  mode			)
1294 	),
1295 
1296 	TP_fast_assign(
1297 		__entry->dev	= inode->i_sb->s_dev;
1298 		__entry->ino	= inode->i_ino;
1299 		__entry->i_blocks = inode->i_blocks;
1300 		__entry->reserve_blocks = nr_resv;
1301 		__entry->reserved_data_blocks = EXT4_I(inode)->i_reserved_data_blocks;
1302 		__entry->mode	= inode->i_mode;
1303 	),
1304 
1305 	TP_printk("dev %d,%d ino %lu mode 0%o i_blocks %llu reserve_blocks %d"
1306 		  "reserved_data_blocks %d",
1307 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1308 		  (unsigned long) __entry->ino,
1309 		  __entry->mode, __entry->i_blocks,
1310 		  __entry->reserve_blocks, __entry->reserved_data_blocks)
1311 );
1312 
1313 TRACE_EVENT(ext4_da_release_space,
1314 	TP_PROTO(struct inode *inode, int freed_blocks),
1315 
1316 	TP_ARGS(inode, freed_blocks),
1317 
1318 	TP_STRUCT__entry(
1319 		__field(	dev_t,	dev			)
1320 		__field(	ino_t,	ino			)
1321 		__field(	__u64,	i_blocks		)
1322 		__field(	int,	freed_blocks		)
1323 		__field(	int,	reserved_data_blocks	)
1324 		__field(	__u16,  mode			)
1325 	),
1326 
1327 	TP_fast_assign(
1328 		__entry->dev	= inode->i_sb->s_dev;
1329 		__entry->ino	= inode->i_ino;
1330 		__entry->i_blocks = inode->i_blocks;
1331 		__entry->freed_blocks = freed_blocks;
1332 		__entry->reserved_data_blocks = EXT4_I(inode)->i_reserved_data_blocks;
1333 		__entry->mode	= inode->i_mode;
1334 	),
1335 
1336 	TP_printk("dev %d,%d ino %lu mode 0%o i_blocks %llu freed_blocks %d "
1337 		  "reserved_data_blocks %d",
1338 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1339 		  (unsigned long) __entry->ino,
1340 		  __entry->mode, __entry->i_blocks,
1341 		  __entry->freed_blocks, __entry->reserved_data_blocks)
1342 );
1343 
1344 DECLARE_EVENT_CLASS(ext4__bitmap_load,
1345 	TP_PROTO(struct super_block *sb, unsigned long group),
1346 
1347 	TP_ARGS(sb, group),
1348 
1349 	TP_STRUCT__entry(
1350 		__field(	dev_t,	dev			)
1351 		__field(	__u32,	group			)
1352 
1353 	),
1354 
1355 	TP_fast_assign(
1356 		__entry->dev	= sb->s_dev;
1357 		__entry->group	= group;
1358 	),
1359 
1360 	TP_printk("dev %d,%d group %u",
1361 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1362 		  __entry->group)
1363 );
1364 
1365 DEFINE_EVENT(ext4__bitmap_load, ext4_mb_bitmap_load,
1366 
1367 	TP_PROTO(struct super_block *sb, unsigned long group),
1368 
1369 	TP_ARGS(sb, group)
1370 );
1371 
1372 DEFINE_EVENT(ext4__bitmap_load, ext4_mb_buddy_bitmap_load,
1373 
1374 	TP_PROTO(struct super_block *sb, unsigned long group),
1375 
1376 	TP_ARGS(sb, group)
1377 );
1378 
1379 DEFINE_EVENT(ext4__bitmap_load, ext4_load_inode_bitmap,
1380 
1381 	TP_PROTO(struct super_block *sb, unsigned long group),
1382 
1383 	TP_ARGS(sb, group)
1384 );
1385 
1386 TRACE_EVENT(ext4_read_block_bitmap_load,
1387 	TP_PROTO(struct super_block *sb, unsigned long group, bool prefetch),
1388 
1389 	TP_ARGS(sb, group, prefetch),
1390 
1391 	TP_STRUCT__entry(
1392 		__field(	dev_t,	dev			)
1393 		__field(	__u32,	group			)
1394 		__field(	bool,	prefetch		)
1395 
1396 	),
1397 
1398 	TP_fast_assign(
1399 		__entry->dev	= sb->s_dev;
1400 		__entry->group	= group;
1401 		__entry->prefetch = prefetch;
1402 	),
1403 
1404 	TP_printk("dev %d,%d group %u prefetch %d",
1405 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1406 		  __entry->group, __entry->prefetch)
1407 );
1408 
1409 DECLARE_EVENT_CLASS(ext4__fallocate_mode,
1410 	TP_PROTO(struct inode *inode, loff_t offset, loff_t len, int mode),
1411 
1412 	TP_ARGS(inode, offset, len, mode),
1413 
1414 	TP_STRUCT__entry(
1415 		__field(	dev_t,	dev			)
1416 		__field(	ino_t,	ino			)
1417 		__field(	loff_t,	offset			)
1418 		__field(	loff_t, len			)
1419 		__field(	int,	mode			)
1420 	),
1421 
1422 	TP_fast_assign(
1423 		__entry->dev	= inode->i_sb->s_dev;
1424 		__entry->ino	= inode->i_ino;
1425 		__entry->offset	= offset;
1426 		__entry->len	= len;
1427 		__entry->mode	= mode;
1428 	),
1429 
1430 	TP_printk("dev %d,%d ino %lu offset %lld len %lld mode %s",
1431 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1432 		  (unsigned long) __entry->ino,
1433 		  __entry->offset, __entry->len,
1434 		  show_falloc_mode(__entry->mode))
1435 );
1436 
1437 DEFINE_EVENT(ext4__fallocate_mode, ext4_fallocate_enter,
1438 
1439 	TP_PROTO(struct inode *inode, loff_t offset, loff_t len, int mode),
1440 
1441 	TP_ARGS(inode, offset, len, mode)
1442 );
1443 
1444 DEFINE_EVENT(ext4__fallocate_mode, ext4_punch_hole,
1445 
1446 	TP_PROTO(struct inode *inode, loff_t offset, loff_t len, int mode),
1447 
1448 	TP_ARGS(inode, offset, len, mode)
1449 );
1450 
1451 DEFINE_EVENT(ext4__fallocate_mode, ext4_zero_range,
1452 
1453 	TP_PROTO(struct inode *inode, loff_t offset, loff_t len, int mode),
1454 
1455 	TP_ARGS(inode, offset, len, mode)
1456 );
1457 
1458 TRACE_EVENT(ext4_fallocate_exit,
1459 	TP_PROTO(struct inode *inode, loff_t offset,
1460 		 unsigned int max_blocks, int ret),
1461 
1462 	TP_ARGS(inode, offset, max_blocks, ret),
1463 
1464 	TP_STRUCT__entry(
1465 		__field(	dev_t,	dev			)
1466 		__field(	ino_t,	ino			)
1467 		__field(	loff_t,	pos			)
1468 		__field(	unsigned int,	blocks		)
1469 		__field(	int, 	ret			)
1470 	),
1471 
1472 	TP_fast_assign(
1473 		__entry->dev	= inode->i_sb->s_dev;
1474 		__entry->ino	= inode->i_ino;
1475 		__entry->pos	= offset;
1476 		__entry->blocks	= max_blocks;
1477 		__entry->ret	= ret;
1478 	),
1479 
1480 	TP_printk("dev %d,%d ino %lu pos %lld blocks %u ret %d",
1481 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1482 		  (unsigned long) __entry->ino,
1483 		  __entry->pos, __entry->blocks,
1484 		  __entry->ret)
1485 );
1486 
1487 TRACE_EVENT(ext4_unlink_enter,
1488 	TP_PROTO(struct inode *parent, struct dentry *dentry),
1489 
1490 	TP_ARGS(parent, dentry),
1491 
1492 	TP_STRUCT__entry(
1493 		__field(	dev_t,	dev			)
1494 		__field(	ino_t,	ino			)
1495 		__field(	ino_t,	parent			)
1496 		__field(	loff_t,	size			)
1497 	),
1498 
1499 	TP_fast_assign(
1500 		__entry->dev		= dentry->d_sb->s_dev;
1501 		__entry->ino		= d_inode(dentry)->i_ino;
1502 		__entry->parent		= parent->i_ino;
1503 		__entry->size		= d_inode(dentry)->i_size;
1504 	),
1505 
1506 	TP_printk("dev %d,%d ino %lu size %lld parent %lu",
1507 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1508 		  (unsigned long) __entry->ino, __entry->size,
1509 		  (unsigned long) __entry->parent)
1510 );
1511 
1512 TRACE_EVENT(ext4_unlink_exit,
1513 	TP_PROTO(struct dentry *dentry, int ret),
1514 
1515 	TP_ARGS(dentry, ret),
1516 
1517 	TP_STRUCT__entry(
1518 		__field(	dev_t,	dev			)
1519 		__field(	ino_t,	ino			)
1520 		__field(	int,	ret			)
1521 	),
1522 
1523 	TP_fast_assign(
1524 		__entry->dev		= dentry->d_sb->s_dev;
1525 		__entry->ino		= d_inode(dentry)->i_ino;
1526 		__entry->ret		= ret;
1527 	),
1528 
1529 	TP_printk("dev %d,%d ino %lu ret %d",
1530 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1531 		  (unsigned long) __entry->ino,
1532 		  __entry->ret)
1533 );
1534 
1535 DECLARE_EVENT_CLASS(ext4__truncate,
1536 	TP_PROTO(struct inode *inode),
1537 
1538 	TP_ARGS(inode),
1539 
1540 	TP_STRUCT__entry(
1541 		__field(	dev_t,		dev		)
1542 		__field(	ino_t,		ino		)
1543 		__field(	__u64,		blocks		)
1544 	),
1545 
1546 	TP_fast_assign(
1547 		__entry->dev    = inode->i_sb->s_dev;
1548 		__entry->ino    = inode->i_ino;
1549 		__entry->blocks	= inode->i_blocks;
1550 	),
1551 
1552 	TP_printk("dev %d,%d ino %lu blocks %llu",
1553 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1554 		  (unsigned long) __entry->ino, __entry->blocks)
1555 );
1556 
1557 DEFINE_EVENT(ext4__truncate, ext4_truncate_enter,
1558 
1559 	TP_PROTO(struct inode *inode),
1560 
1561 	TP_ARGS(inode)
1562 );
1563 
1564 DEFINE_EVENT(ext4__truncate, ext4_truncate_exit,
1565 
1566 	TP_PROTO(struct inode *inode),
1567 
1568 	TP_ARGS(inode)
1569 );
1570 
1571 /* 'ux' is the unwritten extent. */
1572 TRACE_EVENT(ext4_ext_convert_to_initialized_enter,
1573 	TP_PROTO(struct inode *inode, struct ext4_map_blocks *map,
1574 		 struct ext4_extent *ux),
1575 
1576 	TP_ARGS(inode, map, ux),
1577 
1578 	TP_STRUCT__entry(
1579 		__field(	dev_t,		dev	)
1580 		__field(	ino_t,		ino	)
1581 		__field(	ext4_lblk_t,	m_lblk	)
1582 		__field(	unsigned,	m_len	)
1583 		__field(	ext4_lblk_t,	u_lblk	)
1584 		__field(	unsigned,	u_len	)
1585 		__field(	ext4_fsblk_t,	u_pblk	)
1586 	),
1587 
1588 	TP_fast_assign(
1589 		__entry->dev		= inode->i_sb->s_dev;
1590 		__entry->ino		= inode->i_ino;
1591 		__entry->m_lblk		= map->m_lblk;
1592 		__entry->m_len		= map->m_len;
1593 		__entry->u_lblk		= le32_to_cpu(ux->ee_block);
1594 		__entry->u_len		= ext4_ext_get_actual_len(ux);
1595 		__entry->u_pblk		= ext4_ext_pblock(ux);
1596 	),
1597 
1598 	TP_printk("dev %d,%d ino %lu m_lblk %u m_len %u u_lblk %u u_len %u "
1599 		  "u_pblk %llu",
1600 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1601 		  (unsigned long) __entry->ino,
1602 		  __entry->m_lblk, __entry->m_len,
1603 		  __entry->u_lblk, __entry->u_len, __entry->u_pblk)
1604 );
1605 
1606 /*
1607  * 'ux' is the unwritten extent.
1608  * 'ix' is the initialized extent to which blocks are transferred.
1609  */
1610 TRACE_EVENT(ext4_ext_convert_to_initialized_fastpath,
1611 	TP_PROTO(struct inode *inode, struct ext4_map_blocks *map,
1612 		 struct ext4_extent *ux, struct ext4_extent *ix),
1613 
1614 	TP_ARGS(inode, map, ux, ix),
1615 
1616 	TP_STRUCT__entry(
1617 		__field(	dev_t,		dev	)
1618 		__field(	ino_t,		ino	)
1619 		__field(	ext4_lblk_t,	m_lblk	)
1620 		__field(	unsigned,	m_len	)
1621 		__field(	ext4_lblk_t,	u_lblk	)
1622 		__field(	unsigned,	u_len	)
1623 		__field(	ext4_fsblk_t,	u_pblk	)
1624 		__field(	ext4_lblk_t,	i_lblk	)
1625 		__field(	unsigned,	i_len	)
1626 		__field(	ext4_fsblk_t,	i_pblk	)
1627 	),
1628 
1629 	TP_fast_assign(
1630 		__entry->dev		= inode->i_sb->s_dev;
1631 		__entry->ino		= inode->i_ino;
1632 		__entry->m_lblk		= map->m_lblk;
1633 		__entry->m_len		= map->m_len;
1634 		__entry->u_lblk		= le32_to_cpu(ux->ee_block);
1635 		__entry->u_len		= ext4_ext_get_actual_len(ux);
1636 		__entry->u_pblk		= ext4_ext_pblock(ux);
1637 		__entry->i_lblk		= le32_to_cpu(ix->ee_block);
1638 		__entry->i_len		= ext4_ext_get_actual_len(ix);
1639 		__entry->i_pblk		= ext4_ext_pblock(ix);
1640 	),
1641 
1642 	TP_printk("dev %d,%d ino %lu m_lblk %u m_len %u "
1643 		  "u_lblk %u u_len %u u_pblk %llu "
1644 		  "i_lblk %u i_len %u i_pblk %llu ",
1645 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1646 		  (unsigned long) __entry->ino,
1647 		  __entry->m_lblk, __entry->m_len,
1648 		  __entry->u_lblk, __entry->u_len, __entry->u_pblk,
1649 		  __entry->i_lblk, __entry->i_len, __entry->i_pblk)
1650 );
1651 
1652 DECLARE_EVENT_CLASS(ext4__map_blocks_enter,
1653 	TP_PROTO(struct inode *inode, ext4_lblk_t lblk,
1654 		 unsigned int len, unsigned int flags),
1655 
1656 	TP_ARGS(inode, lblk, len, flags),
1657 
1658 	TP_STRUCT__entry(
1659 		__field(	dev_t,		dev		)
1660 		__field(	ino_t,		ino		)
1661 		__field(	ext4_lblk_t,	lblk		)
1662 		__field(	unsigned int,	len		)
1663 		__field(	unsigned int,	flags		)
1664 	),
1665 
1666 	TP_fast_assign(
1667 		__entry->dev    = inode->i_sb->s_dev;
1668 		__entry->ino    = inode->i_ino;
1669 		__entry->lblk	= lblk;
1670 		__entry->len	= len;
1671 		__entry->flags	= flags;
1672 	),
1673 
1674 	TP_printk("dev %d,%d ino %lu lblk %u len %u flags %s",
1675 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1676 		  (unsigned long) __entry->ino,
1677 		  __entry->lblk, __entry->len, show_map_flags(__entry->flags))
1678 );
1679 
1680 DEFINE_EVENT(ext4__map_blocks_enter, ext4_ext_map_blocks_enter,
1681 	TP_PROTO(struct inode *inode, ext4_lblk_t lblk,
1682 		 unsigned len, unsigned flags),
1683 
1684 	TP_ARGS(inode, lblk, len, flags)
1685 );
1686 
1687 DEFINE_EVENT(ext4__map_blocks_enter, ext4_ind_map_blocks_enter,
1688 	TP_PROTO(struct inode *inode, ext4_lblk_t lblk,
1689 		 unsigned len, unsigned flags),
1690 
1691 	TP_ARGS(inode, lblk, len, flags)
1692 );
1693 
1694 DECLARE_EVENT_CLASS(ext4__map_blocks_exit,
1695 	TP_PROTO(struct inode *inode, unsigned flags, struct ext4_map_blocks *map,
1696 		 int ret),
1697 
1698 	TP_ARGS(inode, flags, map, ret),
1699 
1700 	TP_STRUCT__entry(
1701 		__field(	dev_t,		dev		)
1702 		__field(	ino_t,		ino		)
1703 		__field(	unsigned int,	flags		)
1704 		__field(	ext4_fsblk_t,	pblk		)
1705 		__field(	ext4_lblk_t,	lblk		)
1706 		__field(	unsigned int,	len		)
1707 		__field(	unsigned int,	mflags		)
1708 		__field(	int,		ret		)
1709 	),
1710 
1711 	TP_fast_assign(
1712 		__entry->dev    = inode->i_sb->s_dev;
1713 		__entry->ino    = inode->i_ino;
1714 		__entry->flags	= flags;
1715 		__entry->pblk	= map->m_pblk;
1716 		__entry->lblk	= map->m_lblk;
1717 		__entry->len	= map->m_len;
1718 		__entry->mflags	= map->m_flags;
1719 		__entry->ret	= ret;
1720 	),
1721 
1722 	TP_printk("dev %d,%d ino %lu flags %s lblk %u pblk %llu len %u "
1723 		  "mflags %s ret %d",
1724 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1725 		  (unsigned long) __entry->ino,
1726 		  show_map_flags(__entry->flags), __entry->lblk, __entry->pblk,
1727 		  __entry->len, show_mflags(__entry->mflags), __entry->ret)
1728 );
1729 
1730 DEFINE_EVENT(ext4__map_blocks_exit, ext4_ext_map_blocks_exit,
1731 	TP_PROTO(struct inode *inode, unsigned flags,
1732 		 struct ext4_map_blocks *map, int ret),
1733 
1734 	TP_ARGS(inode, flags, map, ret)
1735 );
1736 
1737 DEFINE_EVENT(ext4__map_blocks_exit, ext4_ind_map_blocks_exit,
1738 	TP_PROTO(struct inode *inode, unsigned flags,
1739 		 struct ext4_map_blocks *map, int ret),
1740 
1741 	TP_ARGS(inode, flags, map, ret)
1742 );
1743 
1744 TRACE_EVENT(ext4_ext_load_extent,
1745 	TP_PROTO(struct inode *inode, ext4_lblk_t lblk, ext4_fsblk_t pblk),
1746 
1747 	TP_ARGS(inode, lblk, pblk),
1748 
1749 	TP_STRUCT__entry(
1750 		__field(	dev_t,		dev		)
1751 		__field(	ino_t,		ino		)
1752 		__field(	ext4_fsblk_t,	pblk		)
1753 		__field(	ext4_lblk_t,	lblk		)
1754 	),
1755 
1756 	TP_fast_assign(
1757 		__entry->dev    = inode->i_sb->s_dev;
1758 		__entry->ino    = inode->i_ino;
1759 		__entry->pblk	= pblk;
1760 		__entry->lblk	= lblk;
1761 	),
1762 
1763 	TP_printk("dev %d,%d ino %lu lblk %u pblk %llu",
1764 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1765 		  (unsigned long) __entry->ino,
1766 		  __entry->lblk, __entry->pblk)
1767 );
1768 
1769 TRACE_EVENT(ext4_load_inode,
1770 	TP_PROTO(struct super_block *sb, unsigned long ino),
1771 
1772 	TP_ARGS(sb, ino),
1773 
1774 	TP_STRUCT__entry(
1775 		__field(	dev_t,	dev		)
1776 		__field(	ino_t,	ino		)
1777 	),
1778 
1779 	TP_fast_assign(
1780 		__entry->dev		= sb->s_dev;
1781 		__entry->ino		= ino;
1782 	),
1783 
1784 	TP_printk("dev %d,%d ino %ld",
1785 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1786 		  (unsigned long) __entry->ino)
1787 );
1788 
1789 TRACE_EVENT(ext4_journal_start_sb,
1790 	TP_PROTO(struct super_block *sb, int blocks, int rsv_blocks,
1791 		 int revoke_creds, int type, unsigned long IP),
1792 
1793 	TP_ARGS(sb, blocks, rsv_blocks, revoke_creds, type, IP),
1794 
1795 	TP_STRUCT__entry(
1796 		__field(	dev_t,		dev		)
1797 		__field(	unsigned long,	ip		)
1798 		__field(	int,		blocks		)
1799 		__field(	int,		rsv_blocks	)
1800 		__field(	int,		revoke_creds	)
1801 		__field(	int,		type		)
1802 	),
1803 
1804 	TP_fast_assign(
1805 		__entry->dev		 = sb->s_dev;
1806 		__entry->ip		 = IP;
1807 		__entry->blocks		 = blocks;
1808 		__entry->rsv_blocks	 = rsv_blocks;
1809 		__entry->revoke_creds	 = revoke_creds;
1810 		__entry->type		 = type;
1811 	),
1812 
1813 	TP_printk("dev %d,%d blocks %d, rsv_blocks %d, revoke_creds %d,"
1814 		  " type %d, caller %pS", MAJOR(__entry->dev),
1815 		  MINOR(__entry->dev), __entry->blocks, __entry->rsv_blocks,
1816 		  __entry->revoke_creds, __entry->type, (void *)__entry->ip)
1817 );
1818 
1819 TRACE_EVENT(ext4_journal_start_inode,
1820 	TP_PROTO(struct inode *inode, int blocks, int rsv_blocks,
1821 		 int revoke_creds, int type, unsigned long IP),
1822 
1823 	TP_ARGS(inode, blocks, rsv_blocks, revoke_creds, type, IP),
1824 
1825 	TP_STRUCT__entry(
1826 		__field(	unsigned long,	ino		)
1827 		__field(	dev_t,		dev		)
1828 		__field(	unsigned long,	ip		)
1829 		__field(	int,		blocks		)
1830 		__field(	int,		rsv_blocks	)
1831 		__field(	int,		revoke_creds	)
1832 		__field(	int,		type		)
1833 	),
1834 
1835 	TP_fast_assign(
1836 		__entry->dev		 = inode->i_sb->s_dev;
1837 		__entry->ip		 = IP;
1838 		__entry->blocks		 = blocks;
1839 		__entry->rsv_blocks	 = rsv_blocks;
1840 		__entry->revoke_creds	 = revoke_creds;
1841 		__entry->type		 = type;
1842 		__entry->ino		 = inode->i_ino;
1843 	),
1844 
1845 	TP_printk("dev %d,%d blocks %d, rsv_blocks %d, revoke_creds %d,"
1846 		  " type %d, ino %lu, caller %pS", MAJOR(__entry->dev),
1847 		  MINOR(__entry->dev), __entry->blocks, __entry->rsv_blocks,
1848 		  __entry->revoke_creds, __entry->type, __entry->ino,
1849 		  (void *)__entry->ip)
1850 );
1851 
1852 TRACE_EVENT(ext4_journal_start_reserved,
1853 	TP_PROTO(struct super_block *sb, int blocks, unsigned long IP),
1854 
1855 	TP_ARGS(sb, blocks, IP),
1856 
1857 	TP_STRUCT__entry(
1858 		__field(	dev_t,	dev			)
1859 		__field(unsigned long,	ip			)
1860 		__field(	  int,	blocks			)
1861 	),
1862 
1863 	TP_fast_assign(
1864 		__entry->dev		 = sb->s_dev;
1865 		__entry->ip		 = IP;
1866 		__entry->blocks		 = blocks;
1867 	),
1868 
1869 	TP_printk("dev %d,%d blocks, %d caller %pS",
1870 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1871 		  __entry->blocks, (void *)__entry->ip)
1872 );
1873 
1874 DECLARE_EVENT_CLASS(ext4__trim,
1875 	TP_PROTO(struct super_block *sb,
1876 		 ext4_group_t group,
1877 		 ext4_grpblk_t start,
1878 		 ext4_grpblk_t len),
1879 
1880 	TP_ARGS(sb, group, start, len),
1881 
1882 	TP_STRUCT__entry(
1883 		__field(	int,	dev_major		)
1884 		__field(	int,	dev_minor		)
1885 		__field(	__u32, 	group			)
1886 		__field(	int,	start			)
1887 		__field(	int,	len			)
1888 	),
1889 
1890 	TP_fast_assign(
1891 		__entry->dev_major	= MAJOR(sb->s_dev);
1892 		__entry->dev_minor	= MINOR(sb->s_dev);
1893 		__entry->group		= group;
1894 		__entry->start		= start;
1895 		__entry->len		= len;
1896 	),
1897 
1898 	TP_printk("dev %d,%d group %u, start %d, len %d",
1899 		  __entry->dev_major, __entry->dev_minor,
1900 		  __entry->group, __entry->start, __entry->len)
1901 );
1902 
1903 DEFINE_EVENT(ext4__trim, ext4_trim_extent,
1904 
1905 	TP_PROTO(struct super_block *sb,
1906 		 ext4_group_t group,
1907 		 ext4_grpblk_t start,
1908 		 ext4_grpblk_t len),
1909 
1910 	TP_ARGS(sb, group, start, len)
1911 );
1912 
1913 DEFINE_EVENT(ext4__trim, ext4_trim_all_free,
1914 
1915 	TP_PROTO(struct super_block *sb,
1916 		 ext4_group_t group,
1917 		 ext4_grpblk_t start,
1918 		 ext4_grpblk_t len),
1919 
1920 	TP_ARGS(sb, group, start, len)
1921 );
1922 
1923 TRACE_EVENT(ext4_ext_handle_unwritten_extents,
1924 	TP_PROTO(struct inode *inode, struct ext4_map_blocks *map, int flags,
1925 		 unsigned int allocated, ext4_fsblk_t newblock),
1926 
1927 	TP_ARGS(inode, map, flags, allocated, newblock),
1928 
1929 	TP_STRUCT__entry(
1930 		__field(	dev_t,		dev		)
1931 		__field(	ino_t,		ino		)
1932 		__field(	int,		flags		)
1933 		__field(	ext4_lblk_t,	lblk		)
1934 		__field(	ext4_fsblk_t,	pblk		)
1935 		__field(	unsigned int,	len		)
1936 		__field(	unsigned int,	allocated	)
1937 		__field(	ext4_fsblk_t,	newblk		)
1938 	),
1939 
1940 	TP_fast_assign(
1941 		__entry->dev		= inode->i_sb->s_dev;
1942 		__entry->ino		= inode->i_ino;
1943 		__entry->flags		= flags;
1944 		__entry->lblk		= map->m_lblk;
1945 		__entry->pblk		= map->m_pblk;
1946 		__entry->len		= map->m_len;
1947 		__entry->allocated	= allocated;
1948 		__entry->newblk		= newblock;
1949 	),
1950 
1951 	TP_printk("dev %d,%d ino %lu m_lblk %u m_pblk %llu m_len %u flags %s "
1952 		  "allocated %d newblock %llu",
1953 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1954 		  (unsigned long) __entry->ino,
1955 		  (unsigned) __entry->lblk, (unsigned long long) __entry->pblk,
1956 		  __entry->len, show_map_flags(__entry->flags),
1957 		  (unsigned int) __entry->allocated,
1958 		  (unsigned long long) __entry->newblk)
1959 );
1960 
1961 TRACE_EVENT(ext4_get_implied_cluster_alloc_exit,
1962 	TP_PROTO(struct super_block *sb, struct ext4_map_blocks *map, int ret),
1963 
1964 	TP_ARGS(sb, map, ret),
1965 
1966 	TP_STRUCT__entry(
1967 		__field(	dev_t,		dev	)
1968 		__field(	unsigned int,	flags	)
1969 		__field(	ext4_lblk_t,	lblk	)
1970 		__field(	ext4_fsblk_t,	pblk	)
1971 		__field(	unsigned int,	len	)
1972 		__field(	int,		ret	)
1973 	),
1974 
1975 	TP_fast_assign(
1976 		__entry->dev	= sb->s_dev;
1977 		__entry->flags	= map->m_flags;
1978 		__entry->lblk	= map->m_lblk;
1979 		__entry->pblk	= map->m_pblk;
1980 		__entry->len	= map->m_len;
1981 		__entry->ret	= ret;
1982 	),
1983 
1984 	TP_printk("dev %d,%d m_lblk %u m_pblk %llu m_len %u m_flags %s ret %d",
1985 		  MAJOR(__entry->dev), MINOR(__entry->dev),
1986 		  __entry->lblk, (unsigned long long) __entry->pblk,
1987 		  __entry->len, show_mflags(__entry->flags), __entry->ret)
1988 );
1989 
1990 TRACE_EVENT(ext4_ext_show_extent,
1991 	TP_PROTO(struct inode *inode, ext4_lblk_t lblk, ext4_fsblk_t pblk,
1992 		 unsigned short len),
1993 
1994 	TP_ARGS(inode, lblk, pblk, len),
1995 
1996 	TP_STRUCT__entry(
1997 		__field(	dev_t,		dev	)
1998 		__field(	ino_t,		ino	)
1999 		__field(	ext4_fsblk_t,	pblk	)
2000 		__field(	ext4_lblk_t,	lblk	)
2001 		__field(	unsigned short,	len	)
2002 	),
2003 
2004 	TP_fast_assign(
2005 		__entry->dev	= inode->i_sb->s_dev;
2006 		__entry->ino	= inode->i_ino;
2007 		__entry->pblk	= pblk;
2008 		__entry->lblk	= lblk;
2009 		__entry->len	= len;
2010 	),
2011 
2012 	TP_printk("dev %d,%d ino %lu lblk %u pblk %llu len %u",
2013 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2014 		  (unsigned long) __entry->ino,
2015 		  (unsigned) __entry->lblk,
2016 		  (unsigned long long) __entry->pblk,
2017 		  (unsigned short) __entry->len)
2018 );
2019 
2020 TRACE_EVENT(ext4_remove_blocks,
2021 	TP_PROTO(struct inode *inode, struct ext4_extent *ex,
2022 		 ext4_lblk_t from, ext4_fsblk_t to,
2023 		 struct partial_cluster *pc),
2024 
2025 	TP_ARGS(inode, ex, from, to, pc),
2026 
2027 	TP_STRUCT__entry(
2028 		__field(	dev_t,		dev	)
2029 		__field(	ino_t,		ino	)
2030 		__field(	ext4_lblk_t,	from	)
2031 		__field(	ext4_lblk_t,	to	)
2032 		__field(	ext4_fsblk_t,	ee_pblk	)
2033 		__field(	ext4_lblk_t,	ee_lblk	)
2034 		__field(	unsigned short,	ee_len	)
2035 		__field(	ext4_fsblk_t,	pc_pclu	)
2036 		__field(	ext4_lblk_t,	pc_lblk	)
2037 		__field(	int,		pc_state)
2038 	),
2039 
2040 	TP_fast_assign(
2041 		__entry->dev		= inode->i_sb->s_dev;
2042 		__entry->ino		= inode->i_ino;
2043 		__entry->from		= from;
2044 		__entry->to		= to;
2045 		__entry->ee_pblk	= ext4_ext_pblock(ex);
2046 		__entry->ee_lblk	= le32_to_cpu(ex->ee_block);
2047 		__entry->ee_len		= ext4_ext_get_actual_len(ex);
2048 		__entry->pc_pclu	= pc->pclu;
2049 		__entry->pc_lblk	= pc->lblk;
2050 		__entry->pc_state	= pc->state;
2051 	),
2052 
2053 	TP_printk("dev %d,%d ino %lu extent [%u(%llu), %u]"
2054 		  "from %u to %u partial [pclu %lld lblk %u state %d]",
2055 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2056 		  (unsigned long) __entry->ino,
2057 		  (unsigned) __entry->ee_lblk,
2058 		  (unsigned long long) __entry->ee_pblk,
2059 		  (unsigned short) __entry->ee_len,
2060 		  (unsigned) __entry->from,
2061 		  (unsigned) __entry->to,
2062 		  (long long) __entry->pc_pclu,
2063 		  (unsigned int) __entry->pc_lblk,
2064 		  (int) __entry->pc_state)
2065 );
2066 
2067 TRACE_EVENT(ext4_ext_rm_leaf,
2068 	TP_PROTO(struct inode *inode, ext4_lblk_t start,
2069 		 struct ext4_extent *ex,
2070 		 struct partial_cluster *pc),
2071 
2072 	TP_ARGS(inode, start, ex, pc),
2073 
2074 	TP_STRUCT__entry(
2075 		__field(	dev_t,		dev	)
2076 		__field(	ino_t,		ino	)
2077 		__field(	ext4_lblk_t,	start	)
2078 		__field(	ext4_lblk_t,	ee_lblk	)
2079 		__field(	ext4_fsblk_t,	ee_pblk	)
2080 		__field(	short,		ee_len	)
2081 		__field(	ext4_fsblk_t,	pc_pclu	)
2082 		__field(	ext4_lblk_t,	pc_lblk	)
2083 		__field(	int,		pc_state)
2084 	),
2085 
2086 	TP_fast_assign(
2087 		__entry->dev		= inode->i_sb->s_dev;
2088 		__entry->ino		= inode->i_ino;
2089 		__entry->start		= start;
2090 		__entry->ee_lblk	= le32_to_cpu(ex->ee_block);
2091 		__entry->ee_pblk	= ext4_ext_pblock(ex);
2092 		__entry->ee_len		= ext4_ext_get_actual_len(ex);
2093 		__entry->pc_pclu	= pc->pclu;
2094 		__entry->pc_lblk	= pc->lblk;
2095 		__entry->pc_state	= pc->state;
2096 	),
2097 
2098 	TP_printk("dev %d,%d ino %lu start_lblk %u last_extent [%u(%llu), %u]"
2099 		  "partial [pclu %lld lblk %u state %d]",
2100 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2101 		  (unsigned long) __entry->ino,
2102 		  (unsigned) __entry->start,
2103 		  (unsigned) __entry->ee_lblk,
2104 		  (unsigned long long) __entry->ee_pblk,
2105 		  (unsigned short) __entry->ee_len,
2106 		  (long long) __entry->pc_pclu,
2107 		  (unsigned int) __entry->pc_lblk,
2108 		  (int) __entry->pc_state)
2109 );
2110 
2111 TRACE_EVENT(ext4_ext_rm_idx,
2112 	TP_PROTO(struct inode *inode, ext4_fsblk_t pblk),
2113 
2114 	TP_ARGS(inode, pblk),
2115 
2116 	TP_STRUCT__entry(
2117 		__field(	dev_t,		dev	)
2118 		__field(	ino_t,		ino	)
2119 		__field(	ext4_fsblk_t,	pblk	)
2120 	),
2121 
2122 	TP_fast_assign(
2123 		__entry->dev	= inode->i_sb->s_dev;
2124 		__entry->ino	= inode->i_ino;
2125 		__entry->pblk	= pblk;
2126 	),
2127 
2128 	TP_printk("dev %d,%d ino %lu index_pblk %llu",
2129 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2130 		  (unsigned long) __entry->ino,
2131 		  (unsigned long long) __entry->pblk)
2132 );
2133 
2134 TRACE_EVENT(ext4_ext_remove_space,
2135 	TP_PROTO(struct inode *inode, ext4_lblk_t start,
2136 		 ext4_lblk_t end, int depth),
2137 
2138 	TP_ARGS(inode, start, end, depth),
2139 
2140 	TP_STRUCT__entry(
2141 		__field(	dev_t,		dev	)
2142 		__field(	ino_t,		ino	)
2143 		__field(	ext4_lblk_t,	start	)
2144 		__field(	ext4_lblk_t,	end	)
2145 		__field(	int,		depth	)
2146 	),
2147 
2148 	TP_fast_assign(
2149 		__entry->dev	= inode->i_sb->s_dev;
2150 		__entry->ino	= inode->i_ino;
2151 		__entry->start	= start;
2152 		__entry->end	= end;
2153 		__entry->depth	= depth;
2154 	),
2155 
2156 	TP_printk("dev %d,%d ino %lu since %u end %u depth %d",
2157 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2158 		  (unsigned long) __entry->ino,
2159 		  (unsigned) __entry->start,
2160 		  (unsigned) __entry->end,
2161 		  __entry->depth)
2162 );
2163 
2164 TRACE_EVENT(ext4_ext_remove_space_done,
2165 	TP_PROTO(struct inode *inode, ext4_lblk_t start, ext4_lblk_t end,
2166 		 int depth, struct partial_cluster *pc, __le16 eh_entries),
2167 
2168 	TP_ARGS(inode, start, end, depth, pc, eh_entries),
2169 
2170 	TP_STRUCT__entry(
2171 		__field(	dev_t,		dev		)
2172 		__field(	ino_t,		ino		)
2173 		__field(	ext4_lblk_t,	start		)
2174 		__field(	ext4_lblk_t,	end		)
2175 		__field(	int,		depth		)
2176 		__field(	ext4_fsblk_t,	pc_pclu		)
2177 		__field(	ext4_lblk_t,	pc_lblk		)
2178 		__field(	int,		pc_state	)
2179 		__field(	unsigned short,	eh_entries	)
2180 	),
2181 
2182 	TP_fast_assign(
2183 		__entry->dev		= inode->i_sb->s_dev;
2184 		__entry->ino		= inode->i_ino;
2185 		__entry->start		= start;
2186 		__entry->end		= end;
2187 		__entry->depth		= depth;
2188 		__entry->pc_pclu	= pc->pclu;
2189 		__entry->pc_lblk	= pc->lblk;
2190 		__entry->pc_state	= pc->state;
2191 		__entry->eh_entries	= le16_to_cpu(eh_entries);
2192 	),
2193 
2194 	TP_printk("dev %d,%d ino %lu since %u end %u depth %d "
2195 		  "partial [pclu %lld lblk %u state %d] "
2196 		  "remaining_entries %u",
2197 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2198 		  (unsigned long) __entry->ino,
2199 		  (unsigned) __entry->start,
2200 		  (unsigned) __entry->end,
2201 		  __entry->depth,
2202 		  (long long) __entry->pc_pclu,
2203 		  (unsigned int) __entry->pc_lblk,
2204 		  (int) __entry->pc_state,
2205 		  (unsigned short) __entry->eh_entries)
2206 );
2207 
2208 DECLARE_EVENT_CLASS(ext4__es_extent,
2209 	TP_PROTO(struct inode *inode, struct extent_status *es),
2210 
2211 	TP_ARGS(inode, es),
2212 
2213 	TP_STRUCT__entry(
2214 		__field(	dev_t,		dev		)
2215 		__field(	ino_t,		ino		)
2216 		__field(	ext4_lblk_t,	lblk		)
2217 		__field(	ext4_lblk_t,	len		)
2218 		__field(	ext4_fsblk_t,	pblk		)
2219 		__field(	char,		status		)
2220 		__field(	u64,		seq		)
2221 	),
2222 
2223 	TP_fast_assign(
2224 		__entry->dev	= inode->i_sb->s_dev;
2225 		__entry->ino	= inode->i_ino;
2226 		__entry->lblk	= es->es_lblk;
2227 		__entry->len	= es->es_len;
2228 		__entry->pblk	= ext4_es_show_pblock(es);
2229 		__entry->status	= ext4_es_status(es);
2230 		__entry->seq	= EXT4_I(inode)->i_es_seq;
2231 	),
2232 
2233 	TP_printk("dev %d,%d ino %lu es [%u/%u) mapped %llu status %s seq %llu",
2234 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2235 		  (unsigned long) __entry->ino,
2236 		  __entry->lblk, __entry->len,
2237 		  __entry->pblk, show_extent_status(__entry->status),
2238 		  __entry->seq)
2239 );
2240 
2241 DEFINE_EVENT(ext4__es_extent, ext4_es_insert_extent,
2242 	TP_PROTO(struct inode *inode, struct extent_status *es),
2243 
2244 	TP_ARGS(inode, es)
2245 );
2246 
2247 DEFINE_EVENT(ext4__es_extent, ext4_es_cache_extent,
2248 	TP_PROTO(struct inode *inode, struct extent_status *es),
2249 
2250 	TP_ARGS(inode, es)
2251 );
2252 
2253 TRACE_EVENT(ext4_es_remove_extent,
2254 	TP_PROTO(struct inode *inode, ext4_lblk_t lblk, ext4_lblk_t len),
2255 
2256 	TP_ARGS(inode, lblk, len),
2257 
2258 	TP_STRUCT__entry(
2259 		__field(	dev_t,	dev			)
2260 		__field(	ino_t,	ino			)
2261 		__field(	loff_t,	lblk			)
2262 		__field(	loff_t,	len			)
2263 		__field(	u64,	seq			)
2264 	),
2265 
2266 	TP_fast_assign(
2267 		__entry->dev	= inode->i_sb->s_dev;
2268 		__entry->ino	= inode->i_ino;
2269 		__entry->lblk	= lblk;
2270 		__entry->len	= len;
2271 		__entry->seq	= EXT4_I(inode)->i_es_seq;
2272 	),
2273 
2274 	TP_printk("dev %d,%d ino %lu es [%lld/%lld) seq %llu",
2275 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2276 		  (unsigned long) __entry->ino,
2277 		  __entry->lblk, __entry->len, __entry->seq)
2278 );
2279 
2280 TRACE_EVENT(ext4_es_find_extent_range_enter,
2281 	TP_PROTO(struct inode *inode, ext4_lblk_t lblk),
2282 
2283 	TP_ARGS(inode, lblk),
2284 
2285 	TP_STRUCT__entry(
2286 		__field(	dev_t,		dev		)
2287 		__field(	ino_t,		ino		)
2288 		__field(	ext4_lblk_t,	lblk		)
2289 	),
2290 
2291 	TP_fast_assign(
2292 		__entry->dev	= inode->i_sb->s_dev;
2293 		__entry->ino	= inode->i_ino;
2294 		__entry->lblk	= lblk;
2295 	),
2296 
2297 	TP_printk("dev %d,%d ino %lu lblk %u",
2298 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2299 		  (unsigned long) __entry->ino, __entry->lblk)
2300 );
2301 
2302 TRACE_EVENT(ext4_es_find_extent_range_exit,
2303 	TP_PROTO(struct inode *inode, struct extent_status *es),
2304 
2305 	TP_ARGS(inode, es),
2306 
2307 	TP_STRUCT__entry(
2308 		__field(	dev_t,		dev		)
2309 		__field(	ino_t,		ino		)
2310 		__field(	ext4_lblk_t,	lblk		)
2311 		__field(	ext4_lblk_t,	len		)
2312 		__field(	ext4_fsblk_t,	pblk		)
2313 		__field(	char, status	)
2314 	),
2315 
2316 	TP_fast_assign(
2317 		__entry->dev	= inode->i_sb->s_dev;
2318 		__entry->ino	= inode->i_ino;
2319 		__entry->lblk	= es->es_lblk;
2320 		__entry->len	= es->es_len;
2321 		__entry->pblk	= ext4_es_show_pblock(es);
2322 		__entry->status	= ext4_es_status(es);
2323 	),
2324 
2325 	TP_printk("dev %d,%d ino %lu es [%u/%u) mapped %llu status %s",
2326 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2327 		  (unsigned long) __entry->ino,
2328 		  __entry->lblk, __entry->len,
2329 		  __entry->pblk, show_extent_status(__entry->status))
2330 );
2331 
2332 TRACE_EVENT(ext4_es_lookup_extent_enter,
2333 	TP_PROTO(struct inode *inode, ext4_lblk_t lblk),
2334 
2335 	TP_ARGS(inode, lblk),
2336 
2337 	TP_STRUCT__entry(
2338 		__field(	dev_t,		dev		)
2339 		__field(	ino_t,		ino		)
2340 		__field(	ext4_lblk_t,	lblk		)
2341 	),
2342 
2343 	TP_fast_assign(
2344 		__entry->dev	= inode->i_sb->s_dev;
2345 		__entry->ino	= inode->i_ino;
2346 		__entry->lblk	= lblk;
2347 	),
2348 
2349 	TP_printk("dev %d,%d ino %lu lblk %u",
2350 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2351 		  (unsigned long) __entry->ino, __entry->lblk)
2352 );
2353 
2354 TRACE_EVENT(ext4_es_lookup_extent_exit,
2355 	TP_PROTO(struct inode *inode, struct extent_status *es,
2356 		 int found),
2357 
2358 	TP_ARGS(inode, es, found),
2359 
2360 	TP_STRUCT__entry(
2361 		__field(	dev_t,		dev		)
2362 		__field(	ino_t,		ino		)
2363 		__field(	ext4_lblk_t,	lblk		)
2364 		__field(	ext4_lblk_t,	len		)
2365 		__field(	ext4_fsblk_t,	pblk		)
2366 		__field(	char,		status		)
2367 		__field(	int,		found		)
2368 	),
2369 
2370 	TP_fast_assign(
2371 		__entry->dev	= inode->i_sb->s_dev;
2372 		__entry->ino	= inode->i_ino;
2373 		__entry->lblk	= es->es_lblk;
2374 		__entry->len	= es->es_len;
2375 		__entry->pblk	= ext4_es_show_pblock(es);
2376 		__entry->status	= ext4_es_status(es);
2377 		__entry->found	= found;
2378 	),
2379 
2380 	TP_printk("dev %d,%d ino %lu found %d [%u/%u) %llu %s",
2381 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2382 		  (unsigned long) __entry->ino, __entry->found,
2383 		  __entry->lblk, __entry->len,
2384 		  __entry->found ? __entry->pblk : 0,
2385 		  show_extent_status(__entry->found ? __entry->status : 0))
2386 );
2387 
2388 DECLARE_EVENT_CLASS(ext4__es_shrink_enter,
2389 	TP_PROTO(struct super_block *sb, int nr_to_scan, int cache_cnt),
2390 
2391 	TP_ARGS(sb, nr_to_scan, cache_cnt),
2392 
2393 	TP_STRUCT__entry(
2394 		__field(	dev_t,	dev			)
2395 		__field(	int,	nr_to_scan		)
2396 		__field(	int,	cache_cnt		)
2397 	),
2398 
2399 	TP_fast_assign(
2400 		__entry->dev		= sb->s_dev;
2401 		__entry->nr_to_scan	= nr_to_scan;
2402 		__entry->cache_cnt	= cache_cnt;
2403 	),
2404 
2405 	TP_printk("dev %d,%d nr_to_scan %d cache_cnt %d",
2406 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2407 		  __entry->nr_to_scan, __entry->cache_cnt)
2408 );
2409 
2410 DEFINE_EVENT(ext4__es_shrink_enter, ext4_es_shrink_count,
2411 	TP_PROTO(struct super_block *sb, int nr_to_scan, int cache_cnt),
2412 
2413 	TP_ARGS(sb, nr_to_scan, cache_cnt)
2414 );
2415 
2416 DEFINE_EVENT(ext4__es_shrink_enter, ext4_es_shrink_scan_enter,
2417 	TP_PROTO(struct super_block *sb, int nr_to_scan, int cache_cnt),
2418 
2419 	TP_ARGS(sb, nr_to_scan, cache_cnt)
2420 );
2421 
2422 TRACE_EVENT(ext4_es_shrink_scan_exit,
2423 	TP_PROTO(struct super_block *sb, int nr_shrunk, int cache_cnt),
2424 
2425 	TP_ARGS(sb, nr_shrunk, cache_cnt),
2426 
2427 	TP_STRUCT__entry(
2428 		__field(	dev_t,	dev			)
2429 		__field(	int,	nr_shrunk		)
2430 		__field(	int,	cache_cnt		)
2431 	),
2432 
2433 	TP_fast_assign(
2434 		__entry->dev		= sb->s_dev;
2435 		__entry->nr_shrunk	= nr_shrunk;
2436 		__entry->cache_cnt	= cache_cnt;
2437 	),
2438 
2439 	TP_printk("dev %d,%d nr_shrunk %d cache_cnt %d",
2440 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2441 		  __entry->nr_shrunk, __entry->cache_cnt)
2442 );
2443 
2444 TRACE_EVENT(ext4_collapse_range,
2445 	TP_PROTO(struct inode *inode, loff_t offset, loff_t len),
2446 
2447 	TP_ARGS(inode, offset, len),
2448 
2449 	TP_STRUCT__entry(
2450 		__field(dev_t,	dev)
2451 		__field(ino_t,	ino)
2452 		__field(loff_t,	offset)
2453 		__field(loff_t, len)
2454 	),
2455 
2456 	TP_fast_assign(
2457 		__entry->dev	= inode->i_sb->s_dev;
2458 		__entry->ino	= inode->i_ino;
2459 		__entry->offset	= offset;
2460 		__entry->len	= len;
2461 	),
2462 
2463 	TP_printk("dev %d,%d ino %lu offset %lld len %lld",
2464 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2465 		  (unsigned long) __entry->ino,
2466 		  __entry->offset, __entry->len)
2467 );
2468 
2469 TRACE_EVENT(ext4_insert_range,
2470 	TP_PROTO(struct inode *inode, loff_t offset, loff_t len),
2471 
2472 	TP_ARGS(inode, offset, len),
2473 
2474 	TP_STRUCT__entry(
2475 		__field(dev_t,	dev)
2476 		__field(ino_t,	ino)
2477 		__field(loff_t,	offset)
2478 		__field(loff_t, len)
2479 	),
2480 
2481 	TP_fast_assign(
2482 		__entry->dev	= inode->i_sb->s_dev;
2483 		__entry->ino	= inode->i_ino;
2484 		__entry->offset	= offset;
2485 		__entry->len	= len;
2486 	),
2487 
2488 	TP_printk("dev %d,%d ino %lu offset %lld len %lld",
2489 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2490 		  (unsigned long) __entry->ino,
2491 		  __entry->offset, __entry->len)
2492 );
2493 
2494 TRACE_EVENT(ext4_es_shrink,
2495 	TP_PROTO(struct super_block *sb, int nr_shrunk, u64 scan_time,
2496 		 int nr_skipped, int retried),
2497 
2498 	TP_ARGS(sb, nr_shrunk, scan_time, nr_skipped, retried),
2499 
2500 	TP_STRUCT__entry(
2501 		__field(	dev_t,		dev		)
2502 		__field(	int,		nr_shrunk	)
2503 		__field(	unsigned long long, scan_time	)
2504 		__field(	int,		nr_skipped	)
2505 		__field(	int,		retried		)
2506 	),
2507 
2508 	TP_fast_assign(
2509 		__entry->dev		= sb->s_dev;
2510 		__entry->nr_shrunk	= nr_shrunk;
2511 		__entry->scan_time	= div_u64(scan_time, 1000);
2512 		__entry->nr_skipped	= nr_skipped;
2513 		__entry->retried	= retried;
2514 	),
2515 
2516 	TP_printk("dev %d,%d nr_shrunk %d, scan_time %llu "
2517 		  "nr_skipped %d retried %d",
2518 		  MAJOR(__entry->dev), MINOR(__entry->dev), __entry->nr_shrunk,
2519 		  __entry->scan_time, __entry->nr_skipped, __entry->retried)
2520 );
2521 
2522 TRACE_EVENT(ext4_es_insert_delayed_extent,
2523 	TP_PROTO(struct inode *inode, struct extent_status *es,
2524 		 bool lclu_allocated, bool end_allocated),
2525 
2526 	TP_ARGS(inode, es, lclu_allocated, end_allocated),
2527 
2528 	TP_STRUCT__entry(
2529 		__field(	dev_t,		dev		)
2530 		__field(	ino_t,		ino		)
2531 		__field(	ext4_lblk_t,	lblk		)
2532 		__field(	ext4_lblk_t,	len		)
2533 		__field(	ext4_fsblk_t,	pblk		)
2534 		__field(	char,		status		)
2535 		__field(	bool,		lclu_allocated	)
2536 		__field(	bool,		end_allocated	)
2537 		__field(	u64,		seq		)
2538 	),
2539 
2540 	TP_fast_assign(
2541 		__entry->dev		= inode->i_sb->s_dev;
2542 		__entry->ino		= inode->i_ino;
2543 		__entry->lblk		= es->es_lblk;
2544 		__entry->len		= es->es_len;
2545 		__entry->pblk		= ext4_es_show_pblock(es);
2546 		__entry->status		= ext4_es_status(es);
2547 		__entry->lclu_allocated	= lclu_allocated;
2548 		__entry->end_allocated	= end_allocated;
2549 		__entry->seq		= EXT4_I(inode)->i_es_seq;
2550 	),
2551 
2552 	TP_printk("dev %d,%d ino %lu es [%u/%u) mapped %llu status %s allocated %d %d seq %llu",
2553 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2554 		  (unsigned long) __entry->ino,
2555 		  __entry->lblk, __entry->len,
2556 		  __entry->pblk, show_extent_status(__entry->status),
2557 		  __entry->lclu_allocated, __entry->end_allocated,
2558 		  __entry->seq)
2559 );
2560 
2561 /* fsmap traces */
2562 DECLARE_EVENT_CLASS(ext4_fsmap_class,
2563 	TP_PROTO(struct super_block *sb, u32 keydev, u32 agno, u64 bno, u64 len,
2564 		 u64 owner),
2565 	TP_ARGS(sb, keydev, agno, bno, len, owner),
2566 	TP_STRUCT__entry(
2567 		__field(dev_t, dev)
2568 		__field(dev_t, keydev)
2569 		__field(u32, agno)
2570 		__field(u64, bno)
2571 		__field(u64, len)
2572 		__field(u64, owner)
2573 	),
2574 	TP_fast_assign(
2575 		__entry->dev = sb->s_bdev->bd_dev;
2576 		__entry->keydev = new_decode_dev(keydev);
2577 		__entry->agno = agno;
2578 		__entry->bno = bno;
2579 		__entry->len = len;
2580 		__entry->owner = owner;
2581 	),
2582 	TP_printk("dev %d:%d keydev %d:%d agno %u bno %llu len %llu owner %lld\n",
2583 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2584 		  MAJOR(__entry->keydev), MINOR(__entry->keydev),
2585 		  __entry->agno,
2586 		  __entry->bno,
2587 		  __entry->len,
2588 		  __entry->owner)
2589 )
2590 #define DEFINE_FSMAP_EVENT(name) \
2591 DEFINE_EVENT(ext4_fsmap_class, name, \
2592 	TP_PROTO(struct super_block *sb, u32 keydev, u32 agno, u64 bno, u64 len, \
2593 		 u64 owner), \
2594 	TP_ARGS(sb, keydev, agno, bno, len, owner))
2595 DEFINE_FSMAP_EVENT(ext4_fsmap_low_key);
2596 DEFINE_FSMAP_EVENT(ext4_fsmap_high_key);
2597 DEFINE_FSMAP_EVENT(ext4_fsmap_mapping);
2598 
2599 DECLARE_EVENT_CLASS(ext4_getfsmap_class,
2600 	TP_PROTO(struct super_block *sb, struct ext4_fsmap *fsmap),
2601 	TP_ARGS(sb, fsmap),
2602 	TP_STRUCT__entry(
2603 		__field(dev_t, dev)
2604 		__field(dev_t, keydev)
2605 		__field(u64, block)
2606 		__field(u64, len)
2607 		__field(u64, owner)
2608 		__field(u64, flags)
2609 	),
2610 	TP_fast_assign(
2611 		__entry->dev = sb->s_bdev->bd_dev;
2612 		__entry->keydev = new_decode_dev(fsmap->fmr_device);
2613 		__entry->block = fsmap->fmr_physical;
2614 		__entry->len = fsmap->fmr_length;
2615 		__entry->owner = fsmap->fmr_owner;
2616 		__entry->flags = fsmap->fmr_flags;
2617 	),
2618 	TP_printk("dev %d:%d keydev %d:%d block %llu len %llu owner %lld flags 0x%llx\n",
2619 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2620 		  MAJOR(__entry->keydev), MINOR(__entry->keydev),
2621 		  __entry->block,
2622 		  __entry->len,
2623 		  __entry->owner,
2624 		  __entry->flags)
2625 )
2626 #define DEFINE_GETFSMAP_EVENT(name) \
2627 DEFINE_EVENT(ext4_getfsmap_class, name, \
2628 	TP_PROTO(struct super_block *sb, struct ext4_fsmap *fsmap), \
2629 	TP_ARGS(sb, fsmap))
2630 DEFINE_GETFSMAP_EVENT(ext4_getfsmap_low_key);
2631 DEFINE_GETFSMAP_EVENT(ext4_getfsmap_high_key);
2632 DEFINE_GETFSMAP_EVENT(ext4_getfsmap_mapping);
2633 
2634 TRACE_EVENT(ext4_shutdown,
2635 	TP_PROTO(struct super_block *sb, unsigned long flags),
2636 
2637 	TP_ARGS(sb, flags),
2638 
2639 	TP_STRUCT__entry(
2640 		__field(	dev_t,	dev			)
2641 		__field(     unsigned,	flags			)
2642 	),
2643 
2644 	TP_fast_assign(
2645 		__entry->dev	= sb->s_dev;
2646 		__entry->flags	= flags;
2647 	),
2648 
2649 	TP_printk("dev %d,%d flags %u",
2650 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2651 		  __entry->flags)
2652 );
2653 
2654 TRACE_EVENT(ext4_error,
2655 	TP_PROTO(struct super_block *sb, const char *function,
2656 		 unsigned int line),
2657 
2658 	TP_ARGS(sb, function, line),
2659 
2660 	TP_STRUCT__entry(
2661 		__field(	dev_t,	dev			)
2662 		__field( const char *,	function		)
2663 		__field(     unsigned,	line			)
2664 	),
2665 
2666 	TP_fast_assign(
2667 		__entry->dev	= sb->s_dev;
2668 		__entry->function = function;
2669 		__entry->line	= line;
2670 	),
2671 
2672 	TP_printk("dev %d,%d function %s line %u",
2673 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2674 		  __entry->function, __entry->line)
2675 );
2676 
2677 TRACE_EVENT(ext4_prefetch_bitmaps,
2678 	    TP_PROTO(struct super_block *sb, ext4_group_t group,
2679 		     ext4_group_t next, unsigned int prefetch_ios),
2680 
2681 	TP_ARGS(sb, group, next, prefetch_ios),
2682 
2683 	TP_STRUCT__entry(
2684 		__field(	dev_t,	dev			)
2685 		__field(	__u32,	group			)
2686 		__field(	__u32,	next			)
2687 		__field(	__u32,	ios			)
2688 	),
2689 
2690 	TP_fast_assign(
2691 		__entry->dev	= sb->s_dev;
2692 		__entry->group	= group;
2693 		__entry->next	= next;
2694 		__entry->ios	= prefetch_ios;
2695 	),
2696 
2697 	TP_printk("dev %d,%d group %u next %u ios %u",
2698 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2699 		  __entry->group, __entry->next, __entry->ios)
2700 );
2701 
2702 TRACE_EVENT(ext4_lazy_itable_init,
2703 	    TP_PROTO(struct super_block *sb, ext4_group_t group),
2704 
2705 	TP_ARGS(sb, group),
2706 
2707 	TP_STRUCT__entry(
2708 		__field(	dev_t,	dev			)
2709 		__field(	__u32,	group			)
2710 	),
2711 
2712 	TP_fast_assign(
2713 		__entry->dev	= sb->s_dev;
2714 		__entry->group	= group;
2715 	),
2716 
2717 	TP_printk("dev %d,%d group %u",
2718 		  MAJOR(__entry->dev), MINOR(__entry->dev), __entry->group)
2719 );
2720 
2721 TRACE_EVENT(ext4_fc_replay_scan,
2722 	TP_PROTO(struct super_block *sb, int error, int off),
2723 
2724 	TP_ARGS(sb, error, off),
2725 
2726 	TP_STRUCT__entry(
2727 		__field(dev_t, dev)
2728 		__field(int, error)
2729 		__field(int, off)
2730 	),
2731 
2732 	TP_fast_assign(
2733 		__entry->dev = sb->s_dev;
2734 		__entry->error = error;
2735 		__entry->off = off;
2736 	),
2737 
2738 	TP_printk("dev %d,%d error %d, off %d",
2739 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2740 		  __entry->error, __entry->off)
2741 );
2742 
2743 TRACE_EVENT(ext4_fc_replay,
2744 	TP_PROTO(struct super_block *sb, int tag, int ino, int priv1, int priv2),
2745 
2746 	TP_ARGS(sb, tag, ino, priv1, priv2),
2747 
2748 	TP_STRUCT__entry(
2749 		__field(dev_t, dev)
2750 		__field(int, tag)
2751 		__field(int, ino)
2752 		__field(int, priv1)
2753 		__field(int, priv2)
2754 	),
2755 
2756 	TP_fast_assign(
2757 		__entry->dev = sb->s_dev;
2758 		__entry->tag = tag;
2759 		__entry->ino = ino;
2760 		__entry->priv1 = priv1;
2761 		__entry->priv2 = priv2;
2762 	),
2763 
2764 	TP_printk("dev %d,%d: tag %d, ino %d, data1 %d, data2 %d",
2765 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2766 		  __entry->tag, __entry->ino, __entry->priv1, __entry->priv2)
2767 );
2768 
2769 TRACE_EVENT(ext4_fc_commit_start,
2770 	TP_PROTO(struct super_block *sb, tid_t commit_tid),
2771 
2772 	TP_ARGS(sb, commit_tid),
2773 
2774 	TP_STRUCT__entry(
2775 		__field(dev_t, dev)
2776 		__field(tid_t, tid)
2777 	),
2778 
2779 	TP_fast_assign(
2780 		__entry->dev = sb->s_dev;
2781 		__entry->tid = commit_tid;
2782 	),
2783 
2784 	TP_printk("dev %d,%d tid %u", MAJOR(__entry->dev), MINOR(__entry->dev),
2785 		  __entry->tid)
2786 );
2787 
2788 TRACE_EVENT(ext4_fc_commit_stop,
2789 	    TP_PROTO(struct super_block *sb, int nblks, int reason,
2790 		     tid_t commit_tid),
2791 
2792 	TP_ARGS(sb, nblks, reason, commit_tid),
2793 
2794 	TP_STRUCT__entry(
2795 		__field(dev_t, dev)
2796 		__field(int, nblks)
2797 		__field(int, reason)
2798 		__field(int, num_fc)
2799 		__field(int, num_fc_ineligible)
2800 		__field(int, nblks_agg)
2801 		__field(tid_t, tid)
2802 	),
2803 
2804 	TP_fast_assign(
2805 		__entry->dev = sb->s_dev;
2806 		__entry->nblks = nblks;
2807 		__entry->reason = reason;
2808 		__entry->num_fc = EXT4_SB(sb)->s_fc_stats.fc_num_commits;
2809 		__entry->num_fc_ineligible =
2810 			EXT4_SB(sb)->s_fc_stats.fc_ineligible_commits;
2811 		__entry->nblks_agg = EXT4_SB(sb)->s_fc_stats.fc_numblks;
2812 		__entry->tid = commit_tid;
2813 	),
2814 
2815 	TP_printk("dev %d,%d nblks %d, reason %d, fc = %d, ineligible = %d, agg_nblks %d, tid %u",
2816 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2817 		  __entry->nblks, __entry->reason, __entry->num_fc,
2818 		  __entry->num_fc_ineligible, __entry->nblks_agg, __entry->tid)
2819 );
2820 
2821 #define FC_REASON_NAME_STAT(reason)					\
2822 	show_fc_reason(reason),						\
2823 	__entry->fc_ineligible_rc[reason]
2824 
2825 TRACE_EVENT(ext4_fc_stats,
2826 	TP_PROTO(struct super_block *sb),
2827 
2828 	TP_ARGS(sb),
2829 
2830 	TP_STRUCT__entry(
2831 		__field(dev_t, dev)
2832 		__array(unsigned int, fc_ineligible_rc, EXT4_FC_REASON_MAX)
2833 		__field(unsigned long, fc_commits)
2834 		__field(unsigned long, fc_ineligible_commits)
2835 		__field(unsigned long, fc_numblks)
2836 	),
2837 
2838 	TP_fast_assign(
2839 		int i;
2840 
2841 		__entry->dev = sb->s_dev;
2842 		for (i = 0; i < EXT4_FC_REASON_MAX; i++) {
2843 			__entry->fc_ineligible_rc[i] =
2844 				EXT4_SB(sb)->s_fc_stats.fc_ineligible_reason_count[i];
2845 		}
2846 		__entry->fc_commits = EXT4_SB(sb)->s_fc_stats.fc_num_commits;
2847 		__entry->fc_ineligible_commits =
2848 			EXT4_SB(sb)->s_fc_stats.fc_ineligible_commits;
2849 		__entry->fc_numblks = EXT4_SB(sb)->s_fc_stats.fc_numblks;
2850 	),
2851 
2852 	TP_printk("dev %d,%d fc ineligible reasons:\n"
2853 		  "%s:%u, %s:%u, %s:%u, %s:%u, %s:%u, %s:%u, %s:%u, %s:%u, %s:%u, %s:%u"
2854 		  "num_commits:%lu, ineligible: %lu, numblks: %lu",
2855 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2856 		  FC_REASON_NAME_STAT(EXT4_FC_REASON_XATTR),
2857 		  FC_REASON_NAME_STAT(EXT4_FC_REASON_CROSS_RENAME),
2858 		  FC_REASON_NAME_STAT(EXT4_FC_REASON_JOURNAL_FLAG_CHANGE),
2859 		  FC_REASON_NAME_STAT(EXT4_FC_REASON_NOMEM),
2860 		  FC_REASON_NAME_STAT(EXT4_FC_REASON_SWAP_BOOT),
2861 		  FC_REASON_NAME_STAT(EXT4_FC_REASON_RESIZE),
2862 		  FC_REASON_NAME_STAT(EXT4_FC_REASON_RENAME_DIR),
2863 		  FC_REASON_NAME_STAT(EXT4_FC_REASON_FALLOC_RANGE),
2864 		  FC_REASON_NAME_STAT(EXT4_FC_REASON_INODE_JOURNAL_DATA),
2865 		  FC_REASON_NAME_STAT(EXT4_FC_REASON_ENCRYPTED_FILENAME),
2866 		  __entry->fc_commits, __entry->fc_ineligible_commits,
2867 		  __entry->fc_numblks)
2868 );
2869 
2870 DECLARE_EVENT_CLASS(ext4_fc_track_dentry,
2871 
2872 	TP_PROTO(handle_t *handle, struct inode *inode,
2873 		 struct dentry *dentry, int ret),
2874 
2875 	TP_ARGS(handle, inode, dentry, ret),
2876 
2877 	TP_STRUCT__entry(
2878 		__field(dev_t, dev)
2879 		__field(tid_t, t_tid)
2880 		__field(ino_t, i_ino)
2881 		__field(tid_t, i_sync_tid)
2882 		__field(int, error)
2883 	),
2884 
2885 	TP_fast_assign(
2886 		struct ext4_inode_info *ei = EXT4_I(inode);
2887 
2888 		__entry->dev = inode->i_sb->s_dev;
2889 		__entry->t_tid = handle->h_transaction->t_tid;
2890 		__entry->i_ino = inode->i_ino;
2891 		__entry->i_sync_tid = ei->i_sync_tid;
2892 		__entry->error = ret;
2893 	),
2894 
2895 	TP_printk("dev %d,%d, t_tid %u, ino %lu, i_sync_tid %u, error %d",
2896 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2897 		  __entry->t_tid, __entry->i_ino, __entry->i_sync_tid,
2898 		  __entry->error
2899 	)
2900 );
2901 
2902 #define DEFINE_EVENT_CLASS_DENTRY(__type)				\
2903 DEFINE_EVENT(ext4_fc_track_dentry, ext4_fc_track_##__type,		\
2904 	TP_PROTO(handle_t *handle, struct inode *inode,			\
2905 		 struct dentry *dentry, int ret),			\
2906 	TP_ARGS(handle, inode, dentry, ret)				\
2907 )
2908 
2909 DEFINE_EVENT_CLASS_DENTRY(create);
2910 DEFINE_EVENT_CLASS_DENTRY(link);
2911 DEFINE_EVENT_CLASS_DENTRY(unlink);
2912 
2913 TRACE_EVENT(ext4_fc_track_inode,
2914 	TP_PROTO(handle_t *handle, struct inode *inode, int ret),
2915 
2916 	TP_ARGS(handle, inode, ret),
2917 
2918 	TP_STRUCT__entry(
2919 		__field(dev_t, dev)
2920 		__field(tid_t, t_tid)
2921 		__field(ino_t, i_ino)
2922 		__field(tid_t, i_sync_tid)
2923 		__field(int, error)
2924 	),
2925 
2926 	TP_fast_assign(
2927 		struct ext4_inode_info *ei = EXT4_I(inode);
2928 
2929 		__entry->dev = inode->i_sb->s_dev;
2930 		__entry->t_tid = handle->h_transaction->t_tid;
2931 		__entry->i_ino = inode->i_ino;
2932 		__entry->i_sync_tid = ei->i_sync_tid;
2933 		__entry->error = ret;
2934 	),
2935 
2936 	TP_printk("dev %d:%d, t_tid %u, inode %lu, i_sync_tid %u, error %d",
2937 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2938 		  __entry->t_tid, __entry->i_ino, __entry->i_sync_tid,
2939 		  __entry->error)
2940 	);
2941 
2942 TRACE_EVENT(ext4_fc_track_range,
2943 	TP_PROTO(handle_t *handle, struct inode *inode,
2944 		 long start, long end, int ret),
2945 
2946 	TP_ARGS(handle, inode, start, end, ret),
2947 
2948 	TP_STRUCT__entry(
2949 		__field(dev_t, dev)
2950 		__field(tid_t, t_tid)
2951 		__field(ino_t, i_ino)
2952 		__field(tid_t, i_sync_tid)
2953 		__field(long, start)
2954 		__field(long, end)
2955 		__field(int, error)
2956 	),
2957 
2958 	TP_fast_assign(
2959 		struct ext4_inode_info *ei = EXT4_I(inode);
2960 
2961 		__entry->dev = inode->i_sb->s_dev;
2962 		__entry->t_tid = handle->h_transaction->t_tid;
2963 		__entry->i_ino = inode->i_ino;
2964 		__entry->i_sync_tid = ei->i_sync_tid;
2965 		__entry->start = start;
2966 		__entry->end = end;
2967 		__entry->error = ret;
2968 	),
2969 
2970 	TP_printk("dev %d:%d, t_tid %u, inode %lu, i_sync_tid %u, error %d, start %ld, end %ld",
2971 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2972 		  __entry->t_tid, __entry->i_ino, __entry->i_sync_tid,
2973 		  __entry->error, __entry->start, __entry->end)
2974 	);
2975 
2976 TRACE_EVENT(ext4_fc_cleanup,
2977 	TP_PROTO(journal_t *journal, int full, tid_t tid),
2978 
2979 	TP_ARGS(journal, full, tid),
2980 
2981 	TP_STRUCT__entry(
2982 		__field(dev_t, dev)
2983 		__field(int, j_fc_off)
2984 		__field(int, full)
2985 		__field(tid_t, tid)
2986 	),
2987 
2988 	TP_fast_assign(
2989 		struct super_block *sb = journal->j_private;
2990 
2991 		__entry->dev = sb->s_dev;
2992 		__entry->j_fc_off = journal->j_fc_off;
2993 		__entry->full = full;
2994 		__entry->tid = tid;
2995 	),
2996 
2997 	TP_printk("dev %d,%d, j_fc_off %d, full %d, tid %u",
2998 		  MAJOR(__entry->dev), MINOR(__entry->dev),
2999 		  __entry->j_fc_off, __entry->full, __entry->tid)
3000 	);
3001 
3002 TRACE_EVENT(ext4_update_sb,
3003 	TP_PROTO(struct super_block *sb, ext4_fsblk_t fsblk,
3004 		 unsigned int flags),
3005 
3006 	TP_ARGS(sb, fsblk, flags),
3007 
3008 	TP_STRUCT__entry(
3009 		__field(dev_t,		dev)
3010 		__field(ext4_fsblk_t,	fsblk)
3011 		__field(unsigned int,	flags)
3012 	),
3013 
3014 	TP_fast_assign(
3015 		__entry->dev	= sb->s_dev;
3016 		__entry->fsblk	= fsblk;
3017 		__entry->flags	= flags;
3018 	),
3019 
3020 	TP_printk("dev %d,%d fsblk %llu flags %u",
3021 		  MAJOR(__entry->dev), MINOR(__entry->dev),
3022 		  __entry->fsblk, __entry->flags)
3023 );
3024 
3025 TRACE_EVENT(ext4_move_extent_enter,
3026 	TP_PROTO(struct inode *orig_inode, struct ext4_map_blocks *orig_map,
3027 		 struct inode *donor_inode, ext4_lblk_t donor_lblk),
3028 
3029 	TP_ARGS(orig_inode, orig_map, donor_inode, donor_lblk),
3030 
3031 	TP_STRUCT__entry(
3032 		__field(dev_t, dev)
3033 		__field(ino_t, orig_ino)
3034 		__field(ext4_lblk_t, orig_lblk)
3035 		__field(unsigned int, orig_flags)
3036 		__field(ino_t, donor_ino)
3037 		__field(ext4_lblk_t, donor_lblk)
3038 		__field(unsigned int, len)
3039 	),
3040 
3041 	TP_fast_assign(
3042 		__entry->dev		= orig_inode->i_sb->s_dev;
3043 		__entry->orig_ino	= orig_inode->i_ino;
3044 		__entry->orig_lblk	= orig_map->m_lblk;
3045 		__entry->orig_flags	= orig_map->m_flags;
3046 		__entry->donor_ino	= donor_inode->i_ino;
3047 		__entry->donor_lblk	= donor_lblk;
3048 		__entry->len		= orig_map->m_len;
3049 	),
3050 
3051 	TP_printk("dev %d,%d origin ino %lu lblk %u flags %s donor ino %lu lblk %u len %u",
3052 		  MAJOR(__entry->dev), MINOR(__entry->dev),
3053 		  (unsigned long) __entry->orig_ino,  __entry->orig_lblk,
3054 		  show_mflags(__entry->orig_flags),
3055 		  (unsigned long) __entry->donor_ino,  __entry->donor_lblk,
3056 		  __entry->len)
3057 );
3058 
3059 TRACE_EVENT(ext4_move_extent_exit,
3060 	TP_PROTO(struct inode *orig_inode, ext4_lblk_t orig_lblk,
3061 		 struct inode *donor_inode, ext4_lblk_t donor_lblk,
3062 		 unsigned int m_len, u64 move_len, int move_type, int ret),
3063 
3064 	TP_ARGS(orig_inode, orig_lblk, donor_inode, donor_lblk, m_len,
3065 		move_len, move_type, ret),
3066 
3067 	TP_STRUCT__entry(
3068 		__field(dev_t, dev)
3069 		__field(ino_t, orig_ino)
3070 		__field(ext4_lblk_t, orig_lblk)
3071 		__field(ino_t, donor_ino)
3072 		__field(ext4_lblk_t, donor_lblk)
3073 		__field(unsigned int, m_len)
3074 		__field(u64, move_len)
3075 		__field(int, move_type)
3076 		__field(int, ret)
3077 	),
3078 
3079 	TP_fast_assign(
3080 		__entry->dev		= orig_inode->i_sb->s_dev;
3081 		__entry->orig_ino	= orig_inode->i_ino;
3082 		__entry->orig_lblk	= orig_lblk;
3083 		__entry->donor_ino	= donor_inode->i_ino;
3084 		__entry->donor_lblk	= donor_lblk;
3085 		__entry->m_len		= m_len;
3086 		__entry->move_len	= move_len;
3087 		__entry->move_type	= move_type;
3088 		__entry->ret		= ret;
3089 	),
3090 
3091 	TP_printk("dev %d,%d origin ino %lu lblk %u donor ino %lu lblk %u m_len %u, move_len %llu type %d ret %d",
3092 		  MAJOR(__entry->dev), MINOR(__entry->dev),
3093 		  (unsigned long) __entry->orig_ino,  __entry->orig_lblk,
3094 		  (unsigned long) __entry->donor_ino,  __entry->donor_lblk,
3095 		  __entry->m_len, __entry->move_len, __entry->move_type,
3096 		  __entry->ret)
3097 );
3098 
3099 #endif /* _TRACE_EXT4_H */
3100 
3101 /* This part must be outside protection */
3102 #include <trace/define_trace.h>
3103