xref: /openbmc/linux/include/trace/events/ext4.h (revision 565d76cb)
1 #undef TRACE_SYSTEM
2 #define TRACE_SYSTEM ext4
3 
4 #if !defined(_TRACE_EXT4_H) || defined(TRACE_HEADER_MULTI_READ)
5 #define _TRACE_EXT4_H
6 
7 #include <linux/writeback.h>
8 #include <linux/tracepoint.h>
9 
10 struct ext4_allocation_context;
11 struct ext4_allocation_request;
12 struct ext4_prealloc_space;
13 struct ext4_inode_info;
14 struct mpage_da_data;
15 
16 #define EXT4_I(inode) (container_of(inode, struct ext4_inode_info, vfs_inode))
17 
18 TRACE_EVENT(ext4_free_inode,
19 	TP_PROTO(struct inode *inode),
20 
21 	TP_ARGS(inode),
22 
23 	TP_STRUCT__entry(
24 		__field(	int,   dev_major                )
25 		__field(	int,   dev_minor                )
26 		__field(	ino_t,	ino			)
27 		__field(	umode_t, mode			)
28 		__field(	uid_t,	uid			)
29 		__field(	gid_t,	gid			)
30 		__field(	blkcnt_t, blocks		)
31 	),
32 
33 	TP_fast_assign(
34 		__entry->dev_major = MAJOR(inode->i_sb->s_dev);
35 		__entry->dev_minor = MINOR(inode->i_sb->s_dev);
36 		__entry->ino	= inode->i_ino;
37 		__entry->mode	= inode->i_mode;
38 		__entry->uid	= inode->i_uid;
39 		__entry->gid	= inode->i_gid;
40 		__entry->blocks	= inode->i_blocks;
41 	),
42 
43 	TP_printk("dev %d,%d ino %lu mode 0%o uid %u gid %u blocks %llu",
44 		  __entry->dev_major, __entry->dev_minor,
45 		  (unsigned long) __entry->ino, __entry->mode,
46 		  __entry->uid, __entry->gid,
47 		  (unsigned long long) __entry->blocks)
48 );
49 
50 TRACE_EVENT(ext4_request_inode,
51 	TP_PROTO(struct inode *dir, int mode),
52 
53 	TP_ARGS(dir, mode),
54 
55 	TP_STRUCT__entry(
56 		__field(	int,   dev_major                )
57 		__field(	int,   dev_minor                )
58 		__field(	ino_t,	dir			)
59 		__field(	umode_t, mode			)
60 	),
61 
62 	TP_fast_assign(
63 		__entry->dev_major = MAJOR(dir->i_sb->s_dev);
64 		__entry->dev_minor = MINOR(dir->i_sb->s_dev);
65 		__entry->dir	= dir->i_ino;
66 		__entry->mode	= mode;
67 	),
68 
69 	TP_printk("dev %d,%d dir %lu mode 0%o",
70 		  __entry->dev_major, __entry->dev_minor,
71 		  (unsigned long) __entry->dir, __entry->mode)
72 );
73 
74 TRACE_EVENT(ext4_allocate_inode,
75 	TP_PROTO(struct inode *inode, struct inode *dir, int mode),
76 
77 	TP_ARGS(inode, dir, mode),
78 
79 	TP_STRUCT__entry(
80 		__field(	int,   dev_major                )
81 		__field(	int,   dev_minor                )
82 		__field(	ino_t,	ino			)
83 		__field(	ino_t,	dir			)
84 		__field(	umode_t, mode			)
85 	),
86 
87 	TP_fast_assign(
88 		__entry->dev_major = MAJOR(inode->i_sb->s_dev);
89 		__entry->dev_minor = MINOR(inode->i_sb->s_dev);
90 		__entry->ino	= inode->i_ino;
91 		__entry->dir	= dir->i_ino;
92 		__entry->mode	= mode;
93 	),
94 
95 	TP_printk("dev %d,%d ino %lu dir %lu mode 0%o",
96 		  __entry->dev_major, __entry->dev_minor,
97 		  (unsigned long) __entry->ino,
98 		  (unsigned long) __entry->dir, __entry->mode)
99 );
100 
101 TRACE_EVENT(ext4_evict_inode,
102 	TP_PROTO(struct inode *inode),
103 
104 	TP_ARGS(inode),
105 
106 	TP_STRUCT__entry(
107 		__field(	int,   dev_major                )
108 		__field(	int,   dev_minor                )
109 		__field(	ino_t,	ino			)
110 		__field(	int,	nlink			)
111 	),
112 
113 	TP_fast_assign(
114 		__entry->dev_major = MAJOR(inode->i_sb->s_dev);
115 		__entry->dev_minor = MINOR(inode->i_sb->s_dev);
116 		__entry->ino	= inode->i_ino;
117 		__entry->nlink	= inode->i_nlink;
118 	),
119 
120 	TP_printk("dev %d,%d ino %lu nlink %d",
121 		  __entry->dev_major, __entry->dev_minor,
122 		  (unsigned long) __entry->ino, __entry->nlink)
123 );
124 
125 TRACE_EVENT(ext4_drop_inode,
126 	TP_PROTO(struct inode *inode, int drop),
127 
128 	TP_ARGS(inode, drop),
129 
130 	TP_STRUCT__entry(
131 		__field(	int,	dev_major		)
132 		__field(	int,	dev_minor		)
133 		__field(	ino_t,	ino			)
134 		__field(	int,	drop			)
135 	),
136 
137 	TP_fast_assign(
138 		__entry->dev_major = MAJOR(inode->i_sb->s_dev);
139 		__entry->dev_minor = MINOR(inode->i_sb->s_dev);
140 		__entry->ino	= inode->i_ino;
141 		__entry->drop	= drop;
142 	),
143 
144 	TP_printk("dev %d,%d ino %lu drop %d",
145 		  __entry->dev_major, __entry->dev_minor,
146 		  (unsigned long) __entry->ino, __entry->drop)
147 );
148 
149 TRACE_EVENT(ext4_mark_inode_dirty,
150 	TP_PROTO(struct inode *inode, unsigned long IP),
151 
152 	TP_ARGS(inode, IP),
153 
154 	TP_STRUCT__entry(
155 		__field(	int,	dev_major		)
156 		__field(	int,	dev_minor		)
157 		__field(	ino_t,	ino			)
158 		__field(unsigned long,	ip			)
159 	),
160 
161 	TP_fast_assign(
162 		__entry->dev_major = MAJOR(inode->i_sb->s_dev);
163 		__entry->dev_minor = MINOR(inode->i_sb->s_dev);
164 		__entry->ino	= inode->i_ino;
165 		__entry->ip	= IP;
166 	),
167 
168 	TP_printk("dev %d,%d ino %lu caller %pF",
169 		  __entry->dev_major, __entry->dev_minor,
170 		  (unsigned long) __entry->ino, (void *)__entry->ip)
171 );
172 
173 TRACE_EVENT(ext4_begin_ordered_truncate,
174 	TP_PROTO(struct inode *inode, loff_t new_size),
175 
176 	TP_ARGS(inode, new_size),
177 
178 	TP_STRUCT__entry(
179 		__field(	int,	dev_major		)
180 		__field(	int,	dev_minor		)
181 		__field(	ino_t,	ino			)
182 		__field(	loff_t,	new_size		)
183 	),
184 
185 	TP_fast_assign(
186 		__entry->dev_major	= MAJOR(inode->i_sb->s_dev);
187 		__entry->dev_minor	= MINOR(inode->i_sb->s_dev);
188 		__entry->ino		= inode->i_ino;
189 		__entry->new_size	= new_size;
190 	),
191 
192 	TP_printk("dev %d,%d ino %lu new_size %lld",
193 		  __entry->dev_major, __entry->dev_minor,
194 		  (unsigned long) __entry->ino,
195 		  (long long) __entry->new_size)
196 );
197 
198 DECLARE_EVENT_CLASS(ext4__write_begin,
199 
200 	TP_PROTO(struct inode *inode, loff_t pos, unsigned int len,
201 		 unsigned int flags),
202 
203 	TP_ARGS(inode, pos, len, flags),
204 
205 	TP_STRUCT__entry(
206 		__field(	int,   dev_major                )
207 		__field(	int,   dev_minor                )
208 		__field(	ino_t,	ino			)
209 		__field(	loff_t,	pos			)
210 		__field(	unsigned int, len		)
211 		__field(	unsigned int, flags		)
212 	),
213 
214 	TP_fast_assign(
215 		__entry->dev_major = MAJOR(inode->i_sb->s_dev);
216 		__entry->dev_minor = MINOR(inode->i_sb->s_dev);
217 		__entry->ino	= inode->i_ino;
218 		__entry->pos	= pos;
219 		__entry->len	= len;
220 		__entry->flags	= flags;
221 	),
222 
223 	TP_printk("dev %d,%d ino %lu pos %llu len %u flags %u",
224 		  __entry->dev_major, __entry->dev_minor,
225 		  (unsigned long) __entry->ino,
226 		  __entry->pos, __entry->len, __entry->flags)
227 );
228 
229 DEFINE_EVENT(ext4__write_begin, ext4_write_begin,
230 
231 	TP_PROTO(struct inode *inode, loff_t pos, unsigned int len,
232 		 unsigned int flags),
233 
234 	TP_ARGS(inode, pos, len, flags)
235 );
236 
237 DEFINE_EVENT(ext4__write_begin, ext4_da_write_begin,
238 
239 	TP_PROTO(struct inode *inode, loff_t pos, unsigned int len,
240 		 unsigned int flags),
241 
242 	TP_ARGS(inode, pos, len, flags)
243 );
244 
245 DECLARE_EVENT_CLASS(ext4__write_end,
246 	TP_PROTO(struct inode *inode, loff_t pos, unsigned int len,
247 			unsigned int copied),
248 
249 	TP_ARGS(inode, pos, len, copied),
250 
251 	TP_STRUCT__entry(
252 		__field(	int,   dev_major                )
253 		__field(	int,   dev_minor                )
254 		__field(	ino_t,	ino			)
255 		__field(	loff_t,	pos			)
256 		__field(	unsigned int, len		)
257 		__field(	unsigned int, copied		)
258 	),
259 
260 	TP_fast_assign(
261 		__entry->dev_major = MAJOR(inode->i_sb->s_dev);
262 		__entry->dev_minor = MINOR(inode->i_sb->s_dev);
263 		__entry->ino	= inode->i_ino;
264 		__entry->pos	= pos;
265 		__entry->len	= len;
266 		__entry->copied	= copied;
267 	),
268 
269 	TP_printk("dev %d,%d ino %lu pos %llu len %u copied %u",
270 		  __entry->dev_major, __entry->dev_minor,
271 		  (unsigned long) __entry->ino, __entry->pos,
272 		  __entry->len, __entry->copied)
273 );
274 
275 DEFINE_EVENT(ext4__write_end, ext4_ordered_write_end,
276 
277 	TP_PROTO(struct inode *inode, loff_t pos, unsigned int len,
278 		 unsigned int copied),
279 
280 	TP_ARGS(inode, pos, len, copied)
281 );
282 
283 DEFINE_EVENT(ext4__write_end, ext4_writeback_write_end,
284 
285 	TP_PROTO(struct inode *inode, loff_t pos, unsigned int len,
286 		 unsigned int copied),
287 
288 	TP_ARGS(inode, pos, len, copied)
289 );
290 
291 DEFINE_EVENT(ext4__write_end, ext4_journalled_write_end,
292 
293 	TP_PROTO(struct inode *inode, loff_t pos, unsigned int len,
294 		 unsigned int copied),
295 
296 	TP_ARGS(inode, pos, len, copied)
297 );
298 
299 DEFINE_EVENT(ext4__write_end, ext4_da_write_end,
300 
301 	TP_PROTO(struct inode *inode, loff_t pos, unsigned int len,
302 		 unsigned int copied),
303 
304 	TP_ARGS(inode, pos, len, copied)
305 );
306 
307 TRACE_EVENT(ext4_writepage,
308 	TP_PROTO(struct inode *inode, struct page *page),
309 
310 	TP_ARGS(inode, page),
311 
312 	TP_STRUCT__entry(
313 		__field(	int,   dev_major                )
314 		__field(	int,   dev_minor                )
315 		__field(	ino_t,	ino			)
316 		__field(	pgoff_t, index			)
317 
318 	),
319 
320 	TP_fast_assign(
321 		__entry->dev_major = MAJOR(inode->i_sb->s_dev);
322 		__entry->dev_minor = MINOR(inode->i_sb->s_dev);
323 		__entry->ino	= inode->i_ino;
324 		__entry->index	= page->index;
325 	),
326 
327 	TP_printk("dev %d,%d ino %lu page_index %lu",
328 		  __entry->dev_major, __entry->dev_minor,
329 		  (unsigned long) __entry->ino, __entry->index)
330 );
331 
332 TRACE_EVENT(ext4_da_writepages,
333 	TP_PROTO(struct inode *inode, struct writeback_control *wbc),
334 
335 	TP_ARGS(inode, wbc),
336 
337 	TP_STRUCT__entry(
338 		__field(	int,   dev_major                )
339 		__field(	int,   dev_minor                )
340 		__field(	ino_t,	ino			)
341 		__field(	long,	nr_to_write		)
342 		__field(	long,	pages_skipped		)
343 		__field(	loff_t,	range_start		)
344 		__field(	loff_t,	range_end		)
345 		__field(	char,	for_kupdate		)
346 		__field(	char,	for_reclaim		)
347 		__field(	char,	range_cyclic		)
348 		__field(       pgoff_t,	writeback_index		)
349 	),
350 
351 	TP_fast_assign(
352 		__entry->dev_major	= MAJOR(inode->i_sb->s_dev);
353 		__entry->dev_minor	= MINOR(inode->i_sb->s_dev);
354 		__entry->ino		= inode->i_ino;
355 		__entry->nr_to_write	= wbc->nr_to_write;
356 		__entry->pages_skipped	= wbc->pages_skipped;
357 		__entry->range_start	= wbc->range_start;
358 		__entry->range_end	= wbc->range_end;
359 		__entry->for_kupdate	= wbc->for_kupdate;
360 		__entry->for_reclaim	= wbc->for_reclaim;
361 		__entry->range_cyclic	= wbc->range_cyclic;
362 		__entry->writeback_index = inode->i_mapping->writeback_index;
363 	),
364 
365 	TP_printk("dev %d,%d ino %lu nr_to_write %ld pages_skipped %ld "
366 		  "range_start %llu range_end %llu "
367 		  "for_kupdate %d for_reclaim %d "
368 		  "range_cyclic %d writeback_index %lu",
369 		  __entry->dev_major, __entry->dev_minor,
370 		  (unsigned long) __entry->ino, __entry->nr_to_write,
371 		  __entry->pages_skipped, __entry->range_start,
372 		  __entry->range_end,
373 		  __entry->for_kupdate, __entry->for_reclaim,
374 		  __entry->range_cyclic,
375 		  (unsigned long) __entry->writeback_index)
376 );
377 
378 TRACE_EVENT(ext4_da_write_pages,
379 	TP_PROTO(struct inode *inode, struct mpage_da_data *mpd),
380 
381 	TP_ARGS(inode, mpd),
382 
383 	TP_STRUCT__entry(
384 		__field(	int,   dev_major                )
385 		__field(	int,   dev_minor                )
386 		__field(	ino_t,	ino			)
387 		__field(	__u64,	b_blocknr		)
388 		__field(	__u32,	b_size			)
389 		__field(	__u32,	b_state			)
390 		__field(	unsigned long,	first_page	)
391 		__field(	int,	io_done			)
392 		__field(	int,	pages_written		)
393 	),
394 
395 	TP_fast_assign(
396 		__entry->dev_major	= MAJOR(inode->i_sb->s_dev);
397 		__entry->dev_minor	= MINOR(inode->i_sb->s_dev);
398 		__entry->ino		= inode->i_ino;
399 		__entry->b_blocknr	= mpd->b_blocknr;
400 		__entry->b_size		= mpd->b_size;
401 		__entry->b_state	= mpd->b_state;
402 		__entry->first_page	= mpd->first_page;
403 		__entry->io_done	= mpd->io_done;
404 		__entry->pages_written	= mpd->pages_written;
405 	),
406 
407 	TP_printk("dev %d,%d ino %lu b_blocknr %llu b_size %u b_state 0x%04x first_page %lu io_done %d pages_written %d",
408 		  __entry->dev_major, __entry->dev_minor,
409 		  (unsigned long) __entry->ino,
410 		  __entry->b_blocknr, __entry->b_size,
411 		  __entry->b_state, __entry->first_page,
412 		  __entry->io_done, __entry->pages_written)
413 );
414 
415 TRACE_EVENT(ext4_da_writepages_result,
416 	TP_PROTO(struct inode *inode, struct writeback_control *wbc,
417 			int ret, int pages_written),
418 
419 	TP_ARGS(inode, wbc, ret, pages_written),
420 
421 	TP_STRUCT__entry(
422 		__field(	int,   dev_major                )
423 		__field(	int,   dev_minor                )
424 		__field(	ino_t,	ino			)
425 		__field(	int,	ret			)
426 		__field(	int,	pages_written		)
427 		__field(	long,	pages_skipped		)
428 		__field(	char,	more_io			)
429 		__field(       pgoff_t,	writeback_index		)
430 	),
431 
432 	TP_fast_assign(
433 		__entry->dev_major	= MAJOR(inode->i_sb->s_dev);
434 		__entry->dev_minor	= MINOR(inode->i_sb->s_dev);
435 		__entry->ino		= inode->i_ino;
436 		__entry->ret		= ret;
437 		__entry->pages_written	= pages_written;
438 		__entry->pages_skipped	= wbc->pages_skipped;
439 		__entry->more_io	= wbc->more_io;
440 		__entry->writeback_index = inode->i_mapping->writeback_index;
441 	),
442 
443 	TP_printk("dev %d,%d ino %lu ret %d pages_written %d pages_skipped %ld more_io %d writeback_index %lu",
444 		  __entry->dev_major, __entry->dev_minor,
445 		  (unsigned long) __entry->ino, __entry->ret,
446 		  __entry->pages_written, __entry->pages_skipped,
447 		  __entry->more_io,
448 		  (unsigned long) __entry->writeback_index)
449 );
450 
451 TRACE_EVENT(ext4_discard_blocks,
452 	TP_PROTO(struct super_block *sb, unsigned long long blk,
453 			unsigned long long count),
454 
455 	TP_ARGS(sb, blk, count),
456 
457 	TP_STRUCT__entry(
458 		__field(	int,   dev_major                )
459 		__field(	int,   dev_minor                )
460 		__field(	__u64,	blk			)
461 		__field(	__u64,	count			)
462 
463 	),
464 
465 	TP_fast_assign(
466 		__entry->dev_major = MAJOR(sb->s_dev);
467 		__entry->dev_minor = MINOR(sb->s_dev);
468 		__entry->blk	= blk;
469 		__entry->count	= count;
470 	),
471 
472 	TP_printk("dev %d,%d blk %llu count %llu",
473 		  __entry->dev_major, __entry->dev_minor,
474 		  __entry->blk, __entry->count)
475 );
476 
477 DECLARE_EVENT_CLASS(ext4__mb_new_pa,
478 	TP_PROTO(struct ext4_allocation_context *ac,
479 		 struct ext4_prealloc_space *pa),
480 
481 	TP_ARGS(ac, pa),
482 
483 	TP_STRUCT__entry(
484 		__field(	int,   dev_major                )
485 		__field(	int,   dev_minor                )
486 		__field(	ino_t,	ino			)
487 		__field(	__u64,	pa_pstart		)
488 		__field(	__u32,	pa_len			)
489 		__field(	__u64,	pa_lstart		)
490 
491 	),
492 
493 	TP_fast_assign(
494 		__entry->dev_major	= MAJOR(ac->ac_sb->s_dev);
495 		__entry->dev_minor	= MINOR(ac->ac_sb->s_dev);
496 		__entry->ino		= ac->ac_inode->i_ino;
497 		__entry->pa_pstart	= pa->pa_pstart;
498 		__entry->pa_len		= pa->pa_len;
499 		__entry->pa_lstart	= pa->pa_lstart;
500 	),
501 
502 	TP_printk("dev %d,%d ino %lu pstart %llu len %u lstart %llu",
503 		  __entry->dev_major, __entry->dev_minor,
504 		  (unsigned long) __entry->ino, __entry->pa_pstart,
505 		  __entry->pa_len, __entry->pa_lstart)
506 );
507 
508 DEFINE_EVENT(ext4__mb_new_pa, ext4_mb_new_inode_pa,
509 
510 	TP_PROTO(struct ext4_allocation_context *ac,
511 		 struct ext4_prealloc_space *pa),
512 
513 	TP_ARGS(ac, pa)
514 );
515 
516 DEFINE_EVENT(ext4__mb_new_pa, ext4_mb_new_group_pa,
517 
518 	TP_PROTO(struct ext4_allocation_context *ac,
519 		 struct ext4_prealloc_space *pa),
520 
521 	TP_ARGS(ac, pa)
522 );
523 
524 TRACE_EVENT(ext4_mb_release_inode_pa,
525 	TP_PROTO(struct super_block *sb,
526 		 struct inode *inode,
527 		 struct ext4_prealloc_space *pa,
528 		 unsigned long long block, unsigned int count),
529 
530 	TP_ARGS(sb, inode, pa, block, count),
531 
532 	TP_STRUCT__entry(
533 		__field(	int,   dev_major                )
534 		__field(	int,   dev_minor                )
535 		__field(	ino_t,	ino			)
536 		__field(	__u64,	block			)
537 		__field(	__u32,	count			)
538 
539 	),
540 
541 	TP_fast_assign(
542 		__entry->dev_major	= MAJOR(sb->s_dev);
543 		__entry->dev_minor	= MINOR(sb->s_dev);
544 		__entry->ino		= inode->i_ino;
545 		__entry->block		= block;
546 		__entry->count		= count;
547 	),
548 
549 	TP_printk("dev %d,%d ino %lu block %llu count %u",
550 		  __entry->dev_major, __entry->dev_minor,
551 		  (unsigned long) __entry->ino, __entry->block, __entry->count)
552 );
553 
554 TRACE_EVENT(ext4_mb_release_group_pa,
555 	TP_PROTO(struct super_block *sb,
556 		 struct ext4_prealloc_space *pa),
557 
558 	TP_ARGS(sb, pa),
559 
560 	TP_STRUCT__entry(
561 		__field(	int,   dev_major                )
562 		__field(	int,   dev_minor                )
563 		__field(	__u64,	pa_pstart		)
564 		__field(	__u32,	pa_len			)
565 
566 	),
567 
568 	TP_fast_assign(
569 		__entry->dev_major	= MAJOR(sb->s_dev);
570 		__entry->dev_minor	= MINOR(sb->s_dev);
571 		__entry->pa_pstart	= pa->pa_pstart;
572 		__entry->pa_len		= pa->pa_len;
573 	),
574 
575 	TP_printk("dev %d,%d pstart %llu len %u",
576 		  __entry->dev_major, __entry->dev_minor,
577 		  __entry->pa_pstart, __entry->pa_len)
578 );
579 
580 TRACE_EVENT(ext4_discard_preallocations,
581 	TP_PROTO(struct inode *inode),
582 
583 	TP_ARGS(inode),
584 
585 	TP_STRUCT__entry(
586 		__field(	int,   dev_major                )
587 		__field(	int,   dev_minor                )
588 		__field(	ino_t,	ino			)
589 
590 	),
591 
592 	TP_fast_assign(
593 		__entry->dev_major = MAJOR(inode->i_sb->s_dev);
594 		__entry->dev_minor = MINOR(inode->i_sb->s_dev);
595 		__entry->ino	= inode->i_ino;
596 	),
597 
598 	TP_printk("dev %d,%d ino %lu",
599 		  __entry->dev_major, __entry->dev_minor,
600 		  (unsigned long) __entry->ino)
601 );
602 
603 TRACE_EVENT(ext4_mb_discard_preallocations,
604 	TP_PROTO(struct super_block *sb, int needed),
605 
606 	TP_ARGS(sb, needed),
607 
608 	TP_STRUCT__entry(
609 		__field(	int,   dev_major                )
610 		__field(	int,   dev_minor                )
611 		__field(	int,	needed			)
612 
613 	),
614 
615 	TP_fast_assign(
616 		__entry->dev_major = MAJOR(sb->s_dev);
617 		__entry->dev_minor = MINOR(sb->s_dev);
618 		__entry->needed	= needed;
619 	),
620 
621 	TP_printk("dev %d,%d needed %d",
622 		  __entry->dev_major, __entry->dev_minor, __entry->needed)
623 );
624 
625 TRACE_EVENT(ext4_request_blocks,
626 	TP_PROTO(struct ext4_allocation_request *ar),
627 
628 	TP_ARGS(ar),
629 
630 	TP_STRUCT__entry(
631 		__field(	int,   dev_major                )
632 		__field(	int,   dev_minor                )
633 		__field(	ino_t,	ino			)
634 		__field(	unsigned int, flags		)
635 		__field(	unsigned int, len		)
636 		__field(	__u64,  logical			)
637 		__field(	__u64,	goal			)
638 		__field(	__u64,	lleft			)
639 		__field(	__u64,	lright			)
640 		__field(	__u64,	pleft			)
641 		__field(	__u64,	pright			)
642 	),
643 
644 	TP_fast_assign(
645 		__entry->dev_major = MAJOR(ar->inode->i_sb->s_dev);
646 		__entry->dev_minor = MINOR(ar->inode->i_sb->s_dev);
647 		__entry->ino	= ar->inode->i_ino;
648 		__entry->flags	= ar->flags;
649 		__entry->len	= ar->len;
650 		__entry->logical = ar->logical;
651 		__entry->goal	= ar->goal;
652 		__entry->lleft	= ar->lleft;
653 		__entry->lright	= ar->lright;
654 		__entry->pleft	= ar->pleft;
655 		__entry->pright	= ar->pright;
656 	),
657 
658 	TP_printk("dev %d,%d ino %lu flags %u len %u lblk %llu goal %llu lleft %llu lright %llu pleft %llu pright %llu ",
659 		  __entry->dev_major, __entry->dev_minor,
660 		  (unsigned long) __entry->ino,
661 		  __entry->flags, __entry->len,
662 		  (unsigned long long) __entry->logical,
663 		  (unsigned long long) __entry->goal,
664 		  (unsigned long long) __entry->lleft,
665 		  (unsigned long long) __entry->lright,
666 		  (unsigned long long) __entry->pleft,
667 		  (unsigned long long) __entry->pright)
668 );
669 
670 TRACE_EVENT(ext4_allocate_blocks,
671 	TP_PROTO(struct ext4_allocation_request *ar, unsigned long long block),
672 
673 	TP_ARGS(ar, block),
674 
675 	TP_STRUCT__entry(
676 		__field(	int,   dev_major                )
677 		__field(	int,   dev_minor                )
678 		__field(	ino_t,	ino			)
679 		__field(	__u64,	block			)
680 		__field(	unsigned int, flags		)
681 		__field(	unsigned int, len		)
682 		__field(	__u64,  logical			)
683 		__field(	__u64,	goal			)
684 		__field(	__u64,	lleft			)
685 		__field(	__u64,	lright			)
686 		__field(	__u64,	pleft			)
687 		__field(	__u64,	pright			)
688 	),
689 
690 	TP_fast_assign(
691 		__entry->dev_major = MAJOR(ar->inode->i_sb->s_dev);
692 		__entry->dev_minor = MINOR(ar->inode->i_sb->s_dev);
693 		__entry->ino	= ar->inode->i_ino;
694 		__entry->block	= block;
695 		__entry->flags	= ar->flags;
696 		__entry->len	= ar->len;
697 		__entry->logical = ar->logical;
698 		__entry->goal	= ar->goal;
699 		__entry->lleft	= ar->lleft;
700 		__entry->lright	= ar->lright;
701 		__entry->pleft	= ar->pleft;
702 		__entry->pright	= ar->pright;
703 	),
704 
705 	TP_printk("dev %d,%d ino %lu flags %u len %u block %llu lblk %llu goal %llu lleft %llu lright %llu pleft %llu pright %llu ",
706 		  __entry->dev_major, __entry->dev_minor,
707 		  (unsigned long) __entry->ino, __entry->flags,
708 		  __entry->len, __entry->block,
709 		  (unsigned long long) __entry->logical,
710 		  (unsigned long long) __entry->goal,
711 		  (unsigned long long) __entry->lleft,
712 		  (unsigned long long) __entry->lright,
713 		  (unsigned long long) __entry->pleft,
714 		  (unsigned long long) __entry->pright)
715 );
716 
717 TRACE_EVENT(ext4_free_blocks,
718 	TP_PROTO(struct inode *inode, __u64 block, unsigned long count,
719 		 int flags),
720 
721 	TP_ARGS(inode, block, count, flags),
722 
723 	TP_STRUCT__entry(
724 		__field(	int,   dev_major                )
725 		__field(	int,   dev_minor                )
726 		__field(	ino_t,	ino			)
727 		__field(      umode_t, mode			)
728 		__field(	__u64,	block			)
729 		__field(	unsigned long,	count		)
730 		__field(	 int,	flags			)
731 	),
732 
733 	TP_fast_assign(
734 		__entry->dev_major	= MAJOR(inode->i_sb->s_dev);
735 		__entry->dev_minor	= MINOR(inode->i_sb->s_dev);
736 		__entry->ino		= inode->i_ino;
737 		__entry->mode		= inode->i_mode;
738 		__entry->block		= block;
739 		__entry->count		= count;
740 		__entry->flags		= flags;
741 	),
742 
743 	TP_printk("dev %d,%d ino %lu mode 0%o block %llu count %lu flags %d",
744 		  __entry->dev_major, __entry->dev_minor,
745 		  (unsigned long) __entry->ino,
746 		  __entry->mode, __entry->block, __entry->count,
747 		  __entry->flags)
748 );
749 
750 TRACE_EVENT(ext4_sync_file,
751 	TP_PROTO(struct file *file, int datasync),
752 
753 	TP_ARGS(file, datasync),
754 
755 	TP_STRUCT__entry(
756 		__field(	int,   dev_major                )
757 		__field(	int,   dev_minor                )
758 		__field(	ino_t,	ino			)
759 		__field(	ino_t,	parent			)
760 		__field(	int,	datasync		)
761 	),
762 
763 	TP_fast_assign(
764 		struct dentry *dentry = file->f_path.dentry;
765 
766 		__entry->dev_major	= MAJOR(dentry->d_inode->i_sb->s_dev);
767 		__entry->dev_minor	= MINOR(dentry->d_inode->i_sb->s_dev);
768 		__entry->ino		= dentry->d_inode->i_ino;
769 		__entry->datasync	= datasync;
770 		__entry->parent		= dentry->d_parent->d_inode->i_ino;
771 	),
772 
773 	TP_printk("dev %d,%d ino %ld parent %ld datasync %d ",
774 		  __entry->dev_major, __entry->dev_minor,
775 		  (unsigned long) __entry->ino,
776 		  (unsigned long) __entry->parent, __entry->datasync)
777 );
778 
779 TRACE_EVENT(ext4_sync_fs,
780 	TP_PROTO(struct super_block *sb, int wait),
781 
782 	TP_ARGS(sb, wait),
783 
784 	TP_STRUCT__entry(
785 		__field(	int,   dev_major                )
786 		__field(	int,   dev_minor                )
787 		__field(	int,	wait			)
788 
789 	),
790 
791 	TP_fast_assign(
792 		__entry->dev_major = MAJOR(sb->s_dev);
793 		__entry->dev_minor = MINOR(sb->s_dev);
794 		__entry->wait	= wait;
795 	),
796 
797 	TP_printk("dev %d,%d wait %d", __entry->dev_major,
798 		  __entry->dev_minor, __entry->wait)
799 );
800 
801 TRACE_EVENT(ext4_alloc_da_blocks,
802 	TP_PROTO(struct inode *inode),
803 
804 	TP_ARGS(inode),
805 
806 	TP_STRUCT__entry(
807 		__field(	int,   dev_major                )
808 		__field(	int,   dev_minor                )
809 		__field(	ino_t,	ino			)
810 		__field( unsigned int,	data_blocks	)
811 		__field( unsigned int,	meta_blocks	)
812 	),
813 
814 	TP_fast_assign(
815 		__entry->dev_major = MAJOR(inode->i_sb->s_dev);
816 		__entry->dev_minor = MINOR(inode->i_sb->s_dev);
817 		__entry->ino	= inode->i_ino;
818 		__entry->data_blocks = EXT4_I(inode)->i_reserved_data_blocks;
819 		__entry->meta_blocks = EXT4_I(inode)->i_reserved_meta_blocks;
820 	),
821 
822 	TP_printk("dev %d,%d ino %lu data_blocks %u meta_blocks %u",
823 		  __entry->dev_major, __entry->dev_minor,
824 		  (unsigned long) __entry->ino,
825 		  __entry->data_blocks, __entry->meta_blocks)
826 );
827 
828 TRACE_EVENT(ext4_mballoc_alloc,
829 	TP_PROTO(struct ext4_allocation_context *ac),
830 
831 	TP_ARGS(ac),
832 
833 	TP_STRUCT__entry(
834 		__field(	int,   dev_major                )
835 		__field(	int,   dev_minor                )
836 		__field(	ino_t,	ino			)
837 		__field(	__u16,	found			)
838 		__field(	__u16,	groups			)
839 		__field(	__u16,	buddy			)
840 		__field(	__u16,	flags			)
841 		__field(	__u16,	tail			)
842 		__field(	__u8,	cr			)
843 		__field(	__u32, 	orig_logical		)
844 		__field(	  int,	orig_start		)
845 		__field(	__u32, 	orig_group		)
846 		__field(	  int,	orig_len		)
847 		__field(	__u32, 	goal_logical		)
848 		__field(	  int,	goal_start		)
849 		__field(	__u32, 	goal_group		)
850 		__field(	  int,	goal_len		)
851 		__field(	__u32, 	result_logical		)
852 		__field(	  int,	result_start		)
853 		__field(	__u32, 	result_group		)
854 		__field(	  int,	result_len		)
855 	),
856 
857 	TP_fast_assign(
858 		__entry->dev_major	= MAJOR(ac->ac_inode->i_sb->s_dev);
859 		__entry->dev_minor	= MINOR(ac->ac_inode->i_sb->s_dev);
860 		__entry->ino		= ac->ac_inode->i_ino;
861 		__entry->found		= ac->ac_found;
862 		__entry->flags		= ac->ac_flags;
863 		__entry->groups		= ac->ac_groups_scanned;
864 		__entry->buddy		= ac->ac_buddy;
865 		__entry->tail		= ac->ac_tail;
866 		__entry->cr		= ac->ac_criteria;
867 		__entry->orig_logical	= ac->ac_o_ex.fe_logical;
868 		__entry->orig_start	= ac->ac_o_ex.fe_start;
869 		__entry->orig_group	= ac->ac_o_ex.fe_group;
870 		__entry->orig_len	= ac->ac_o_ex.fe_len;
871 		__entry->goal_logical	= ac->ac_g_ex.fe_logical;
872 		__entry->goal_start	= ac->ac_g_ex.fe_start;
873 		__entry->goal_group	= ac->ac_g_ex.fe_group;
874 		__entry->goal_len	= ac->ac_g_ex.fe_len;
875 		__entry->result_logical	= ac->ac_f_ex.fe_logical;
876 		__entry->result_start	= ac->ac_f_ex.fe_start;
877 		__entry->result_group	= ac->ac_f_ex.fe_group;
878 		__entry->result_len	= ac->ac_f_ex.fe_len;
879 	),
880 
881 	TP_printk("dev %d,%d inode %lu orig %u/%d/%u@%u goal %u/%d/%u@%u "
882 		  "result %u/%d/%u@%u blks %u grps %u cr %u flags 0x%04x "
883 		  "tail %u broken %u",
884 		  __entry->dev_major, __entry->dev_minor,
885 		  (unsigned long) __entry->ino,
886 		  __entry->orig_group, __entry->orig_start,
887 		  __entry->orig_len, __entry->orig_logical,
888 		  __entry->goal_group, __entry->goal_start,
889 		  __entry->goal_len, __entry->goal_logical,
890 		  __entry->result_group, __entry->result_start,
891 		  __entry->result_len, __entry->result_logical,
892 		  __entry->found, __entry->groups, __entry->cr,
893 		  __entry->flags, __entry->tail,
894 		  __entry->buddy ? 1 << __entry->buddy : 0)
895 );
896 
897 TRACE_EVENT(ext4_mballoc_prealloc,
898 	TP_PROTO(struct ext4_allocation_context *ac),
899 
900 	TP_ARGS(ac),
901 
902 	TP_STRUCT__entry(
903 		__field(	int,   dev_major                )
904 		__field(	int,   dev_minor                )
905 		__field(	ino_t,	ino			)
906 		__field(	__u32, 	orig_logical		)
907 		__field(	  int,	orig_start		)
908 		__field(	__u32, 	orig_group		)
909 		__field(	  int,	orig_len		)
910 		__field(	__u32, 	result_logical		)
911 		__field(	  int,	result_start		)
912 		__field(	__u32, 	result_group		)
913 		__field(	  int,	result_len		)
914 	),
915 
916 	TP_fast_assign(
917 		__entry->dev_major	= MAJOR(ac->ac_inode->i_sb->s_dev);
918 		__entry->dev_minor	= MINOR(ac->ac_inode->i_sb->s_dev);
919 		__entry->ino		= ac->ac_inode->i_ino;
920 		__entry->orig_logical	= ac->ac_o_ex.fe_logical;
921 		__entry->orig_start	= ac->ac_o_ex.fe_start;
922 		__entry->orig_group	= ac->ac_o_ex.fe_group;
923 		__entry->orig_len	= ac->ac_o_ex.fe_len;
924 		__entry->result_logical	= ac->ac_b_ex.fe_logical;
925 		__entry->result_start	= ac->ac_b_ex.fe_start;
926 		__entry->result_group	= ac->ac_b_ex.fe_group;
927 		__entry->result_len	= ac->ac_b_ex.fe_len;
928 	),
929 
930 	TP_printk("dev %d,%d inode %lu orig %u/%d/%u@%u result %u/%d/%u@%u",
931 		  __entry->dev_major, __entry->dev_minor,
932 		  (unsigned long) __entry->ino,
933 		  __entry->orig_group, __entry->orig_start,
934 		  __entry->orig_len, __entry->orig_logical,
935 		  __entry->result_group, __entry->result_start,
936 		  __entry->result_len, __entry->result_logical)
937 );
938 
939 DECLARE_EVENT_CLASS(ext4__mballoc,
940 	TP_PROTO(struct super_block *sb,
941 		 struct inode *inode,
942 		 ext4_group_t group,
943 		 ext4_grpblk_t start,
944 		 ext4_grpblk_t len),
945 
946 	TP_ARGS(sb, inode, group, start, len),
947 
948 	TP_STRUCT__entry(
949 		__field(	int,   dev_major                )
950 		__field(	int,   dev_minor                )
951 		__field(	ino_t,	ino			)
952 		__field(	  int,	result_start		)
953 		__field(	__u32, 	result_group		)
954 		__field(	  int,	result_len		)
955 	),
956 
957 	TP_fast_assign(
958 		__entry->dev_major	= MAJOR(sb->s_dev);
959 		__entry->dev_minor	= MINOR(sb->s_dev);
960 		__entry->ino		= inode ? inode->i_ino : 0;
961 		__entry->result_start	= start;
962 		__entry->result_group	= group;
963 		__entry->result_len	= len;
964 	),
965 
966 	TP_printk("dev %d,%d inode %lu extent %u/%d/%u ",
967 		  __entry->dev_major, __entry->dev_minor,
968 		  (unsigned long) __entry->ino,
969 		  __entry->result_group, __entry->result_start,
970 		  __entry->result_len)
971 );
972 
973 DEFINE_EVENT(ext4__mballoc, ext4_mballoc_discard,
974 
975 	TP_PROTO(struct super_block *sb,
976 		 struct inode *inode,
977 		 ext4_group_t group,
978 		 ext4_grpblk_t start,
979 		 ext4_grpblk_t len),
980 
981 	TP_ARGS(sb, inode, group, start, len)
982 );
983 
984 DEFINE_EVENT(ext4__mballoc, ext4_mballoc_free,
985 
986 	TP_PROTO(struct super_block *sb,
987 		 struct inode *inode,
988 		 ext4_group_t group,
989 		 ext4_grpblk_t start,
990 		 ext4_grpblk_t len),
991 
992 	TP_ARGS(sb, inode, group, start, len)
993 );
994 
995 TRACE_EVENT(ext4_forget,
996 	TP_PROTO(struct inode *inode, int is_metadata, __u64 block),
997 
998 	TP_ARGS(inode, is_metadata, block),
999 
1000 	TP_STRUCT__entry(
1001 		__field(	int,   dev_major                )
1002 		__field(	int,   dev_minor                )
1003 		__field(	ino_t,	ino			)
1004 		__field(	umode_t, mode			)
1005 		__field(	int,	is_metadata		)
1006 		__field(	__u64,	block			)
1007 	),
1008 
1009 	TP_fast_assign(
1010 		__entry->dev_major = MAJOR(inode->i_sb->s_dev);
1011 		__entry->dev_minor = MINOR(inode->i_sb->s_dev);
1012 		__entry->ino	= inode->i_ino;
1013 		__entry->mode	= inode->i_mode;
1014 		__entry->is_metadata = is_metadata;
1015 		__entry->block	= block;
1016 	),
1017 
1018 	TP_printk("dev %d,%d ino %lu mode 0%o is_metadata %d block %llu",
1019 		  __entry->dev_major, __entry->dev_minor,
1020 		  (unsigned long) __entry->ino, __entry->mode,
1021 		  __entry->is_metadata, __entry->block)
1022 );
1023 
1024 TRACE_EVENT(ext4_da_update_reserve_space,
1025 	TP_PROTO(struct inode *inode, int used_blocks),
1026 
1027 	TP_ARGS(inode, used_blocks),
1028 
1029 	TP_STRUCT__entry(
1030 		__field(	int,   dev_major                )
1031 		__field(	int,   dev_minor                )
1032 		__field(	ino_t,	ino			)
1033 		__field(	umode_t, mode			)
1034 		__field(	__u64,	i_blocks		)
1035 		__field(	int,	used_blocks		)
1036 		__field(	int,	reserved_data_blocks	)
1037 		__field(	int,	reserved_meta_blocks	)
1038 		__field(	int,	allocated_meta_blocks	)
1039 	),
1040 
1041 	TP_fast_assign(
1042 		__entry->dev_major = MAJOR(inode->i_sb->s_dev);
1043 		__entry->dev_minor = MINOR(inode->i_sb->s_dev);
1044 		__entry->ino	= inode->i_ino;
1045 		__entry->mode	= inode->i_mode;
1046 		__entry->i_blocks = inode->i_blocks;
1047 		__entry->used_blocks = used_blocks;
1048 		__entry->reserved_data_blocks = EXT4_I(inode)->i_reserved_data_blocks;
1049 		__entry->reserved_meta_blocks = EXT4_I(inode)->i_reserved_meta_blocks;
1050 		__entry->allocated_meta_blocks = EXT4_I(inode)->i_allocated_meta_blocks;
1051 	),
1052 
1053 	TP_printk("dev %d,%d ino %lu mode 0%o i_blocks %llu used_blocks %d reserved_data_blocks %d reserved_meta_blocks %d allocated_meta_blocks %d",
1054 		  __entry->dev_major, __entry->dev_minor,
1055 		  (unsigned long) __entry->ino, __entry->mode,
1056 		  (unsigned long long) __entry->i_blocks,
1057 		  __entry->used_blocks, __entry->reserved_data_blocks,
1058 		  __entry->reserved_meta_blocks, __entry->allocated_meta_blocks)
1059 );
1060 
1061 TRACE_EVENT(ext4_da_reserve_space,
1062 	TP_PROTO(struct inode *inode, int md_needed),
1063 
1064 	TP_ARGS(inode, md_needed),
1065 
1066 	TP_STRUCT__entry(
1067 		__field(	int,   dev_major                )
1068 		__field(	int,   dev_minor                )
1069 		__field(	ino_t,	ino			)
1070 		__field(	umode_t, mode			)
1071 		__field(	__u64,	i_blocks		)
1072 		__field(	int,	md_needed		)
1073 		__field(	int,	reserved_data_blocks	)
1074 		__field(	int,	reserved_meta_blocks	)
1075 	),
1076 
1077 	TP_fast_assign(
1078 		__entry->dev_major = MAJOR(inode->i_sb->s_dev);
1079 		__entry->dev_minor = MINOR(inode->i_sb->s_dev);
1080 		__entry->ino	= inode->i_ino;
1081 		__entry->mode	= inode->i_mode;
1082 		__entry->i_blocks = inode->i_blocks;
1083 		__entry->md_needed = md_needed;
1084 		__entry->reserved_data_blocks = EXT4_I(inode)->i_reserved_data_blocks;
1085 		__entry->reserved_meta_blocks = EXT4_I(inode)->i_reserved_meta_blocks;
1086 	),
1087 
1088 	TP_printk("dev %d,%d ino %lu mode 0%o i_blocks %llu md_needed %d reserved_data_blocks %d reserved_meta_blocks %d",
1089 		  __entry->dev_major, __entry->dev_minor,
1090 		  (unsigned long) __entry->ino,
1091 		  __entry->mode, (unsigned long long) __entry->i_blocks,
1092 		  __entry->md_needed, __entry->reserved_data_blocks,
1093 		  __entry->reserved_meta_blocks)
1094 );
1095 
1096 TRACE_EVENT(ext4_da_release_space,
1097 	TP_PROTO(struct inode *inode, int freed_blocks),
1098 
1099 	TP_ARGS(inode, freed_blocks),
1100 
1101 	TP_STRUCT__entry(
1102 		__field(	int,   dev_major                )
1103 		__field(	int,   dev_minor                )
1104 		__field(	ino_t,	ino			)
1105 		__field(	umode_t, mode			)
1106 		__field(	__u64,	i_blocks		)
1107 		__field(	int,	freed_blocks		)
1108 		__field(	int,	reserved_data_blocks	)
1109 		__field(	int,	reserved_meta_blocks	)
1110 		__field(	int,	allocated_meta_blocks	)
1111 	),
1112 
1113 	TP_fast_assign(
1114 		__entry->dev_major = MAJOR(inode->i_sb->s_dev);
1115 		__entry->dev_minor = MINOR(inode->i_sb->s_dev);
1116 		__entry->ino	= inode->i_ino;
1117 		__entry->mode	= inode->i_mode;
1118 		__entry->i_blocks = inode->i_blocks;
1119 		__entry->freed_blocks = freed_blocks;
1120 		__entry->reserved_data_blocks = EXT4_I(inode)->i_reserved_data_blocks;
1121 		__entry->reserved_meta_blocks = EXT4_I(inode)->i_reserved_meta_blocks;
1122 		__entry->allocated_meta_blocks = EXT4_I(inode)->i_allocated_meta_blocks;
1123 	),
1124 
1125 	TP_printk("dev %d,%d ino %lu mode 0%o i_blocks %llu freed_blocks %d reserved_data_blocks %d reserved_meta_blocks %d allocated_meta_blocks %d",
1126 		  __entry->dev_major, __entry->dev_minor,
1127 		  (unsigned long) __entry->ino,
1128 		  __entry->mode, (unsigned long long) __entry->i_blocks,
1129 		  __entry->freed_blocks, __entry->reserved_data_blocks,
1130 		  __entry->reserved_meta_blocks, __entry->allocated_meta_blocks)
1131 );
1132 
1133 DECLARE_EVENT_CLASS(ext4__bitmap_load,
1134 	TP_PROTO(struct super_block *sb, unsigned long group),
1135 
1136 	TP_ARGS(sb, group),
1137 
1138 	TP_STRUCT__entry(
1139 		__field(	int,   dev_major                )
1140 		__field(	int,   dev_minor                )
1141 		__field(	__u32,	group			)
1142 
1143 	),
1144 
1145 	TP_fast_assign(
1146 		__entry->dev_major = MAJOR(sb->s_dev);
1147 		__entry->dev_minor = MINOR(sb->s_dev);
1148 		__entry->group	= group;
1149 	),
1150 
1151 	TP_printk("dev %d,%d group %u",
1152 		  __entry->dev_major, __entry->dev_minor, __entry->group)
1153 );
1154 
1155 DEFINE_EVENT(ext4__bitmap_load, ext4_mb_bitmap_load,
1156 
1157 	TP_PROTO(struct super_block *sb, unsigned long group),
1158 
1159 	TP_ARGS(sb, group)
1160 );
1161 
1162 DEFINE_EVENT(ext4__bitmap_load, ext4_mb_buddy_bitmap_load,
1163 
1164 	TP_PROTO(struct super_block *sb, unsigned long group),
1165 
1166 	TP_ARGS(sb, group)
1167 );
1168 
1169 #endif /* _TRACE_EXT4_H */
1170 
1171 /* This part must be outside protection */
1172 #include <trace/define_trace.h>
1173