Revert "net: validate variable length ll headers"
[pandora-kernel.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_u64(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_u64(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,   for_kupdate             )
288                 __field(        char,   for_reclaim             )
289                 __field(        char,   range_cyclic            )
290                 __field(        pgoff_t,  writeback_index       )
291                 __field(        u64,    root_objectid           )
292         ),
293
294         TP_fast_assign(
295                 __entry->ino            = inode->i_ino;
296                 __entry->index          = page->index;
297                 __entry->nr_to_write    = wbc->nr_to_write;
298                 __entry->pages_skipped  = wbc->pages_skipped;
299                 __entry->range_start    = wbc->range_start;
300                 __entry->range_end      = wbc->range_end;
301                 __entry->for_kupdate    = wbc->for_kupdate;
302                 __entry->for_reclaim    = wbc->for_reclaim;
303                 __entry->range_cyclic   = wbc->range_cyclic;
304                 __entry->writeback_index = inode->i_mapping->writeback_index;
305                 __entry->root_objectid  =
306                                  BTRFS_I(inode)->root->root_key.objectid;
307         ),
308
309         TP_printk("root = %llu(%s), ino = %lu, page_index = %lu, "
310                   "nr_to_write = %ld, pages_skipped = %ld, range_start = %llu, "
311                   "range_end = %llu, for_kupdate = %d, "
312                   "for_reclaim = %d, range_cyclic = %d, writeback_index = %lu",
313                   show_root_type(__entry->root_objectid),
314                   (unsigned long)__entry->ino, __entry->index,
315                   __entry->nr_to_write, __entry->pages_skipped,
316                   __entry->range_start, __entry->range_end,
317                   __entry->for_kupdate,
318                   __entry->for_reclaim, __entry->range_cyclic,
319                   (unsigned long)__entry->writeback_index)
320 );
321
322 DEFINE_EVENT(btrfs__writepage, __extent_writepage,
323
324         TP_PROTO(struct page *page, struct inode *inode,
325                  struct writeback_control *wbc),
326
327         TP_ARGS(page, inode, wbc)
328 );
329
330 TRACE_EVENT(btrfs_writepage_end_io_hook,
331
332         TP_PROTO(struct page *page, u64 start, u64 end, int uptodate),
333
334         TP_ARGS(page, start, end, uptodate),
335
336         TP_STRUCT__entry(
337                 __field(        ino_t,   ino            )
338                 __field(        pgoff_t, index          )
339                 __field(        u64,     start          )
340                 __field(        u64,     end            )
341                 __field(        int,     uptodate       )
342                 __field(        u64,    root_objectid   )
343         ),
344
345         TP_fast_assign(
346                 __entry->ino    = page->mapping->host->i_ino;
347                 __entry->index  = page->index;
348                 __entry->start  = start;
349                 __entry->end    = end;
350                 __entry->uptodate = uptodate;
351                 __entry->root_objectid  =
352                          BTRFS_I(page->mapping->host)->root->root_key.objectid;
353         ),
354
355         TP_printk("root = %llu(%s), ino = %lu, page_index = %lu, start = %llu, "
356                   "end = %llu, uptodate = %d",
357                   show_root_type(__entry->root_objectid),
358                   (unsigned long)__entry->ino, (unsigned long)__entry->index,
359                   (unsigned long long)__entry->start,
360                   (unsigned long long)__entry->end, __entry->uptodate)
361 );
362
363 TRACE_EVENT(btrfs_sync_file,
364
365         TP_PROTO(struct file *file, int datasync),
366
367         TP_ARGS(file, datasync),
368
369         TP_STRUCT__entry(
370                 __field(        ino_t,  ino             )
371                 __field(        ino_t,  parent          )
372                 __field(        int,    datasync        )
373                 __field(        u64,    root_objectid   )
374         ),
375
376         TP_fast_assign(
377                 struct dentry *dentry = file->f_path.dentry;
378                 struct inode *inode = dentry->d_inode;
379
380                 __entry->ino            = inode->i_ino;
381                 __entry->parent         = dentry->d_parent->d_inode->i_ino;
382                 __entry->datasync       = datasync;
383                 __entry->root_objectid  =
384                                  BTRFS_I(inode)->root->root_key.objectid;
385         ),
386
387         TP_printk("root = %llu(%s), ino = %ld, parent = %ld, datasync = %d",
388                   show_root_type(__entry->root_objectid),
389                   (unsigned long)__entry->ino, (unsigned long)__entry->parent,
390                   __entry->datasync)
391 );
392
393 TRACE_EVENT(btrfs_sync_fs,
394
395         TP_PROTO(int wait),
396
397         TP_ARGS(wait),
398
399         TP_STRUCT__entry(
400                 __field(        int,  wait              )
401         ),
402
403         TP_fast_assign(
404                 __entry->wait   = wait;
405         ),
406
407         TP_printk("wait = %d", __entry->wait)
408 );
409
410 #define show_ref_action(action)                                         \
411         __print_symbolic(action,                                        \
412                 { BTRFS_ADD_DELAYED_REF,    "ADD_DELAYED_REF" },        \
413                 { BTRFS_DROP_DELAYED_REF,   "DROP_DELAYED_REF" },       \
414                 { BTRFS_ADD_DELAYED_EXTENT, "ADD_DELAYED_EXTENT" },     \
415                 { BTRFS_UPDATE_DELAYED_HEAD, "UPDATE_DELAYED_HEAD" })
416                         
417
418 TRACE_EVENT(btrfs_delayed_tree_ref,
419
420         TP_PROTO(struct btrfs_delayed_ref_node *ref,
421                  struct btrfs_delayed_tree_ref *full_ref,
422                  int action),
423
424         TP_ARGS(ref, full_ref, action),
425
426         TP_STRUCT__entry(
427                 __field(        u64,  bytenr            )
428                 __field(        u64,  num_bytes         )
429                 __field(        int,  action            ) 
430                 __field(        u64,  parent            )
431                 __field(        u64,  ref_root          )
432                 __field(        int,  level             )
433                 __field(        int,  type              )
434         ),
435
436         TP_fast_assign(
437                 __entry->bytenr         = ref->bytenr;
438                 __entry->num_bytes      = ref->num_bytes;
439                 __entry->action         = action;
440                 __entry->parent         = full_ref->parent;
441                 __entry->ref_root       = full_ref->root;
442                 __entry->level          = full_ref->level;
443                 __entry->type           = ref->type;
444         ),
445
446         TP_printk("bytenr = %llu, num_bytes = %llu, action = %s, "
447                   "parent = %llu(%s), ref_root = %llu(%s), level = %d, "
448                   "type = %s",
449                   (unsigned long long)__entry->bytenr,
450                   (unsigned long long)__entry->num_bytes,
451                   show_ref_action(__entry->action),
452                   show_root_type(__entry->parent),
453                   show_root_type(__entry->ref_root),
454                   __entry->level, show_ref_type(__entry->type))
455 );
456
457 TRACE_EVENT(btrfs_delayed_data_ref,
458
459         TP_PROTO(struct btrfs_delayed_ref_node *ref,
460                  struct btrfs_delayed_data_ref *full_ref,
461                  int action),
462
463         TP_ARGS(ref, full_ref, action),
464
465         TP_STRUCT__entry(
466                 __field(        u64,  bytenr            )
467                 __field(        u64,  num_bytes         )
468                 __field(        int,  action            ) 
469                 __field(        u64,  parent            )
470                 __field(        u64,  ref_root          )
471                 __field(        u64,  owner             )
472                 __field(        u64,  offset            )
473                 __field(        int,  type              )
474         ),
475
476         TP_fast_assign(
477                 __entry->bytenr         = ref->bytenr;
478                 __entry->num_bytes      = ref->num_bytes;
479                 __entry->action         = action;
480                 __entry->parent         = full_ref->parent;
481                 __entry->ref_root       = full_ref->root;
482                 __entry->owner          = full_ref->objectid;
483                 __entry->offset         = full_ref->offset;
484                 __entry->type           = ref->type;
485         ),
486
487         TP_printk("bytenr = %llu, num_bytes = %llu, action = %s, "
488                   "parent = %llu(%s), ref_root = %llu(%s), owner = %llu, "
489                   "offset = %llu, type = %s",
490                   (unsigned long long)__entry->bytenr,
491                   (unsigned long long)__entry->num_bytes,
492                   show_ref_action(__entry->action),
493                   show_root_type(__entry->parent),
494                   show_root_type(__entry->ref_root),
495                   (unsigned long long)__entry->owner,
496                   (unsigned long long)__entry->offset,
497                   show_ref_type(__entry->type))
498 );
499
500 TRACE_EVENT(btrfs_delayed_ref_head,
501
502         TP_PROTO(struct btrfs_delayed_ref_node *ref,
503                  struct btrfs_delayed_ref_head *head_ref,
504                  int action),
505
506         TP_ARGS(ref, head_ref, action),
507
508         TP_STRUCT__entry(
509                 __field(        u64,  bytenr            )
510                 __field(        u64,  num_bytes         )
511                 __field(        int,  action            ) 
512                 __field(        int,  is_data           )
513         ),
514
515         TP_fast_assign(
516                 __entry->bytenr         = ref->bytenr;
517                 __entry->num_bytes      = ref->num_bytes;
518                 __entry->action         = action;
519                 __entry->is_data        = head_ref->is_data;
520         ),
521
522         TP_printk("bytenr = %llu, num_bytes = %llu, action = %s, is_data = %d",
523                   (unsigned long long)__entry->bytenr,
524                   (unsigned long long)__entry->num_bytes,
525                   show_ref_action(__entry->action),
526                   __entry->is_data)
527 );
528
529 #define show_chunk_type(type)                                   \
530         __print_flags(type, "|",                                \
531                 { BTRFS_BLOCK_GROUP_DATA,       "DATA"  },      \
532                 { BTRFS_BLOCK_GROUP_SYSTEM,     "SYSTEM"},      \
533                 { BTRFS_BLOCK_GROUP_METADATA,   "METADATA"},    \
534                 { BTRFS_BLOCK_GROUP_RAID0,      "RAID0" },      \
535                 { BTRFS_BLOCK_GROUP_RAID1,      "RAID1" },      \
536                 { BTRFS_BLOCK_GROUP_DUP,        "DUP"   },      \
537                 { BTRFS_BLOCK_GROUP_RAID10,     "RAID10"})
538
539 DECLARE_EVENT_CLASS(btrfs__chunk,
540
541         TP_PROTO(struct btrfs_root *root, struct map_lookup *map,
542                  u64 offset, u64 size),
543
544         TP_ARGS(root, map, offset, size),
545
546         TP_STRUCT__entry(
547                 __field(        int,  num_stripes               )
548                 __field(        u64,  type                      )
549                 __field(        int,  sub_stripes               )
550                 __field(        u64,  offset                    )
551                 __field(        u64,  size                      )
552                 __field(        u64,  root_objectid             )
553         ),
554
555         TP_fast_assign(
556                 __entry->num_stripes    = map->num_stripes;
557                 __entry->type           = map->type;
558                 __entry->sub_stripes    = map->sub_stripes;
559                 __entry->offset         = offset;
560                 __entry->size           = size;
561                 __entry->root_objectid  = root->root_key.objectid;
562         ),
563
564         TP_printk("root = %llu(%s), offset = %llu, size = %llu, "
565                   "num_stripes = %d, sub_stripes = %d, type = %s",
566                   show_root_type(__entry->root_objectid),
567                   (unsigned long long)__entry->offset,
568                   (unsigned long long)__entry->size,
569                   __entry->num_stripes, __entry->sub_stripes,
570                   show_chunk_type(__entry->type))
571 );
572
573 DEFINE_EVENT(btrfs__chunk,  btrfs_chunk_alloc,
574
575         TP_PROTO(struct btrfs_root *root, struct map_lookup *map,
576                  u64 offset, u64 size),
577
578         TP_ARGS(root, map, offset, size)
579 );
580
581 DEFINE_EVENT(btrfs__chunk,  btrfs_chunk_free,
582
583         TP_PROTO(struct btrfs_root *root, struct map_lookup *map,
584                  u64 offset, u64 size),
585
586         TP_ARGS(root, map, offset, size)
587 );
588
589 TRACE_EVENT(btrfs_cow_block,
590
591         TP_PROTO(struct btrfs_root *root, struct extent_buffer *buf,
592                  struct extent_buffer *cow),
593
594         TP_ARGS(root, buf, cow),
595
596         TP_STRUCT__entry(
597                 __field(        u64,  root_objectid             )
598                 __field(        u64,  buf_start                 )
599                 __field(        int,  refs                      )
600                 __field(        u64,  cow_start                 )
601                 __field(        int,  buf_level                 )
602                 __field(        int,  cow_level                 )
603         ),
604
605         TP_fast_assign(
606                 __entry->root_objectid  = root->root_key.objectid;
607                 __entry->buf_start      = buf->start;
608                 __entry->refs           = atomic_read(&buf->refs);
609                 __entry->cow_start      = cow->start;
610                 __entry->buf_level      = btrfs_header_level(buf);
611                 __entry->cow_level      = btrfs_header_level(cow);
612         ),
613
614         TP_printk("root = %llu(%s), refs = %d, orig_buf = %llu "
615                   "(orig_level = %d), cow_buf = %llu (cow_level = %d)",
616                   show_root_type(__entry->root_objectid),
617                   __entry->refs,
618                   (unsigned long long)__entry->buf_start,
619                   __entry->buf_level,
620                   (unsigned long long)__entry->cow_start,
621                   __entry->cow_level)
622 );
623
624 DECLARE_EVENT_CLASS(btrfs__reserved_extent,
625
626         TP_PROTO(struct btrfs_root *root, u64 start, u64 len),
627
628         TP_ARGS(root, start, len),
629
630         TP_STRUCT__entry(
631                 __field(        u64,  root_objectid             )
632                 __field(        u64,  start                     )
633                 __field(        u64,  len                       )
634         ),
635
636         TP_fast_assign(
637                 __entry->root_objectid  = root->root_key.objectid;
638                 __entry->start          = start;
639                 __entry->len            = len;
640         ),
641
642         TP_printk("root = %llu(%s), start = %llu, len = %llu",
643                   show_root_type(__entry->root_objectid),
644                   (unsigned long long)__entry->start,
645                   (unsigned long long)__entry->len)
646 );
647
648 DEFINE_EVENT(btrfs__reserved_extent,  btrfs_reserved_extent_alloc,
649
650         TP_PROTO(struct btrfs_root *root, u64 start, u64 len),
651
652         TP_ARGS(root, start, len)
653 );
654
655 DEFINE_EVENT(btrfs__reserved_extent,  btrfs_reserved_extent_free,
656
657         TP_PROTO(struct btrfs_root *root, u64 start, u64 len),
658
659         TP_ARGS(root, start, len)
660 );
661
662 #endif /* _TRACE_BTRFS_H */
663
664 /* This part must be outside protection */
665 #include <trace/define_trace.h>