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