Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6
[firefly-linux-kernel-4.4.55.git] / include / trace / events / btrfs.h
1 #undef TRACE_SYSTEM
2 #define TRACE_SYSTEM btrfs
3
4 #if !defined(_TRACE_BTRFS_H) || defined(TRACE_HEADER_MULTI_READ)
5 #define _TRACE_BTRFS_H
6
7 #include <linux/writeback.h>
8 #include <linux/tracepoint.h>
9
10 struct btrfs_root;
11 struct btrfs_fs_info;
12 struct btrfs_inode;
13 struct extent_map;
14 struct btrfs_ordered_extent;
15 struct btrfs_delayed_ref_node;
16 struct btrfs_delayed_tree_ref;
17 struct btrfs_delayed_data_ref;
18 struct btrfs_delayed_ref_head;
19 struct map_lookup;
20 struct extent_buffer;
21
22 #define show_ref_type(type)                                             \
23         __print_symbolic(type,                                          \
24                 { BTRFS_TREE_BLOCK_REF_KEY,     "TREE_BLOCK_REF" },     \
25                 { BTRFS_EXTENT_DATA_REF_KEY,    "EXTENT_DATA_REF" },    \
26                 { BTRFS_EXTENT_REF_V0_KEY,      "EXTENT_REF_V0" },      \
27                 { BTRFS_SHARED_BLOCK_REF_KEY,   "SHARED_BLOCK_REF" },   \
28                 { BTRFS_SHARED_DATA_REF_KEY,    "SHARED_DATA_REF" })
29
30 #define __show_root_type(obj)                                           \
31         __print_symbolic(obj,                                           \
32                 { BTRFS_ROOT_TREE_OBJECTID,     "ROOT_TREE"     },      \
33                 { BTRFS_EXTENT_TREE_OBJECTID,   "EXTENT_TREE"   },      \
34                 { BTRFS_CHUNK_TREE_OBJECTID,    "CHUNK_TREE"    },      \
35                 { BTRFS_DEV_TREE_OBJECTID,      "DEV_TREE"      },      \
36                 { BTRFS_FS_TREE_OBJECTID,       "FS_TREE"       },      \
37                 { BTRFS_ROOT_TREE_DIR_OBJECTID, "ROOT_TREE_DIR" },      \
38                 { BTRFS_CSUM_TREE_OBJECTID,     "CSUM_TREE"     },      \
39                 { BTRFS_TREE_LOG_OBJECTID,      "TREE_LOG"      },      \
40                 { BTRFS_TREE_RELOC_OBJECTID,    "TREE_RELOC"    },      \
41                 { BTRFS_DATA_RELOC_TREE_OBJECTID, "DATA_RELOC_TREE" })
42
43 #define show_root_type(obj)                                             \
44         obj, ((obj >= BTRFS_DATA_RELOC_TREE_OBJECTID) ||                \
45               (obj <= BTRFS_CSUM_TREE_OBJECTID )) ? __show_root_type(obj) : "-"
46
47 TRACE_EVENT(btrfs_transaction_commit,
48
49         TP_PROTO(struct btrfs_root *root),
50
51         TP_ARGS(root),
52
53         TP_STRUCT__entry(
54                 __field(        u64,  generation                )
55                 __field(        u64,  root_objectid             )
56         ),
57
58         TP_fast_assign(
59                 __entry->generation     = root->fs_info->generation;
60                 __entry->root_objectid  = root->root_key.objectid;
61         ),
62
63         TP_printk("root = %llu(%s), gen = %llu",
64                   show_root_type(__entry->root_objectid),
65                   (unsigned long long)__entry->generation)
66 );
67
68 DECLARE_EVENT_CLASS(btrfs__inode,
69
70         TP_PROTO(struct inode *inode),
71
72         TP_ARGS(inode),
73
74         TP_STRUCT__entry(
75                 __field(        ino_t,  ino                     )
76                 __field(        blkcnt_t,  blocks               )
77                 __field(        u64,  disk_i_size               )
78                 __field(        u64,  generation                )
79                 __field(        u64,  last_trans                )
80                 __field(        u64,  logged_trans              )
81                 __field(        u64,  root_objectid             )
82         ),
83
84         TP_fast_assign(
85                 __entry->ino    = inode->i_ino;
86                 __entry->blocks = inode->i_blocks;
87                 __entry->disk_i_size  = BTRFS_I(inode)->disk_i_size;
88                 __entry->generation = BTRFS_I(inode)->generation;
89                 __entry->last_trans = BTRFS_I(inode)->last_trans;
90                 __entry->logged_trans = BTRFS_I(inode)->logged_trans;
91                 __entry->root_objectid =
92                                 BTRFS_I(inode)->root->root_key.objectid;
93         ),
94
95         TP_printk("root = %llu(%s), gen = %llu, ino = %lu, blocks = %llu, "
96                   "disk_i_size = %llu, last_trans = %llu, logged_trans = %llu",
97                   show_root_type(__entry->root_objectid),
98                   (unsigned long long)__entry->generation,
99                   (unsigned long)__entry->ino,
100                   (unsigned long long)__entry->blocks,
101                   (unsigned long long)__entry->disk_i_size,
102                   (unsigned long long)__entry->last_trans,
103                   (unsigned long long)__entry->logged_trans)
104 );
105
106 DEFINE_EVENT(btrfs__inode, btrfs_inode_new,
107
108         TP_PROTO(struct inode *inode),
109
110         TP_ARGS(inode)
111 );
112
113 DEFINE_EVENT(btrfs__inode, btrfs_inode_request,
114
115         TP_PROTO(struct inode *inode),
116
117         TP_ARGS(inode)
118 );
119
120 DEFINE_EVENT(btrfs__inode, btrfs_inode_evict,
121
122         TP_PROTO(struct inode *inode),
123
124         TP_ARGS(inode)
125 );
126
127 #define __show_map_type(type)                                           \
128         __print_symbolic(type,                                          \
129                 { EXTENT_MAP_LAST_BYTE, "LAST_BYTE"     },              \
130                 { EXTENT_MAP_HOLE,      "HOLE"          },              \
131                 { EXTENT_MAP_INLINE,    "INLINE"        },              \
132                 { EXTENT_MAP_DELALLOC,  "DELALLOC"      })
133
134 #define show_map_type(type)                     \
135         type, (type >= EXTENT_MAP_LAST_BYTE) ? "-" :  __show_map_type(type)
136
137 #define show_map_flags(flag)                                            \
138         __print_flags(flag, "|",                                        \
139                 { EXTENT_FLAG_PINNED,           "PINNED"        },      \
140                 { EXTENT_FLAG_COMPRESSED,       "COMPRESSED"    },      \
141                 { EXTENT_FLAG_VACANCY,          "VACANCY"       },      \
142                 { EXTENT_FLAG_PREALLOC,         "PREALLOC"      })
143
144 TRACE_EVENT(btrfs_get_extent,
145
146         TP_PROTO(struct btrfs_root *root, struct extent_map *map),
147
148         TP_ARGS(root, map),
149
150         TP_STRUCT__entry(
151                 __field(        u64,  root_objectid     )
152                 __field(        u64,  start             )
153                 __field(        u64,  len               )
154                 __field(        u64,  orig_start        )
155                 __field(        u64,  block_start       )
156                 __field(        u64,  block_len         )
157                 __field(        unsigned long,  flags   )
158                 __field(        int,  refs              )
159                 __field(        unsigned int,  compress_type    )
160         ),
161
162         TP_fast_assign(
163                 __entry->root_objectid  = root->root_key.objectid;
164                 __entry->start          = map->start;
165                 __entry->len            = map->len;
166                 __entry->orig_start     = map->orig_start;
167                 __entry->block_start    = map->block_start;
168                 __entry->block_len      = map->block_len;
169                 __entry->flags          = map->flags;
170                 __entry->refs           = atomic_read(&map->refs);
171                 __entry->compress_type  = map->compress_type;
172         ),
173
174         TP_printk("root = %llu(%s), start = %llu, len = %llu, "
175                   "orig_start = %llu, block_start = %llu(%s), "
176                   "block_len = %llu, flags = %s, refs = %u, "
177                   "compress_type = %u",
178                   show_root_type(__entry->root_objectid),
179                   (unsigned long long)__entry->start,
180                   (unsigned long long)__entry->len,
181                   (unsigned long long)__entry->orig_start,
182                   show_map_type(__entry->block_start),
183                   (unsigned long long)__entry->block_len,
184                   show_map_flags(__entry->flags),
185                   __entry->refs, __entry->compress_type)
186 );
187
188 #define show_ordered_flags(flags)                                       \
189         __print_symbolic(flags,                                 \
190                 { BTRFS_ORDERED_IO_DONE,        "IO_DONE"       },      \
191                 { BTRFS_ORDERED_COMPLETE,       "COMPLETE"      },      \
192                 { BTRFS_ORDERED_NOCOW,          "NOCOW"         },      \
193                 { BTRFS_ORDERED_COMPRESSED,     "COMPRESSED"    },      \
194                 { BTRFS_ORDERED_PREALLOC,       "PREALLOC"      },      \
195                 { BTRFS_ORDERED_DIRECT,         "DIRECT"        })
196
197 DECLARE_EVENT_CLASS(btrfs__ordered_extent,
198
199         TP_PROTO(struct inode *inode, struct btrfs_ordered_extent *ordered),
200
201         TP_ARGS(inode, ordered),
202
203         TP_STRUCT__entry(
204                 __field(        ino_t,  ino             )
205                 __field(        u64,  file_offset       )
206                 __field(        u64,  start             )
207                 __field(        u64,  len               )
208                 __field(        u64,  disk_len          )
209                 __field(        u64,  bytes_left        )
210                 __field(        unsigned long,  flags   )
211                 __field(        int,  compress_type     )
212                 __field(        int,  refs              )
213                 __field(        u64,  root_objectid     )
214         ),
215
216         TP_fast_assign(
217                 __entry->ino            = inode->i_ino;
218                 __entry->file_offset    = ordered->file_offset;
219                 __entry->start          = ordered->start;
220                 __entry->len            = ordered->len;
221                 __entry->disk_len       = ordered->disk_len;
222                 __entry->bytes_left     = ordered->bytes_left;
223                 __entry->flags          = ordered->flags;
224                 __entry->compress_type  = ordered->compress_type;
225                 __entry->refs           = atomic_read(&ordered->refs);
226                 __entry->root_objectid  =
227                                 BTRFS_I(inode)->root->root_key.objectid;
228         ),
229
230         TP_printk("root = %llu(%s), ino = %llu, file_offset = %llu, "
231                   "start = %llu, len = %llu, disk_len = %llu, "
232                   "bytes_left = %llu, flags = %s, compress_type = %d, "
233                   "refs = %d",
234                   show_root_type(__entry->root_objectid),
235                   (unsigned long long)__entry->ino,
236                   (unsigned long long)__entry->file_offset,
237                   (unsigned long long)__entry->start,
238                   (unsigned long long)__entry->len,
239                   (unsigned long long)__entry->disk_len,
240                   (unsigned long long)__entry->bytes_left,
241                   show_ordered_flags(__entry->flags),
242                   __entry->compress_type, __entry->refs)
243 );
244
245 DEFINE_EVENT(btrfs__ordered_extent, btrfs_ordered_extent_add,
246
247         TP_PROTO(struct inode *inode, struct btrfs_ordered_extent *ordered),
248
249         TP_ARGS(inode, ordered)
250 );
251
252 DEFINE_EVENT(btrfs__ordered_extent, btrfs_ordered_extent_remove,
253
254         TP_PROTO(struct inode *inode, struct btrfs_ordered_extent *ordered),
255
256         TP_ARGS(inode, ordered)
257 );
258
259 DEFINE_EVENT(btrfs__ordered_extent, btrfs_ordered_extent_start,
260
261         TP_PROTO(struct inode *inode, struct btrfs_ordered_extent *ordered),
262
263         TP_ARGS(inode, ordered)
264 );
265
266 DEFINE_EVENT(btrfs__ordered_extent, btrfs_ordered_extent_put,
267
268         TP_PROTO(struct inode *inode, struct btrfs_ordered_extent *ordered),
269
270         TP_ARGS(inode, ordered)
271 );
272
273 DECLARE_EVENT_CLASS(btrfs__writepage,
274
275         TP_PROTO(struct page *page, struct inode *inode,
276                  struct writeback_control *wbc),
277
278         TP_ARGS(page, inode, wbc),
279
280         TP_STRUCT__entry(
281                 __field(        ino_t,  ino                     )
282                 __field(        pgoff_t,  index                 )
283                 __field(        long,   nr_to_write             )
284                 __field(        long,   pages_skipped           )
285                 __field(        loff_t, range_start             )
286                 __field(        loff_t, range_end               )
287                 __field(        char,   nonblocking             )
288                 __field(        char,   for_kupdate             )
289                 __field(        char,   for_reclaim             )
290                 __field(        char,   range_cyclic            )
291                 __field(        pgoff_t,  writeback_index       )
292                 __field(        u64,    root_objectid           )
293         ),
294
295         TP_fast_assign(
296                 __entry->ino            = inode->i_ino;
297                 __entry->index          = page->index;
298                 __entry->nr_to_write    = wbc->nr_to_write;
299                 __entry->pages_skipped  = wbc->pages_skipped;
300                 __entry->range_start    = wbc->range_start;
301                 __entry->range_end      = wbc->range_end;
302                 __entry->nonblocking    = wbc->nonblocking;
303                 __entry->for_kupdate    = wbc->for_kupdate;
304                 __entry->for_reclaim    = wbc->for_reclaim;
305                 __entry->range_cyclic   = wbc->range_cyclic;
306                 __entry->writeback_index = inode->i_mapping->writeback_index;
307                 __entry->root_objectid  =
308                                  BTRFS_I(inode)->root->root_key.objectid;
309         ),
310
311         TP_printk("root = %llu(%s), ino = %lu, page_index = %lu, "
312                   "nr_to_write = %ld, pages_skipped = %ld, range_start = %llu, "
313                   "range_end = %llu, nonblocking = %d, for_kupdate = %d, "
314                   "for_reclaim = %d, range_cyclic = %d, writeback_index = %lu",
315                   show_root_type(__entry->root_objectid),
316                   (unsigned long)__entry->ino, __entry->index,
317                   __entry->nr_to_write, __entry->pages_skipped,
318                   __entry->range_start, __entry->range_end,
319                   __entry->nonblocking, __entry->for_kupdate,
320                   __entry->for_reclaim, __entry->range_cyclic,
321                   (unsigned long)__entry->writeback_index)
322 );
323
324 DEFINE_EVENT(btrfs__writepage, __extent_writepage,
325
326         TP_PROTO(struct page *page, struct inode *inode,
327                  struct writeback_control *wbc),
328
329         TP_ARGS(page, inode, wbc)
330 );
331
332 TRACE_EVENT(btrfs_writepage_end_io_hook,
333
334         TP_PROTO(struct page *page, u64 start, u64 end, int uptodate),
335
336         TP_ARGS(page, start, end, uptodate),
337
338         TP_STRUCT__entry(
339                 __field(        ino_t,   ino            )
340                 __field(        pgoff_t, index          )
341                 __field(        u64,     start          )
342                 __field(        u64,     end            )
343                 __field(        int,     uptodate       )
344                 __field(        u64,    root_objectid   )
345         ),
346
347         TP_fast_assign(
348                 __entry->ino    = page->mapping->host->i_ino;
349                 __entry->index  = page->index;
350                 __entry->start  = start;
351                 __entry->end    = end;
352                 __entry->uptodate = uptodate;
353                 __entry->root_objectid  =
354                          BTRFS_I(page->mapping->host)->root->root_key.objectid;
355         ),
356
357         TP_printk("root = %llu(%s), ino = %lu, page_index = %lu, start = %llu, "
358                   "end = %llu, uptodate = %d",
359                   show_root_type(__entry->root_objectid),
360                   (unsigned long)__entry->ino, (unsigned long)__entry->index,
361                   (unsigned long long)__entry->start,
362                   (unsigned long long)__entry->end, __entry->uptodate)
363 );
364
365 TRACE_EVENT(btrfs_sync_file,
366
367         TP_PROTO(struct file *file, int datasync),
368
369         TP_ARGS(file, datasync),
370
371         TP_STRUCT__entry(
372                 __field(        ino_t,  ino             )
373                 __field(        ino_t,  parent          )
374                 __field(        int,    datasync        )
375                 __field(        u64,    root_objectid   )
376         ),
377
378         TP_fast_assign(
379                 struct dentry *dentry = file->f_path.dentry;
380                 struct inode *inode = dentry->d_inode;
381
382                 __entry->ino            = inode->i_ino;
383                 __entry->parent         = dentry->d_parent->d_inode->i_ino;
384                 __entry->datasync       = datasync;
385                 __entry->root_objectid  =
386                                  BTRFS_I(inode)->root->root_key.objectid;
387         ),
388
389         TP_printk("root = %llu(%s), ino = %ld, parent = %ld, datasync = %d",
390                   show_root_type(__entry->root_objectid),
391                   (unsigned long)__entry->ino, (unsigned long)__entry->parent,
392                   __entry->datasync)
393 );
394
395 TRACE_EVENT(btrfs_sync_fs,
396
397         TP_PROTO(int wait),
398
399         TP_ARGS(wait),
400
401         TP_STRUCT__entry(
402                 __field(        int,  wait              )
403         ),
404
405         TP_fast_assign(
406                 __entry->wait   = wait;
407         ),
408
409         TP_printk("wait = %d", __entry->wait)
410 );
411
412 #define show_ref_action(action)                                         \
413         __print_symbolic(action,                                        \
414                 { BTRFS_ADD_DELAYED_REF,    "ADD_DELAYED_REF" },        \
415                 { BTRFS_DROP_DELAYED_REF,   "DROP_DELAYED_REF" },       \
416                 { BTRFS_ADD_DELAYED_EXTENT, "ADD_DELAYED_EXTENT" },     \
417                 { BTRFS_UPDATE_DELAYED_HEAD, "UPDATE_DELAYED_HEAD" })
418                         
419
420 TRACE_EVENT(btrfs_delayed_tree_ref,
421
422         TP_PROTO(struct btrfs_delayed_ref_node *ref,
423                  struct btrfs_delayed_tree_ref *full_ref,
424                  int action),
425
426         TP_ARGS(ref, full_ref, action),
427
428         TP_STRUCT__entry(
429                 __field(        u64,  bytenr            )
430                 __field(        u64,  num_bytes         )
431                 __field(        int,  action            ) 
432                 __field(        u64,  parent            )
433                 __field(        u64,  ref_root          )
434                 __field(        int,  level             )
435                 __field(        int,  type              )
436         ),
437
438         TP_fast_assign(
439                 __entry->bytenr         = ref->bytenr;
440                 __entry->num_bytes      = ref->num_bytes;
441                 __entry->action         = action;
442                 __entry->parent         = full_ref->parent;
443                 __entry->ref_root       = full_ref->root;
444                 __entry->level          = full_ref->level;
445                 __entry->type           = ref->type;
446         ),
447
448         TP_printk("bytenr = %llu, num_bytes = %llu, action = %s, "
449                   "parent = %llu(%s), ref_root = %llu(%s), level = %d, "
450                   "type = %s",
451                   (unsigned long long)__entry->bytenr,
452                   (unsigned long long)__entry->num_bytes,
453                   show_ref_action(__entry->action),
454                   show_root_type(__entry->parent),
455                   show_root_type(__entry->ref_root),
456                   __entry->level, show_ref_type(__entry->type))
457 );
458
459 TRACE_EVENT(btrfs_delayed_data_ref,
460
461         TP_PROTO(struct btrfs_delayed_ref_node *ref,
462                  struct btrfs_delayed_data_ref *full_ref,
463                  int action),
464
465         TP_ARGS(ref, full_ref, action),
466
467         TP_STRUCT__entry(
468                 __field(        u64,  bytenr            )
469                 __field(        u64,  num_bytes         )
470                 __field(        int,  action            ) 
471                 __field(        u64,  parent            )
472                 __field(        u64,  ref_root          )
473                 __field(        u64,  owner             )
474                 __field(        u64,  offset            )
475                 __field(        int,  type              )
476         ),
477
478         TP_fast_assign(
479                 __entry->bytenr         = ref->bytenr;
480                 __entry->num_bytes      = ref->num_bytes;
481                 __entry->action         = action;
482                 __entry->parent         = full_ref->parent;
483                 __entry->ref_root       = full_ref->root;
484                 __entry->owner          = full_ref->objectid;
485                 __entry->offset         = full_ref->offset;
486                 __entry->type           = ref->type;
487         ),
488
489         TP_printk("bytenr = %llu, num_bytes = %llu, action = %s, "
490                   "parent = %llu(%s), ref_root = %llu(%s), owner = %llu, "
491                   "offset = %llu, type = %s",
492                   (unsigned long long)__entry->bytenr,
493                   (unsigned long long)__entry->num_bytes,
494                   show_ref_action(__entry->action),
495                   show_root_type(__entry->parent),
496                   show_root_type(__entry->ref_root),
497                   (unsigned long long)__entry->owner,
498                   (unsigned long long)__entry->offset,
499                   show_ref_type(__entry->type))
500 );
501
502 TRACE_EVENT(btrfs_delayed_ref_head,
503
504         TP_PROTO(struct btrfs_delayed_ref_node *ref,
505                  struct btrfs_delayed_ref_head *head_ref,
506                  int action),
507
508         TP_ARGS(ref, head_ref, action),
509
510         TP_STRUCT__entry(
511                 __field(        u64,  bytenr            )
512                 __field(        u64,  num_bytes         )
513                 __field(        int,  action            ) 
514                 __field(        int,  is_data           )
515         ),
516
517         TP_fast_assign(
518                 __entry->bytenr         = ref->bytenr;
519                 __entry->num_bytes      = ref->num_bytes;
520                 __entry->action         = action;
521                 __entry->is_data        = head_ref->is_data;
522         ),
523
524         TP_printk("bytenr = %llu, num_bytes = %llu, action = %s, is_data = %d",
525                   (unsigned long long)__entry->bytenr,
526                   (unsigned long long)__entry->num_bytes,
527                   show_ref_action(__entry->action),
528                   __entry->is_data)
529 );
530
531 #define show_chunk_type(type)                                   \
532         __print_flags(type, "|",                                \
533                 { BTRFS_BLOCK_GROUP_DATA,       "DATA"  },      \
534                 { BTRFS_BLOCK_GROUP_SYSTEM,     "SYSTEM"},      \
535                 { BTRFS_BLOCK_GROUP_METADATA,   "METADATA"},    \
536                 { BTRFS_BLOCK_GROUP_RAID0,      "RAID0" },      \
537                 { BTRFS_BLOCK_GROUP_RAID1,      "RAID1" },      \
538                 { BTRFS_BLOCK_GROUP_DUP,        "DUP"   },      \
539                 { BTRFS_BLOCK_GROUP_RAID10,     "RAID10"})
540
541 DECLARE_EVENT_CLASS(btrfs__chunk,
542
543         TP_PROTO(struct btrfs_root *root, struct map_lookup *map,
544                  u64 offset, u64 size),
545
546         TP_ARGS(root, map, offset, size),
547
548         TP_STRUCT__entry(
549                 __field(        int,  num_stripes               )
550                 __field(        u64,  type                      )
551                 __field(        int,  sub_stripes               )
552                 __field(        u64,  offset                    )
553                 __field(        u64,  size                      )
554                 __field(        u64,  root_objectid             )
555         ),
556
557         TP_fast_assign(
558                 __entry->num_stripes    = map->num_stripes;
559                 __entry->type           = map->type;
560                 __entry->sub_stripes    = map->sub_stripes;
561                 __entry->offset         = offset;
562                 __entry->size           = size;
563                 __entry->root_objectid  = root->root_key.objectid;
564         ),
565
566         TP_printk("root = %llu(%s), offset = %llu, size = %llu, "
567                   "num_stripes = %d, sub_stripes = %d, type = %s",
568                   show_root_type(__entry->root_objectid),
569                   (unsigned long long)__entry->offset,
570                   (unsigned long long)__entry->size,
571                   __entry->num_stripes, __entry->sub_stripes,
572                   show_chunk_type(__entry->type))
573 );
574
575 DEFINE_EVENT(btrfs__chunk,  btrfs_chunk_alloc,
576
577         TP_PROTO(struct btrfs_root *root, struct map_lookup *map,
578                  u64 offset, u64 size),
579
580         TP_ARGS(root, map, offset, size)
581 );
582
583 DEFINE_EVENT(btrfs__chunk,  btrfs_chunk_free,
584
585         TP_PROTO(struct btrfs_root *root, struct map_lookup *map,
586                  u64 offset, u64 size),
587
588         TP_ARGS(root, map, offset, size)
589 );
590
591 TRACE_EVENT(btrfs_cow_block,
592
593         TP_PROTO(struct btrfs_root *root, struct extent_buffer *buf,
594                  struct extent_buffer *cow),
595
596         TP_ARGS(root, buf, cow),
597
598         TP_STRUCT__entry(
599                 __field(        u64,  root_objectid             )
600                 __field(        u64,  buf_start                 )
601                 __field(        int,  refs                      )
602                 __field(        u64,  cow_start                 )
603                 __field(        int,  buf_level                 )
604                 __field(        int,  cow_level                 )
605         ),
606
607         TP_fast_assign(
608                 __entry->root_objectid  = root->root_key.objectid;
609                 __entry->buf_start      = buf->start;
610                 __entry->refs           = atomic_read(&buf->refs);
611                 __entry->cow_start      = cow->start;
612                 __entry->buf_level      = btrfs_header_level(buf);
613                 __entry->cow_level      = btrfs_header_level(cow);
614         ),
615
616         TP_printk("root = %llu(%s), refs = %d, orig_buf = %llu "
617                   "(orig_level = %d), cow_buf = %llu (cow_level = %d)",
618                   show_root_type(__entry->root_objectid),
619                   __entry->refs,
620                   (unsigned long long)__entry->buf_start,
621                   __entry->buf_level,
622                   (unsigned long long)__entry->cow_start,
623                   __entry->cow_level)
624 );
625
626 DECLARE_EVENT_CLASS(btrfs__reserved_extent,
627
628         TP_PROTO(struct btrfs_root *root, u64 start, u64 len),
629
630         TP_ARGS(root, start, len),
631
632         TP_STRUCT__entry(
633                 __field(        u64,  root_objectid             )
634                 __field(        u64,  start                     )
635                 __field(        u64,  len                       )
636         ),
637
638         TP_fast_assign(
639                 __entry->root_objectid  = root->root_key.objectid;
640                 __entry->start          = start;
641                 __entry->len            = len;
642         ),
643
644         TP_printk("root = %llu(%s), start = %llu, len = %llu",
645                   show_root_type(__entry->root_objectid),
646                   (unsigned long long)__entry->start,
647                   (unsigned long long)__entry->len)
648 );
649
650 DEFINE_EVENT(btrfs__reserved_extent,  btrfs_reserved_extent_alloc,
651
652         TP_PROTO(struct btrfs_root *root, u64 start, u64 len),
653
654         TP_ARGS(root, start, len)
655 );
656
657 DEFINE_EVENT(btrfs__reserved_extent,  btrfs_reserved_extent_free,
658
659         TP_PROTO(struct btrfs_root *root, u64 start, u64 len),
660
661         TP_ARGS(root, start, len)
662 );
663
664 #endif /* _TRACE_BTRFS_H */
665
666 /* This part must be outside protection */
667 #include <trace/define_trace.h>