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