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