1 /* SPDX-License-Identifier: GPL-2.0 */
3 #define TRACE_SYSTEM btrfs
5 #if !defined(_TRACE_BTRFS_H) || defined(TRACE_HEADER_MULTI_READ)
8 #include <linux/writeback.h>
9 #include <linux/tracepoint.h>
10 #include <trace/events/mmflags.h>
16 struct btrfs_file_extent_item
;
17 struct btrfs_ordered_extent
;
18 struct btrfs_delayed_ref_node
;
19 struct btrfs_delayed_tree_ref
;
20 struct btrfs_delayed_data_ref
;
21 struct btrfs_delayed_ref_head
;
22 struct btrfs_block_group
;
23 struct btrfs_free_cluster
;
27 struct __btrfs_workqueue
;
28 struct btrfs_qgroup_extent_record
;
30 struct extent_io_tree
;
32 struct btrfs_space_info
;
34 #define show_ref_type(type) \
35 __print_symbolic(type, \
36 { BTRFS_TREE_BLOCK_REF_KEY, "TREE_BLOCK_REF" }, \
37 { BTRFS_EXTENT_DATA_REF_KEY, "EXTENT_DATA_REF" }, \
38 { BTRFS_EXTENT_REF_V0_KEY, "EXTENT_REF_V0" }, \
39 { BTRFS_SHARED_BLOCK_REF_KEY, "SHARED_BLOCK_REF" }, \
40 { BTRFS_SHARED_DATA_REF_KEY, "SHARED_DATA_REF" })
42 #define __show_root_type(obj) \
43 __print_symbolic_u64(obj, \
44 { BTRFS_ROOT_TREE_OBJECTID, "ROOT_TREE" }, \
45 { BTRFS_EXTENT_TREE_OBJECTID, "EXTENT_TREE" }, \
46 { BTRFS_CHUNK_TREE_OBJECTID, "CHUNK_TREE" }, \
47 { BTRFS_DEV_TREE_OBJECTID, "DEV_TREE" }, \
48 { BTRFS_FS_TREE_OBJECTID, "FS_TREE" }, \
49 { BTRFS_ROOT_TREE_DIR_OBJECTID, "ROOT_TREE_DIR" }, \
50 { BTRFS_CSUM_TREE_OBJECTID, "CSUM_TREE" }, \
51 { BTRFS_TREE_LOG_OBJECTID, "TREE_LOG" }, \
52 { BTRFS_QUOTA_TREE_OBJECTID, "QUOTA_TREE" }, \
53 { BTRFS_TREE_RELOC_OBJECTID, "TREE_RELOC" }, \
54 { BTRFS_UUID_TREE_OBJECTID, "UUID_TREE" }, \
55 { BTRFS_FREE_SPACE_TREE_OBJECTID, "FREE_SPACE_TREE" }, \
56 { BTRFS_DATA_RELOC_TREE_OBJECTID, "DATA_RELOC_TREE" })
58 #define show_root_type(obj) \
59 obj, ((obj >= BTRFS_DATA_RELOC_TREE_OBJECTID) || \
60 (obj >= BTRFS_ROOT_TREE_OBJECTID && \
61 obj <= BTRFS_QUOTA_TREE_OBJECTID)) ? __show_root_type(obj) : "-"
63 #define FLUSH_ACTIONS \
64 EM( BTRFS_RESERVE_NO_FLUSH, "BTRFS_RESERVE_NO_FLUSH") \
65 EM( BTRFS_RESERVE_FLUSH_LIMIT, "BTRFS_RESERVE_FLUSH_LIMIT") \
66 EM( BTRFS_RESERVE_FLUSH_ALL, "BTRFS_RESERVE_FLUSH_ALL") \
67 EMe(BTRFS_RESERVE_FLUSH_ALL_STEAL, "BTRFS_RESERVE_FLUSH_ALL_STEAL")
70 EM( BTRFS_FILE_EXTENT_INLINE, "INLINE") \
71 EM( BTRFS_FILE_EXTENT_REG, "REG") \
72 EMe(BTRFS_FILE_EXTENT_PREALLOC, "PREALLOC")
74 #define QGROUP_RSV_TYPES \
75 EM( BTRFS_QGROUP_RSV_DATA, "DATA") \
76 EM( BTRFS_QGROUP_RSV_META_PERTRANS, "META_PERTRANS") \
77 EMe(BTRFS_QGROUP_RSV_META_PREALLOC, "META_PREALLOC")
79 #define IO_TREE_OWNER \
80 EM( IO_TREE_FS_PINNED_EXTENTS, "PINNED_EXTENTS") \
81 EM( IO_TREE_FS_EXCLUDED_EXTENTS, "EXCLUDED_EXTENTS") \
82 EM( IO_TREE_BTREE_INODE_IO, "BTREE_INODE_IO") \
83 EM( IO_TREE_INODE_IO, "INODE_IO") \
84 EM( IO_TREE_INODE_IO_FAILURE, "INODE_IO_FAILURE") \
85 EM( IO_TREE_RELOC_BLOCKS, "RELOC_BLOCKS") \
86 EM( IO_TREE_TRANS_DIRTY_PAGES, "TRANS_DIRTY_PAGES") \
87 EM( IO_TREE_ROOT_DIRTY_LOG_PAGES, "ROOT_DIRTY_LOG_PAGES") \
88 EM( IO_TREE_INODE_FILE_EXTENT, "INODE_FILE_EXTENT") \
89 EM( IO_TREE_LOG_CSUM_RANGE, "LOG_CSUM_RANGE") \
90 EMe(IO_TREE_SELFTEST, "SELFTEST")
92 #define FLUSH_STATES \
93 EM( FLUSH_DELAYED_ITEMS_NR, "FLUSH_DELAYED_ITEMS_NR") \
94 EM( FLUSH_DELAYED_ITEMS, "FLUSH_DELAYED_ITEMS") \
95 EM( FLUSH_DELALLOC, "FLUSH_DELALLOC") \
96 EM( FLUSH_DELALLOC_WAIT, "FLUSH_DELALLOC_WAIT") \
97 EM( FLUSH_DELAYED_REFS_NR, "FLUSH_DELAYED_REFS_NR") \
98 EM( FLUSH_DELAYED_REFS, "FLUSH_ELAYED_REFS") \
99 EM( ALLOC_CHUNK, "ALLOC_CHUNK") \
100 EM( ALLOC_CHUNK_FORCE, "ALLOC_CHUNK_FORCE") \
101 EM( RUN_DELAYED_IPUTS, "RUN_DELAYED_IPUTS") \
102 EMe(COMMIT_TRANS, "COMMIT_TRANS")
105 * First define the enums in the above macros to be exported to userspace via
106 * TRACE_DEFINE_ENUM().
111 #define EM(a, b) TRACE_DEFINE_ENUM(a);
112 #define EMe(a, b) TRACE_DEFINE_ENUM(a);
121 * Now redefine the EM and EMe macros to map the enums to the strings that will
122 * be printed in the output
127 #define EM(a, b) {a, b},
128 #define EMe(a, b) {a, b}
131 #define BTRFS_GROUP_FLAGS \
132 { BTRFS_BLOCK_GROUP_DATA, "DATA"}, \
133 { BTRFS_BLOCK_GROUP_SYSTEM, "SYSTEM"}, \
134 { BTRFS_BLOCK_GROUP_METADATA, "METADATA"}, \
135 { BTRFS_BLOCK_GROUP_RAID0, "RAID0"}, \
136 { BTRFS_BLOCK_GROUP_RAID1, "RAID1"}, \
137 { BTRFS_BLOCK_GROUP_DUP, "DUP"}, \
138 { BTRFS_BLOCK_GROUP_RAID10, "RAID10"}, \
139 { BTRFS_BLOCK_GROUP_RAID5, "RAID5"}, \
140 { BTRFS_BLOCK_GROUP_RAID6, "RAID6"}
142 #define EXTENT_FLAGS \
143 { EXTENT_DIRTY, "DIRTY"}, \
144 { EXTENT_UPTODATE, "UPTODATE"}, \
145 { EXTENT_LOCKED, "LOCKED"}, \
146 { EXTENT_NEW, "NEW"}, \
147 { EXTENT_DELALLOC, "DELALLOC"}, \
148 { EXTENT_DEFRAG, "DEFRAG"}, \
149 { EXTENT_BOUNDARY, "BOUNDARY"}, \
150 { EXTENT_NODATASUM, "NODATASUM"}, \
151 { EXTENT_CLEAR_META_RESV, "CLEAR_META_RESV"}, \
152 { EXTENT_NEED_WAIT, "NEED_WAIT"}, \
153 { EXTENT_DAMAGED, "DAMAGED"}, \
154 { EXTENT_NORESERVE, "NORESERVE"}, \
155 { EXTENT_QGROUP_RESERVED, "QGROUP_RESERVED"}, \
156 { EXTENT_CLEAR_DATA_RESV, "CLEAR_DATA_RESV"}, \
157 { EXTENT_DELALLOC_NEW, "DELALLOC_NEW"}
159 #define BTRFS_FSID_SIZE 16
160 #define TP_STRUCT__entry_fsid __array(u8, fsid, BTRFS_FSID_SIZE)
162 #define TP_fast_assign_fsid(fs_info) \
165 memcpy(__entry->fsid, fs_info->fs_devices->fsid, \
168 memset(__entry->fsid, 0, BTRFS_FSID_SIZE); \
171 #define TP_STRUCT__entry_btrfs(args...) \
173 TP_STRUCT__entry_fsid \
175 #define TP_fast_assign_btrfs(fs_info, args...) \
177 TP_fast_assign_fsid(fs_info); \
179 #define TP_printk_btrfs(fmt, args...) \
180 TP_printk("%pU: " fmt, __entry->fsid, args)
182 TRACE_EVENT(btrfs_transaction_commit
,
184 TP_PROTO(const struct btrfs_root
*root
),
188 TP_STRUCT__entry_btrfs(
189 __field( u64
, generation
)
190 __field( u64
, root_objectid
)
193 TP_fast_assign_btrfs(root
->fs_info
,
194 __entry
->generation
= root
->fs_info
->generation
;
195 __entry
->root_objectid
= root
->root_key
.objectid
;
198 TP_printk_btrfs("root=%llu(%s) gen=%llu",
199 show_root_type(__entry
->root_objectid
),
203 DECLARE_EVENT_CLASS(btrfs__inode
,
205 TP_PROTO(const struct inode
*inode
),
209 TP_STRUCT__entry_btrfs(
211 __field( u64
, blocks
)
212 __field( u64
, disk_i_size
)
213 __field( u64
, generation
)
214 __field( u64
, last_trans
)
215 __field( u64
, logged_trans
)
216 __field( u64
, root_objectid
)
219 TP_fast_assign_btrfs(btrfs_sb(inode
->i_sb
),
220 __entry
->ino
= btrfs_ino(BTRFS_I(inode
));
221 __entry
->blocks
= inode
->i_blocks
;
222 __entry
->disk_i_size
= BTRFS_I(inode
)->disk_i_size
;
223 __entry
->generation
= BTRFS_I(inode
)->generation
;
224 __entry
->last_trans
= BTRFS_I(inode
)->last_trans
;
225 __entry
->logged_trans
= BTRFS_I(inode
)->logged_trans
;
226 __entry
->root_objectid
=
227 BTRFS_I(inode
)->root
->root_key
.objectid
;
230 TP_printk_btrfs("root=%llu(%s) gen=%llu ino=%llu blocks=%llu "
231 "disk_i_size=%llu last_trans=%llu logged_trans=%llu",
232 show_root_type(__entry
->root_objectid
),
236 __entry
->disk_i_size
,
238 __entry
->logged_trans
)
241 DEFINE_EVENT(btrfs__inode
, btrfs_inode_new
,
243 TP_PROTO(const struct inode
*inode
),
248 DEFINE_EVENT(btrfs__inode
, btrfs_inode_request
,
250 TP_PROTO(const struct inode
*inode
),
255 DEFINE_EVENT(btrfs__inode
, btrfs_inode_evict
,
257 TP_PROTO(const struct inode
*inode
),
262 #define __show_map_type(type) \
263 __print_symbolic_u64(type, \
264 { EXTENT_MAP_LAST_BYTE, "LAST_BYTE" }, \
265 { EXTENT_MAP_HOLE, "HOLE" }, \
266 { EXTENT_MAP_INLINE, "INLINE" }, \
267 { EXTENT_MAP_DELALLOC, "DELALLOC" })
269 #define show_map_type(type) \
270 type, (type >= EXTENT_MAP_LAST_BYTE) ? "-" : __show_map_type(type)
272 #define show_map_flags(flag) \
273 __print_flags(flag, "|", \
274 { (1 << EXTENT_FLAG_PINNED), "PINNED" },\
275 { (1 << EXTENT_FLAG_COMPRESSED), "COMPRESSED" },\
276 { (1 << EXTENT_FLAG_PREALLOC), "PREALLOC" },\
277 { (1 << EXTENT_FLAG_LOGGING), "LOGGING" },\
278 { (1 << EXTENT_FLAG_FILLING), "FILLING" },\
279 { (1 << EXTENT_FLAG_FS_MAPPING), "FS_MAPPING" })
281 TRACE_EVENT_CONDITION(btrfs_get_extent
,
283 TP_PROTO(const struct btrfs_root
*root
, const struct btrfs_inode
*inode
,
284 const struct extent_map
*map
),
286 TP_ARGS(root
, inode
, map
),
290 TP_STRUCT__entry_btrfs(
291 __field( u64
, root_objectid
)
293 __field( u64
, start
)
295 __field( u64
, orig_start
)
296 __field( u64
, block_start
)
297 __field( u64
, block_len
)
298 __field( unsigned long, flags
)
300 __field( unsigned int, compress_type
)
303 TP_fast_assign_btrfs(root
->fs_info
,
304 __entry
->root_objectid
= root
->root_key
.objectid
;
305 __entry
->ino
= btrfs_ino(inode
);
306 __entry
->start
= map
->start
;
307 __entry
->len
= map
->len
;
308 __entry
->orig_start
= map
->orig_start
;
309 __entry
->block_start
= map
->block_start
;
310 __entry
->block_len
= map
->block_len
;
311 __entry
->flags
= map
->flags
;
312 __entry
->refs
= refcount_read(&map
->refs
);
313 __entry
->compress_type
= map
->compress_type
;
316 TP_printk_btrfs("root=%llu(%s) ino=%llu start=%llu len=%llu "
317 "orig_start=%llu block_start=%llu(%s) "
318 "block_len=%llu flags=%s refs=%u "
320 show_root_type(__entry
->root_objectid
),
325 show_map_type(__entry
->block_start
),
327 show_map_flags(__entry
->flags
),
328 __entry
->refs
, __entry
->compress_type
)
331 TRACE_EVENT(btrfs_handle_em_exist
,
333 TP_PROTO(const struct btrfs_fs_info
*fs_info
,
334 const struct extent_map
*existing
, const struct extent_map
*map
,
337 TP_ARGS(fs_info
, existing
, map
, start
, len
),
339 TP_STRUCT__entry_btrfs(
340 __field( u64
, e_start
)
341 __field( u64
, e_len
)
342 __field( u64
, map_start
)
343 __field( u64
, map_len
)
344 __field( u64
, start
)
348 TP_fast_assign_btrfs(fs_info
,
349 __entry
->e_start
= existing
->start
;
350 __entry
->e_len
= existing
->len
;
351 __entry
->map_start
= map
->start
;
352 __entry
->map_len
= map
->len
;
353 __entry
->start
= start
;
357 TP_printk_btrfs("start=%llu len=%llu "
358 "existing(start=%llu len=%llu) "
359 "em(start=%llu len=%llu)",
368 /* file extent item */
369 DECLARE_EVENT_CLASS(btrfs__file_extent_item_regular
,
371 TP_PROTO(const struct btrfs_inode
*bi
, const struct extent_buffer
*l
,
372 const struct btrfs_file_extent_item
*fi
, u64 start
),
374 TP_ARGS(bi
, l
, fi
, start
),
376 TP_STRUCT__entry_btrfs(
377 __field( u64
, root_obj
)
379 __field( loff_t
, isize
)
380 __field( u64
, disk_isize
)
381 __field( u64
, num_bytes
)
382 __field( u64
, ram_bytes
)
383 __field( u64
, disk_bytenr
)
384 __field( u64
, disk_num_bytes
)
385 __field( u64
, extent_offset
)
386 __field( u8
, extent_type
)
387 __field( u8
, compression
)
388 __field( u64
, extent_start
)
389 __field( u64
, extent_end
)
392 TP_fast_assign_btrfs(bi
->root
->fs_info
,
393 __entry
->root_obj
= bi
->root
->root_key
.objectid
;
394 __entry
->ino
= btrfs_ino(bi
);
395 __entry
->isize
= bi
->vfs_inode
.i_size
;
396 __entry
->disk_isize
= bi
->disk_i_size
;
397 __entry
->num_bytes
= btrfs_file_extent_num_bytes(l
, fi
);
398 __entry
->ram_bytes
= btrfs_file_extent_ram_bytes(l
, fi
);
399 __entry
->disk_bytenr
= btrfs_file_extent_disk_bytenr(l
, fi
);
400 __entry
->disk_num_bytes
= btrfs_file_extent_disk_num_bytes(l
, fi
);
401 __entry
->extent_offset
= btrfs_file_extent_offset(l
, fi
);
402 __entry
->extent_type
= btrfs_file_extent_type(l
, fi
);
403 __entry
->compression
= btrfs_file_extent_compression(l
, fi
);
404 __entry
->extent_start
= start
;
405 __entry
->extent_end
= (start
+ __entry
->num_bytes
);
409 "root=%llu(%s) inode=%llu size=%llu disk_isize=%llu "
410 "file extent range=[%llu %llu] "
411 "(num_bytes=%llu ram_bytes=%llu disk_bytenr=%llu "
412 "disk_num_bytes=%llu extent_offset=%llu type=%s "
414 show_root_type(__entry
->root_obj
), __entry
->ino
,
416 __entry
->disk_isize
, __entry
->extent_start
,
417 __entry
->extent_end
, __entry
->num_bytes
, __entry
->ram_bytes
,
418 __entry
->disk_bytenr
, __entry
->disk_num_bytes
,
419 __entry
->extent_offset
, __print_symbolic(__entry
->extent_type
, FI_TYPES
),
420 __entry
->compression
)
424 btrfs__file_extent_item_inline
,
426 TP_PROTO(const struct btrfs_inode
*bi
, const struct extent_buffer
*l
,
427 const struct btrfs_file_extent_item
*fi
, int slot
, u64 start
),
429 TP_ARGS(bi
, l
, fi
, slot
, start
),
431 TP_STRUCT__entry_btrfs(
432 __field( u64
, root_obj
)
434 __field( loff_t
, isize
)
435 __field( u64
, disk_isize
)
436 __field( u8
, extent_type
)
437 __field( u8
, compression
)
438 __field( u64
, extent_start
)
439 __field( u64
, extent_end
)
442 TP_fast_assign_btrfs(
444 __entry
->root_obj
= bi
->root
->root_key
.objectid
;
445 __entry
->ino
= btrfs_ino(bi
);
446 __entry
->isize
= bi
->vfs_inode
.i_size
;
447 __entry
->disk_isize
= bi
->disk_i_size
;
448 __entry
->extent_type
= btrfs_file_extent_type(l
, fi
);
449 __entry
->compression
= btrfs_file_extent_compression(l
, fi
);
450 __entry
->extent_start
= start
;
451 __entry
->extent_end
= (start
+ btrfs_file_extent_ram_bytes(l
, fi
));
455 "root=%llu(%s) inode=%llu size=%llu disk_isize=%llu "
456 "file extent range=[%llu %llu] "
457 "extent_type=%s compression=%u",
458 show_root_type(__entry
->root_obj
), __entry
->ino
, __entry
->isize
,
459 __entry
->disk_isize
, __entry
->extent_start
,
460 __entry
->extent_end
, __print_symbolic(__entry
->extent_type
, FI_TYPES
),
461 __entry
->compression
)
465 btrfs__file_extent_item_regular
, btrfs_get_extent_show_fi_regular
,
467 TP_PROTO(const struct btrfs_inode
*bi
, const struct extent_buffer
*l
,
468 const struct btrfs_file_extent_item
*fi
, u64 start
),
470 TP_ARGS(bi
, l
, fi
, start
)
474 btrfs__file_extent_item_regular
, btrfs_truncate_show_fi_regular
,
476 TP_PROTO(const struct btrfs_inode
*bi
, const struct extent_buffer
*l
,
477 const struct btrfs_file_extent_item
*fi
, u64 start
),
479 TP_ARGS(bi
, l
, fi
, start
)
483 btrfs__file_extent_item_inline
, btrfs_get_extent_show_fi_inline
,
485 TP_PROTO(const struct btrfs_inode
*bi
, const struct extent_buffer
*l
,
486 const struct btrfs_file_extent_item
*fi
, int slot
, u64 start
),
488 TP_ARGS(bi
, l
, fi
, slot
, start
)
492 btrfs__file_extent_item_inline
, btrfs_truncate_show_fi_inline
,
494 TP_PROTO(const struct btrfs_inode
*bi
, const struct extent_buffer
*l
,
495 const struct btrfs_file_extent_item
*fi
, int slot
, u64 start
),
497 TP_ARGS(bi
, l
, fi
, slot
, start
)
500 #define show_ordered_flags(flags) \
501 __print_flags(flags, "|", \
502 { (1 << BTRFS_ORDERED_IO_DONE), "IO_DONE" }, \
503 { (1 << BTRFS_ORDERED_COMPLETE), "COMPLETE" }, \
504 { (1 << BTRFS_ORDERED_NOCOW), "NOCOW" }, \
505 { (1 << BTRFS_ORDERED_COMPRESSED), "COMPRESSED" }, \
506 { (1 << BTRFS_ORDERED_PREALLOC), "PREALLOC" }, \
507 { (1 << BTRFS_ORDERED_DIRECT), "DIRECT" }, \
508 { (1 << BTRFS_ORDERED_IOERR), "IOERR" }, \
509 { (1 << BTRFS_ORDERED_TRUNCATED), "TRUNCATED" })
512 DECLARE_EVENT_CLASS(btrfs__ordered_extent
,
514 TP_PROTO(const struct btrfs_inode
*inode
,
515 const struct btrfs_ordered_extent
*ordered
),
517 TP_ARGS(inode
, ordered
),
519 TP_STRUCT__entry_btrfs(
521 __field( u64
, file_offset
)
522 __field( u64
, start
)
524 __field( u64
, disk_len
)
525 __field( u64
, bytes_left
)
526 __field( unsigned long, flags
)
527 __field( int, compress_type
)
529 __field( u64
, root_objectid
)
530 __field( u64
, truncated_len
)
533 TP_fast_assign_btrfs(inode
->root
->fs_info
,
534 __entry
->ino
= btrfs_ino(inode
);
535 __entry
->file_offset
= ordered
->file_offset
;
536 __entry
->start
= ordered
->disk_bytenr
;
537 __entry
->len
= ordered
->num_bytes
;
538 __entry
->disk_len
= ordered
->disk_num_bytes
;
539 __entry
->bytes_left
= ordered
->bytes_left
;
540 __entry
->flags
= ordered
->flags
;
541 __entry
->compress_type
= ordered
->compress_type
;
542 __entry
->refs
= refcount_read(&ordered
->refs
);
543 __entry
->root_objectid
= inode
->root
->root_key
.objectid
;
544 __entry
->truncated_len
= ordered
->truncated_len
;
547 TP_printk_btrfs("root=%llu(%s) ino=%llu file_offset=%llu "
548 "start=%llu len=%llu disk_len=%llu "
549 "truncated_len=%llu "
550 "bytes_left=%llu flags=%s compress_type=%d "
552 show_root_type(__entry
->root_objectid
),
554 __entry
->file_offset
,
558 __entry
->truncated_len
,
560 show_ordered_flags(__entry
->flags
),
561 __entry
->compress_type
, __entry
->refs
)
564 DEFINE_EVENT(btrfs__ordered_extent
, btrfs_ordered_extent_add
,
566 TP_PROTO(const struct btrfs_inode
*inode
,
567 const struct btrfs_ordered_extent
*ordered
),
569 TP_ARGS(inode
, ordered
)
572 DEFINE_EVENT(btrfs__ordered_extent
, btrfs_ordered_extent_remove
,
574 TP_PROTO(const struct btrfs_inode
*inode
,
575 const struct btrfs_ordered_extent
*ordered
),
577 TP_ARGS(inode
, ordered
)
580 DEFINE_EVENT(btrfs__ordered_extent
, btrfs_ordered_extent_start
,
582 TP_PROTO(const struct btrfs_inode
*inode
,
583 const struct btrfs_ordered_extent
*ordered
),
585 TP_ARGS(inode
, ordered
)
588 DEFINE_EVENT(btrfs__ordered_extent
, btrfs_ordered_extent_put
,
590 TP_PROTO(const struct btrfs_inode
*inode
,
591 const struct btrfs_ordered_extent
*ordered
),
593 TP_ARGS(inode
, ordered
)
596 DECLARE_EVENT_CLASS(btrfs__writepage
,
598 TP_PROTO(const struct page
*page
, const struct inode
*inode
,
599 const struct writeback_control
*wbc
),
601 TP_ARGS(page
, inode
, wbc
),
603 TP_STRUCT__entry_btrfs(
605 __field( pgoff_t
, index
)
606 __field( long, nr_to_write
)
607 __field( long, pages_skipped
)
608 __field( loff_t
, range_start
)
609 __field( loff_t
, range_end
)
610 __field( char, for_kupdate
)
611 __field( char, for_reclaim
)
612 __field( char, range_cyclic
)
613 __field( unsigned long, writeback_index
)
614 __field( u64
, root_objectid
)
617 TP_fast_assign_btrfs(btrfs_sb(inode
->i_sb
),
618 __entry
->ino
= btrfs_ino(BTRFS_I(inode
));
619 __entry
->index
= page
->index
;
620 __entry
->nr_to_write
= wbc
->nr_to_write
;
621 __entry
->pages_skipped
= wbc
->pages_skipped
;
622 __entry
->range_start
= wbc
->range_start
;
623 __entry
->range_end
= wbc
->range_end
;
624 __entry
->for_kupdate
= wbc
->for_kupdate
;
625 __entry
->for_reclaim
= wbc
->for_reclaim
;
626 __entry
->range_cyclic
= wbc
->range_cyclic
;
627 __entry
->writeback_index
= inode
->i_mapping
->writeback_index
;
628 __entry
->root_objectid
=
629 BTRFS_I(inode
)->root
->root_key
.objectid
;
632 TP_printk_btrfs("root=%llu(%s) ino=%llu page_index=%lu "
633 "nr_to_write=%ld pages_skipped=%ld range_start=%llu "
634 "range_end=%llu for_kupdate=%d "
635 "for_reclaim=%d range_cyclic=%d writeback_index=%lu",
636 show_root_type(__entry
->root_objectid
),
637 __entry
->ino
, __entry
->index
,
638 __entry
->nr_to_write
, __entry
->pages_skipped
,
639 __entry
->range_start
, __entry
->range_end
,
640 __entry
->for_kupdate
,
641 __entry
->for_reclaim
, __entry
->range_cyclic
,
642 __entry
->writeback_index
)
645 DEFINE_EVENT(btrfs__writepage
, __extent_writepage
,
647 TP_PROTO(const struct page
*page
, const struct inode
*inode
,
648 const struct writeback_control
*wbc
),
650 TP_ARGS(page
, inode
, wbc
)
653 TRACE_EVENT(btrfs_writepage_end_io_hook
,
655 TP_PROTO(const struct page
*page
, u64 start
, u64 end
, int uptodate
),
657 TP_ARGS(page
, start
, end
, uptodate
),
659 TP_STRUCT__entry_btrfs(
661 __field( unsigned long, index
)
662 __field( u64
, start
)
664 __field( int, uptodate
)
665 __field( u64
, root_objectid
)
668 TP_fast_assign_btrfs(btrfs_sb(page
->mapping
->host
->i_sb
),
669 __entry
->ino
= btrfs_ino(BTRFS_I(page
->mapping
->host
));
670 __entry
->index
= page
->index
;
671 __entry
->start
= start
;
673 __entry
->uptodate
= uptodate
;
674 __entry
->root_objectid
=
675 BTRFS_I(page
->mapping
->host
)->root
->root_key
.objectid
;
678 TP_printk_btrfs("root=%llu(%s) ino=%llu page_index=%lu start=%llu "
679 "end=%llu uptodate=%d",
680 show_root_type(__entry
->root_objectid
),
681 __entry
->ino
, __entry
->index
,
683 __entry
->end
, __entry
->uptodate
)
686 TRACE_EVENT(btrfs_sync_file
,
688 TP_PROTO(const struct file
*file
, int datasync
),
690 TP_ARGS(file
, datasync
),
692 TP_STRUCT__entry_btrfs(
694 __field( u64
, parent
)
695 __field( int, datasync
)
696 __field( u64
, root_objectid
)
700 const struct dentry
*dentry
= file
->f_path
.dentry
;
701 const struct inode
*inode
= d_inode(dentry
);
703 TP_fast_assign_fsid(btrfs_sb(file
->f_path
.dentry
->d_sb
));
704 __entry
->ino
= btrfs_ino(BTRFS_I(inode
));
705 __entry
->parent
= btrfs_ino(BTRFS_I(d_inode(dentry
->d_parent
)));
706 __entry
->datasync
= datasync
;
707 __entry
->root_objectid
=
708 BTRFS_I(inode
)->root
->root_key
.objectid
;
711 TP_printk_btrfs("root=%llu(%s) ino=%llu parent=%llu datasync=%d",
712 show_root_type(__entry
->root_objectid
),
718 TRACE_EVENT(btrfs_sync_fs
,
720 TP_PROTO(const struct btrfs_fs_info
*fs_info
, int wait
),
722 TP_ARGS(fs_info
, wait
),
724 TP_STRUCT__entry_btrfs(
728 TP_fast_assign_btrfs(fs_info
,
729 __entry
->wait
= wait
;
732 TP_printk_btrfs("wait=%d", __entry
->wait
)
735 TRACE_EVENT(btrfs_add_block_group
,
737 TP_PROTO(const struct btrfs_fs_info
*fs_info
,
738 const struct btrfs_block_group
*block_group
, int create
),
740 TP_ARGS(fs_info
, block_group
, create
),
742 TP_STRUCT__entry_btrfs(
743 __field( u64
, offset
)
745 __field( u64
, flags
)
746 __field( u64
, bytes_used
)
747 __field( u64
, bytes_super
)
748 __field( int, create
)
751 TP_fast_assign_btrfs(fs_info
,
752 __entry
->offset
= block_group
->start
;
753 __entry
->size
= block_group
->length
;
754 __entry
->flags
= block_group
->flags
;
755 __entry
->bytes_used
= block_group
->used
;
756 __entry
->bytes_super
= block_group
->bytes_super
;
757 __entry
->create
= create
;
760 TP_printk_btrfs("block_group offset=%llu size=%llu "
761 "flags=%llu(%s) bytes_used=%llu bytes_super=%llu "
766 __print_flags((unsigned long)__entry
->flags
, "|",
769 __entry
->bytes_super
, __entry
->create
)
772 #define show_ref_action(action) \
773 __print_symbolic(action, \
774 { BTRFS_ADD_DELAYED_REF, "ADD_DELAYED_REF" }, \
775 { BTRFS_DROP_DELAYED_REF, "DROP_DELAYED_REF" }, \
776 { BTRFS_ADD_DELAYED_EXTENT, "ADD_DELAYED_EXTENT" }, \
777 { BTRFS_UPDATE_DELAYED_HEAD, "UPDATE_DELAYED_HEAD" })
780 DECLARE_EVENT_CLASS(btrfs_delayed_tree_ref
,
782 TP_PROTO(const struct btrfs_fs_info
*fs_info
,
783 const struct btrfs_delayed_ref_node
*ref
,
784 const struct btrfs_delayed_tree_ref
*full_ref
,
787 TP_ARGS(fs_info
, ref
, full_ref
, action
),
789 TP_STRUCT__entry_btrfs(
790 __field( u64
, bytenr
)
791 __field( u64
, num_bytes
)
792 __field( int, action
)
793 __field( u64
, parent
)
794 __field( u64
, ref_root
)
795 __field( int, level
)
800 TP_fast_assign_btrfs(fs_info
,
801 __entry
->bytenr
= ref
->bytenr
;
802 __entry
->num_bytes
= ref
->num_bytes
;
803 __entry
->action
= action
;
804 __entry
->parent
= full_ref
->parent
;
805 __entry
->ref_root
= full_ref
->root
;
806 __entry
->level
= full_ref
->level
;
807 __entry
->type
= ref
->type
;
808 __entry
->seq
= ref
->seq
;
811 TP_printk_btrfs("bytenr=%llu num_bytes=%llu action=%s "
812 "parent=%llu(%s) ref_root=%llu(%s) level=%d "
816 show_ref_action(__entry
->action
),
817 show_root_type(__entry
->parent
),
818 show_root_type(__entry
->ref_root
),
819 __entry
->level
, show_ref_type(__entry
->type
),
823 DEFINE_EVENT(btrfs_delayed_tree_ref
, add_delayed_tree_ref
,
825 TP_PROTO(const struct btrfs_fs_info
*fs_info
,
826 const struct btrfs_delayed_ref_node
*ref
,
827 const struct btrfs_delayed_tree_ref
*full_ref
,
830 TP_ARGS(fs_info
, ref
, full_ref
, action
)
833 DEFINE_EVENT(btrfs_delayed_tree_ref
, run_delayed_tree_ref
,
835 TP_PROTO(const struct btrfs_fs_info
*fs_info
,
836 const struct btrfs_delayed_ref_node
*ref
,
837 const struct btrfs_delayed_tree_ref
*full_ref
,
840 TP_ARGS(fs_info
, ref
, full_ref
, action
)
843 DECLARE_EVENT_CLASS(btrfs_delayed_data_ref
,
845 TP_PROTO(const struct btrfs_fs_info
*fs_info
,
846 const struct btrfs_delayed_ref_node
*ref
,
847 const struct btrfs_delayed_data_ref
*full_ref
,
850 TP_ARGS(fs_info
, ref
, full_ref
, action
),
852 TP_STRUCT__entry_btrfs(
853 __field( u64
, bytenr
)
854 __field( u64
, num_bytes
)
855 __field( int, action
)
856 __field( u64
, parent
)
857 __field( u64
, ref_root
)
858 __field( u64
, owner
)
859 __field( u64
, offset
)
864 TP_fast_assign_btrfs(fs_info
,
865 __entry
->bytenr
= ref
->bytenr
;
866 __entry
->num_bytes
= ref
->num_bytes
;
867 __entry
->action
= action
;
868 __entry
->parent
= full_ref
->parent
;
869 __entry
->ref_root
= full_ref
->root
;
870 __entry
->owner
= full_ref
->objectid
;
871 __entry
->offset
= full_ref
->offset
;
872 __entry
->type
= ref
->type
;
873 __entry
->seq
= ref
->seq
;
876 TP_printk_btrfs("bytenr=%llu num_bytes=%llu action=%s "
877 "parent=%llu(%s) ref_root=%llu(%s) owner=%llu "
878 "offset=%llu type=%s seq=%llu",
881 show_ref_action(__entry
->action
),
882 show_root_type(__entry
->parent
),
883 show_root_type(__entry
->ref_root
),
886 show_ref_type(__entry
->type
),
890 DEFINE_EVENT(btrfs_delayed_data_ref
, add_delayed_data_ref
,
892 TP_PROTO(const struct btrfs_fs_info
*fs_info
,
893 const struct btrfs_delayed_ref_node
*ref
,
894 const struct btrfs_delayed_data_ref
*full_ref
,
897 TP_ARGS(fs_info
, ref
, full_ref
, action
)
900 DEFINE_EVENT(btrfs_delayed_data_ref
, run_delayed_data_ref
,
902 TP_PROTO(const struct btrfs_fs_info
*fs_info
,
903 const struct btrfs_delayed_ref_node
*ref
,
904 const struct btrfs_delayed_data_ref
*full_ref
,
907 TP_ARGS(fs_info
, ref
, full_ref
, action
)
910 DECLARE_EVENT_CLASS(btrfs_delayed_ref_head
,
912 TP_PROTO(const struct btrfs_fs_info
*fs_info
,
913 const struct btrfs_delayed_ref_head
*head_ref
,
916 TP_ARGS(fs_info
, head_ref
, action
),
918 TP_STRUCT__entry_btrfs(
919 __field( u64
, bytenr
)
920 __field( u64
, num_bytes
)
921 __field( int, action
)
922 __field( int, is_data
)
925 TP_fast_assign_btrfs(fs_info
,
926 __entry
->bytenr
= head_ref
->bytenr
;
927 __entry
->num_bytes
= head_ref
->num_bytes
;
928 __entry
->action
= action
;
929 __entry
->is_data
= head_ref
->is_data
;
932 TP_printk_btrfs("bytenr=%llu num_bytes=%llu action=%s is_data=%d",
935 show_ref_action(__entry
->action
),
939 DEFINE_EVENT(btrfs_delayed_ref_head
, add_delayed_ref_head
,
941 TP_PROTO(const struct btrfs_fs_info
*fs_info
,
942 const struct btrfs_delayed_ref_head
*head_ref
,
945 TP_ARGS(fs_info
, head_ref
, action
)
948 DEFINE_EVENT(btrfs_delayed_ref_head
, run_delayed_ref_head
,
950 TP_PROTO(const struct btrfs_fs_info
*fs_info
,
951 const struct btrfs_delayed_ref_head
*head_ref
,
954 TP_ARGS(fs_info
, head_ref
, action
)
957 #define show_chunk_type(type) \
958 __print_flags(type, "|", \
959 { BTRFS_BLOCK_GROUP_DATA, "DATA" }, \
960 { BTRFS_BLOCK_GROUP_SYSTEM, "SYSTEM"}, \
961 { BTRFS_BLOCK_GROUP_METADATA, "METADATA"}, \
962 { BTRFS_BLOCK_GROUP_RAID0, "RAID0" }, \
963 { BTRFS_BLOCK_GROUP_RAID1, "RAID1" }, \
964 { BTRFS_BLOCK_GROUP_DUP, "DUP" }, \
965 { BTRFS_BLOCK_GROUP_RAID10, "RAID10"}, \
966 { BTRFS_BLOCK_GROUP_RAID5, "RAID5" }, \
967 { BTRFS_BLOCK_GROUP_RAID6, "RAID6" })
969 DECLARE_EVENT_CLASS(btrfs__chunk
,
971 TP_PROTO(const struct btrfs_fs_info
*fs_info
,
972 const struct map_lookup
*map
, u64 offset
, u64 size
),
974 TP_ARGS(fs_info
, map
, offset
, size
),
976 TP_STRUCT__entry_btrfs(
977 __field( int, num_stripes
)
979 __field( int, sub_stripes
)
980 __field( u64
, offset
)
982 __field( u64
, root_objectid
)
985 TP_fast_assign_btrfs(fs_info
,
986 __entry
->num_stripes
= map
->num_stripes
;
987 __entry
->type
= map
->type
;
988 __entry
->sub_stripes
= map
->sub_stripes
;
989 __entry
->offset
= offset
;
990 __entry
->size
= size
;
991 __entry
->root_objectid
= fs_info
->chunk_root
->root_key
.objectid
;
994 TP_printk_btrfs("root=%llu(%s) offset=%llu size=%llu "
995 "num_stripes=%d sub_stripes=%d type=%s",
996 show_root_type(__entry
->root_objectid
),
999 __entry
->num_stripes
, __entry
->sub_stripes
,
1000 show_chunk_type(__entry
->type
))
1003 DEFINE_EVENT(btrfs__chunk
, btrfs_chunk_alloc
,
1005 TP_PROTO(const struct btrfs_fs_info
*fs_info
,
1006 const struct map_lookup
*map
, u64 offset
, u64 size
),
1008 TP_ARGS(fs_info
, map
, offset
, size
)
1011 DEFINE_EVENT(btrfs__chunk
, btrfs_chunk_free
,
1013 TP_PROTO(const struct btrfs_fs_info
*fs_info
,
1014 const struct map_lookup
*map
, u64 offset
, u64 size
),
1016 TP_ARGS(fs_info
, map
, offset
, size
)
1019 TRACE_EVENT(btrfs_cow_block
,
1021 TP_PROTO(const struct btrfs_root
*root
, const struct extent_buffer
*buf
,
1022 const struct extent_buffer
*cow
),
1024 TP_ARGS(root
, buf
, cow
),
1026 TP_STRUCT__entry_btrfs(
1027 __field( u64
, root_objectid
)
1028 __field( u64
, buf_start
)
1029 __field( int, refs
)
1030 __field( u64
, cow_start
)
1031 __field( int, buf_level
)
1032 __field( int, cow_level
)
1035 TP_fast_assign_btrfs(root
->fs_info
,
1036 __entry
->root_objectid
= root
->root_key
.objectid
;
1037 __entry
->buf_start
= buf
->start
;
1038 __entry
->refs
= atomic_read(&buf
->refs
);
1039 __entry
->cow_start
= cow
->start
;
1040 __entry
->buf_level
= btrfs_header_level(buf
);
1041 __entry
->cow_level
= btrfs_header_level(cow
);
1044 TP_printk_btrfs("root=%llu(%s) refs=%d orig_buf=%llu "
1045 "(orig_level=%d) cow_buf=%llu (cow_level=%d)",
1046 show_root_type(__entry
->root_objectid
),
1054 TRACE_EVENT(btrfs_space_reservation
,
1056 TP_PROTO(const struct btrfs_fs_info
*fs_info
, const char *type
, u64 val
,
1057 u64 bytes
, int reserve
),
1059 TP_ARGS(fs_info
, type
, val
, bytes
, reserve
),
1061 TP_STRUCT__entry_btrfs(
1062 __string( type
, type
)
1064 __field( u64
, bytes
)
1065 __field( int, reserve
)
1068 TP_fast_assign_btrfs(fs_info
,
1069 __assign_str(type
, type
);
1071 __entry
->bytes
= bytes
;
1072 __entry
->reserve
= reserve
;
1075 TP_printk_btrfs("%s: %llu %s %llu", __get_str(type
), __entry
->val
,
1076 __entry
->reserve
? "reserve" : "release",
1080 TRACE_EVENT(btrfs_trigger_flush
,
1082 TP_PROTO(const struct btrfs_fs_info
*fs_info
, u64 flags
, u64 bytes
,
1083 int flush
, const char *reason
),
1085 TP_ARGS(fs_info
, flags
, bytes
, flush
, reason
),
1087 TP_STRUCT__entry_btrfs(
1088 __field( u64
, flags
)
1089 __field( u64
, bytes
)
1090 __field( int, flush
)
1091 __string( reason
, reason
)
1094 TP_fast_assign_btrfs(fs_info
,
1095 __entry
->flags
= flags
;
1096 __entry
->bytes
= bytes
;
1097 __entry
->flush
= flush
;
1098 __assign_str(reason
, reason
)
1101 TP_printk_btrfs("%s: flush=%d(%s) flags=%llu(%s) bytes=%llu",
1102 __get_str(reason
), __entry
->flush
,
1103 __print_symbolic(__entry
->flush
, FLUSH_ACTIONS
),
1105 __print_flags((unsigned long)__entry
->flags
, "|",
1111 TRACE_EVENT(btrfs_flush_space
,
1113 TP_PROTO(const struct btrfs_fs_info
*fs_info
, u64 flags
, u64 num_bytes
,
1114 int state
, int ret
),
1116 TP_ARGS(fs_info
, flags
, num_bytes
, state
, ret
),
1118 TP_STRUCT__entry_btrfs(
1119 __field( u64
, flags
)
1120 __field( u64
, num_bytes
)
1121 __field( int, state
)
1125 TP_fast_assign_btrfs(fs_info
,
1126 __entry
->flags
= flags
;
1127 __entry
->num_bytes
= num_bytes
;
1128 __entry
->state
= state
;
1132 TP_printk_btrfs("state=%d(%s) flags=%llu(%s) num_bytes=%llu ret=%d",
1134 __print_symbolic(__entry
->state
, FLUSH_STATES
),
1136 __print_flags((unsigned long)__entry
->flags
, "|",
1138 __entry
->num_bytes
, __entry
->ret
)
1141 DECLARE_EVENT_CLASS(btrfs__reserved_extent
,
1143 TP_PROTO(const struct btrfs_fs_info
*fs_info
, u64 start
, u64 len
),
1145 TP_ARGS(fs_info
, start
, len
),
1147 TP_STRUCT__entry_btrfs(
1148 __field( u64
, start
)
1152 TP_fast_assign_btrfs(fs_info
,
1153 __entry
->start
= start
;
1157 TP_printk_btrfs("root=%llu(%s) start=%llu len=%llu",
1158 show_root_type(BTRFS_EXTENT_TREE_OBJECTID
),
1163 DEFINE_EVENT(btrfs__reserved_extent
, btrfs_reserved_extent_alloc
,
1165 TP_PROTO(const struct btrfs_fs_info
*fs_info
, u64 start
, u64 len
),
1167 TP_ARGS(fs_info
, start
, len
)
1170 DEFINE_EVENT(btrfs__reserved_extent
, btrfs_reserved_extent_free
,
1172 TP_PROTO(const struct btrfs_fs_info
*fs_info
, u64 start
, u64 len
),
1174 TP_ARGS(fs_info
, start
, len
)
1177 TRACE_EVENT(find_free_extent
,
1179 TP_PROTO(const struct btrfs_root
*root
, u64 num_bytes
,
1180 u64 empty_size
, u64 data
),
1182 TP_ARGS(root
, num_bytes
, empty_size
, data
),
1184 TP_STRUCT__entry_btrfs(
1185 __field( u64
, root_objectid
)
1186 __field( u64
, num_bytes
)
1187 __field( u64
, empty_size
)
1188 __field( u64
, data
)
1191 TP_fast_assign_btrfs(root
->fs_info
,
1192 __entry
->root_objectid
= root
->root_key
.objectid
;
1193 __entry
->num_bytes
= num_bytes
;
1194 __entry
->empty_size
= empty_size
;
1195 __entry
->data
= data
;
1198 TP_printk_btrfs("root=%llu(%s) len=%llu empty_size=%llu flags=%llu(%s)",
1199 show_root_type(__entry
->root_objectid
),
1200 __entry
->num_bytes
, __entry
->empty_size
, __entry
->data
,
1201 __print_flags((unsigned long)__entry
->data
, "|",
1205 DECLARE_EVENT_CLASS(btrfs__reserve_extent
,
1207 TP_PROTO(const struct btrfs_block_group
*block_group
, u64 start
,
1210 TP_ARGS(block_group
, start
, len
),
1212 TP_STRUCT__entry_btrfs(
1213 __field( u64
, bg_objectid
)
1214 __field( u64
, flags
)
1215 __field( u64
, start
)
1219 TP_fast_assign_btrfs(block_group
->fs_info
,
1220 __entry
->bg_objectid
= block_group
->start
;
1221 __entry
->flags
= block_group
->flags
;
1222 __entry
->start
= start
;
1226 TP_printk_btrfs("root=%llu(%s) block_group=%llu flags=%llu(%s) "
1227 "start=%llu len=%llu",
1228 show_root_type(BTRFS_EXTENT_TREE_OBJECTID
),
1229 __entry
->bg_objectid
,
1230 __entry
->flags
, __print_flags((unsigned long)__entry
->flags
,
1231 "|", BTRFS_GROUP_FLAGS
),
1232 __entry
->start
, __entry
->len
)
1235 DEFINE_EVENT(btrfs__reserve_extent
, btrfs_reserve_extent
,
1237 TP_PROTO(const struct btrfs_block_group
*block_group
, u64 start
,
1240 TP_ARGS(block_group
, start
, len
)
1243 DEFINE_EVENT(btrfs__reserve_extent
, btrfs_reserve_extent_cluster
,
1245 TP_PROTO(const struct btrfs_block_group
*block_group
, u64 start
,
1248 TP_ARGS(block_group
, start
, len
)
1251 TRACE_EVENT(btrfs_find_cluster
,
1253 TP_PROTO(const struct btrfs_block_group
*block_group
, u64 start
,
1254 u64 bytes
, u64 empty_size
, u64 min_bytes
),
1256 TP_ARGS(block_group
, start
, bytes
, empty_size
, min_bytes
),
1258 TP_STRUCT__entry_btrfs(
1259 __field( u64
, bg_objectid
)
1260 __field( u64
, flags
)
1261 __field( u64
, start
)
1262 __field( u64
, bytes
)
1263 __field( u64
, empty_size
)
1264 __field( u64
, min_bytes
)
1267 TP_fast_assign_btrfs(block_group
->fs_info
,
1268 __entry
->bg_objectid
= block_group
->start
;
1269 __entry
->flags
= block_group
->flags
;
1270 __entry
->start
= start
;
1271 __entry
->bytes
= bytes
;
1272 __entry
->empty_size
= empty_size
;
1273 __entry
->min_bytes
= min_bytes
;
1276 TP_printk_btrfs("block_group=%llu flags=%llu(%s) start=%llu len=%llu "
1277 "empty_size=%llu min_bytes=%llu", __entry
->bg_objectid
,
1279 __print_flags((unsigned long)__entry
->flags
, "|",
1280 BTRFS_GROUP_FLAGS
), __entry
->start
,
1281 __entry
->bytes
, __entry
->empty_size
, __entry
->min_bytes
)
1284 TRACE_EVENT(btrfs_failed_cluster_setup
,
1286 TP_PROTO(const struct btrfs_block_group
*block_group
),
1288 TP_ARGS(block_group
),
1290 TP_STRUCT__entry_btrfs(
1291 __field( u64
, bg_objectid
)
1294 TP_fast_assign_btrfs(block_group
->fs_info
,
1295 __entry
->bg_objectid
= block_group
->start
;
1298 TP_printk_btrfs("block_group=%llu", __entry
->bg_objectid
)
1301 TRACE_EVENT(btrfs_setup_cluster
,
1303 TP_PROTO(const struct btrfs_block_group
*block_group
,
1304 const struct btrfs_free_cluster
*cluster
,
1305 u64 size
, int bitmap
),
1307 TP_ARGS(block_group
, cluster
, size
, bitmap
),
1309 TP_STRUCT__entry_btrfs(
1310 __field( u64
, bg_objectid
)
1311 __field( u64
, flags
)
1312 __field( u64
, start
)
1313 __field( u64
, max_size
)
1314 __field( u64
, size
)
1315 __field( int, bitmap
)
1318 TP_fast_assign_btrfs(block_group
->fs_info
,
1319 __entry
->bg_objectid
= block_group
->start
;
1320 __entry
->flags
= block_group
->flags
;
1321 __entry
->start
= cluster
->window_start
;
1322 __entry
->max_size
= cluster
->max_size
;
1323 __entry
->size
= size
;
1324 __entry
->bitmap
= bitmap
;
1327 TP_printk_btrfs("block_group=%llu flags=%llu(%s) window_start=%llu "
1328 "size=%llu max_size=%llu bitmap=%d",
1329 __entry
->bg_objectid
,
1331 __print_flags((unsigned long)__entry
->flags
, "|",
1332 BTRFS_GROUP_FLAGS
), __entry
->start
,
1333 __entry
->size
, __entry
->max_size
, __entry
->bitmap
)
1336 struct extent_state
;
1337 TRACE_EVENT(alloc_extent_state
,
1339 TP_PROTO(const struct extent_state
*state
,
1340 gfp_t mask
, unsigned long IP
),
1342 TP_ARGS(state
, mask
, IP
),
1345 __field(const struct extent_state
*, state
)
1346 __field(gfp_t
, mask
)
1347 __field(const void*, ip
)
1351 __entry
->state
= state
,
1352 __entry
->mask
= mask
,
1353 __entry
->ip
= (const void *)IP
1356 TP_printk("state=%p mask=%s caller=%pS", __entry
->state
,
1357 show_gfp_flags(__entry
->mask
), __entry
->ip
)
1360 TRACE_EVENT(free_extent_state
,
1362 TP_PROTO(const struct extent_state
*state
, unsigned long IP
),
1367 __field(const struct extent_state
*, state
)
1368 __field(const void*, ip
)
1372 __entry
->state
= state
,
1373 __entry
->ip
= (const void *)IP
1376 TP_printk("state=%p caller=%pS", __entry
->state
, __entry
->ip
)
1379 DECLARE_EVENT_CLASS(btrfs__work
,
1381 TP_PROTO(const struct btrfs_work
*work
),
1385 TP_STRUCT__entry_btrfs(
1386 __field( const void *, work
)
1387 __field( const void *, wq
)
1388 __field( const void *, func
)
1389 __field( const void *, ordered_func
)
1390 __field( const void *, ordered_free
)
1391 __field( const void *, normal_work
)
1394 TP_fast_assign_btrfs(btrfs_work_owner(work
),
1395 __entry
->work
= work
;
1396 __entry
->wq
= work
->wq
;
1397 __entry
->func
= work
->func
;
1398 __entry
->ordered_func
= work
->ordered_func
;
1399 __entry
->ordered_free
= work
->ordered_free
;
1400 __entry
->normal_work
= &work
->normal_work
;
1403 TP_printk_btrfs("work=%p (normal_work=%p) wq=%p func=%ps ordered_func=%p "
1405 __entry
->work
, __entry
->normal_work
, __entry
->wq
,
1406 __entry
->func
, __entry
->ordered_func
, __entry
->ordered_free
)
1410 * For situations when the work is freed, we pass fs_info and a tag that matches
1411 * the address of the work structure so it can be paired with the scheduling
1412 * event. DO NOT add anything here that dereferences wtag.
1414 DECLARE_EVENT_CLASS(btrfs__work__done
,
1416 TP_PROTO(const struct btrfs_fs_info
*fs_info
, const void *wtag
),
1418 TP_ARGS(fs_info
, wtag
),
1420 TP_STRUCT__entry_btrfs(
1421 __field( const void *, wtag
)
1424 TP_fast_assign_btrfs(fs_info
,
1425 __entry
->wtag
= wtag
;
1428 TP_printk_btrfs("work->%p", __entry
->wtag
)
1431 DEFINE_EVENT(btrfs__work
, btrfs_work_queued
,
1433 TP_PROTO(const struct btrfs_work
*work
),
1438 DEFINE_EVENT(btrfs__work
, btrfs_work_sched
,
1440 TP_PROTO(const struct btrfs_work
*work
),
1445 DEFINE_EVENT(btrfs__work__done
, btrfs_all_work_done
,
1447 TP_PROTO(const struct btrfs_fs_info
*fs_info
, const void *wtag
),
1449 TP_ARGS(fs_info
, wtag
)
1452 DEFINE_EVENT(btrfs__work
, btrfs_ordered_sched
,
1454 TP_PROTO(const struct btrfs_work
*work
),
1459 DECLARE_EVENT_CLASS(btrfs__workqueue
,
1461 TP_PROTO(const struct __btrfs_workqueue
*wq
,
1462 const char *name
, int high
),
1464 TP_ARGS(wq
, name
, high
),
1466 TP_STRUCT__entry_btrfs(
1467 __field( const void *, wq
)
1468 __string( name
, name
)
1469 __field( int , high
)
1472 TP_fast_assign_btrfs(btrfs_workqueue_owner(wq
),
1474 __assign_str(name
, name
);
1475 __entry
->high
= high
;
1478 TP_printk_btrfs("name=%s%s wq=%p", __get_str(name
),
1479 __print_flags(__entry
->high
, "",
1480 {(WQ_HIGHPRI
), "-high"}),
1484 DEFINE_EVENT(btrfs__workqueue
, btrfs_workqueue_alloc
,
1486 TP_PROTO(const struct __btrfs_workqueue
*wq
,
1487 const char *name
, int high
),
1489 TP_ARGS(wq
, name
, high
)
1492 DECLARE_EVENT_CLASS(btrfs__workqueue_done
,
1494 TP_PROTO(const struct __btrfs_workqueue
*wq
),
1498 TP_STRUCT__entry_btrfs(
1499 __field( const void *, wq
)
1502 TP_fast_assign_btrfs(btrfs_workqueue_owner(wq
),
1506 TP_printk_btrfs("wq=%p", __entry
->wq
)
1509 DEFINE_EVENT(btrfs__workqueue_done
, btrfs_workqueue_destroy
,
1511 TP_PROTO(const struct __btrfs_workqueue
*wq
),
1516 #define BTRFS_QGROUP_OPERATIONS \
1517 { QGROUP_RESERVE, "reserve" }, \
1518 { QGROUP_RELEASE, "release" }, \
1519 { QGROUP_FREE, "free" }
1521 DECLARE_EVENT_CLASS(btrfs__qgroup_rsv_data
,
1523 TP_PROTO(const struct inode
*inode
, u64 start
, u64 len
,
1524 u64 reserved
, int op
),
1526 TP_ARGS(inode
, start
, len
, reserved
, op
),
1528 TP_STRUCT__entry_btrfs(
1529 __field( u64
, rootid
)
1531 __field( u64
, start
)
1533 __field( u64
, reserved
)
1537 TP_fast_assign_btrfs(btrfs_sb(inode
->i_sb
),
1539 BTRFS_I(inode
)->root
->root_key
.objectid
;
1540 __entry
->ino
= btrfs_ino(BTRFS_I(inode
));
1541 __entry
->start
= start
;
1543 __entry
->reserved
= reserved
;
1547 TP_printk_btrfs("root=%llu ino=%llu start=%llu len=%llu reserved=%llu op=%s",
1548 __entry
->rootid
, __entry
->ino
, __entry
->start
, __entry
->len
,
1550 __print_flags((unsigned long)__entry
->op
, "",
1551 BTRFS_QGROUP_OPERATIONS
)
1555 DEFINE_EVENT(btrfs__qgroup_rsv_data
, btrfs_qgroup_reserve_data
,
1557 TP_PROTO(const struct inode
*inode
, u64 start
, u64 len
,
1558 u64 reserved
, int op
),
1560 TP_ARGS(inode
, start
, len
, reserved
, op
)
1563 DEFINE_EVENT(btrfs__qgroup_rsv_data
, btrfs_qgroup_release_data
,
1565 TP_PROTO(const struct inode
*inode
, u64 start
, u64 len
,
1566 u64 reserved
, int op
),
1568 TP_ARGS(inode
, start
, len
, reserved
, op
)
1571 DECLARE_EVENT_CLASS(btrfs_qgroup_extent
,
1572 TP_PROTO(const struct btrfs_fs_info
*fs_info
,
1573 const struct btrfs_qgroup_extent_record
*rec
),
1575 TP_ARGS(fs_info
, rec
),
1577 TP_STRUCT__entry_btrfs(
1578 __field( u64
, bytenr
)
1579 __field( u64
, num_bytes
)
1582 TP_fast_assign_btrfs(fs_info
,
1583 __entry
->bytenr
= rec
->bytenr
,
1584 __entry
->num_bytes
= rec
->num_bytes
;
1587 TP_printk_btrfs("bytenr=%llu num_bytes=%llu",
1588 __entry
->bytenr
, __entry
->num_bytes
)
1591 DEFINE_EVENT(btrfs_qgroup_extent
, btrfs_qgroup_account_extents
,
1593 TP_PROTO(const struct btrfs_fs_info
*fs_info
,
1594 const struct btrfs_qgroup_extent_record
*rec
),
1596 TP_ARGS(fs_info
, rec
)
1599 DEFINE_EVENT(btrfs_qgroup_extent
, btrfs_qgroup_trace_extent
,
1601 TP_PROTO(const struct btrfs_fs_info
*fs_info
,
1602 const struct btrfs_qgroup_extent_record
*rec
),
1604 TP_ARGS(fs_info
, rec
)
1607 TRACE_EVENT(qgroup_num_dirty_extents
,
1609 TP_PROTO(const struct btrfs_fs_info
*fs_info
, u64 transid
,
1610 u64 num_dirty_extents
),
1612 TP_ARGS(fs_info
, transid
, num_dirty_extents
),
1614 TP_STRUCT__entry_btrfs(
1615 __field( u64
, transid
)
1616 __field( u64
, num_dirty_extents
)
1619 TP_fast_assign_btrfs(fs_info
,
1620 __entry
->transid
= transid
;
1621 __entry
->num_dirty_extents
= num_dirty_extents
;
1624 TP_printk_btrfs("transid=%llu num_dirty_extents=%llu",
1625 __entry
->transid
, __entry
->num_dirty_extents
)
1628 TRACE_EVENT(btrfs_qgroup_account_extent
,
1630 TP_PROTO(const struct btrfs_fs_info
*fs_info
, u64 transid
, u64 bytenr
,
1631 u64 num_bytes
, u64 nr_old_roots
, u64 nr_new_roots
),
1633 TP_ARGS(fs_info
, transid
, bytenr
, num_bytes
, nr_old_roots
,
1636 TP_STRUCT__entry_btrfs(
1637 __field( u64
, transid
)
1638 __field( u64
, bytenr
)
1639 __field( u64
, num_bytes
)
1640 __field( u64
, nr_old_roots
)
1641 __field( u64
, nr_new_roots
)
1644 TP_fast_assign_btrfs(fs_info
,
1645 __entry
->transid
= transid
;
1646 __entry
->bytenr
= bytenr
;
1647 __entry
->num_bytes
= num_bytes
;
1648 __entry
->nr_old_roots
= nr_old_roots
;
1649 __entry
->nr_new_roots
= nr_new_roots
;
1653 "transid=%llu bytenr=%llu num_bytes=%llu nr_old_roots=%llu nr_new_roots=%llu",
1657 __entry
->nr_old_roots
,
1658 __entry
->nr_new_roots
)
1661 TRACE_EVENT(qgroup_update_counters
,
1663 TP_PROTO(const struct btrfs_fs_info
*fs_info
,
1664 const struct btrfs_qgroup
*qgroup
,
1665 u64 cur_old_count
, u64 cur_new_count
),
1667 TP_ARGS(fs_info
, qgroup
, cur_old_count
, cur_new_count
),
1669 TP_STRUCT__entry_btrfs(
1670 __field( u64
, qgid
)
1671 __field( u64
, old_rfer
)
1672 __field( u64
, old_excl
)
1673 __field( u64
, cur_old_count
)
1674 __field( u64
, cur_new_count
)
1677 TP_fast_assign_btrfs(fs_info
,
1678 __entry
->qgid
= qgroup
->qgroupid
;
1679 __entry
->old_rfer
= qgroup
->rfer
;
1680 __entry
->old_excl
= qgroup
->excl
;
1681 __entry
->cur_old_count
= cur_old_count
;
1682 __entry
->cur_new_count
= cur_new_count
;
1685 TP_printk_btrfs("qgid=%llu old_rfer=%llu old_excl=%llu cur_old_count=%llu cur_new_count=%llu",
1686 __entry
->qgid
, __entry
->old_rfer
, __entry
->old_excl
,
1687 __entry
->cur_old_count
, __entry
->cur_new_count
)
1690 TRACE_EVENT(qgroup_update_reserve
,
1692 TP_PROTO(struct btrfs_fs_info
*fs_info
, struct btrfs_qgroup
*qgroup
,
1693 s64 diff
, int type
),
1695 TP_ARGS(fs_info
, qgroup
, diff
, type
),
1697 TP_STRUCT__entry_btrfs(
1698 __field( u64
, qgid
)
1699 __field( u64
, cur_reserved
)
1700 __field( s64
, diff
)
1701 __field( int, type
)
1704 TP_fast_assign_btrfs(fs_info
,
1705 __entry
->qgid
= qgroup
->qgroupid
;
1706 __entry
->cur_reserved
= qgroup
->rsv
.values
[type
];
1707 __entry
->diff
= diff
;
1708 __entry
->type
= type
;
1711 TP_printk_btrfs("qgid=%llu type=%s cur_reserved=%llu diff=%lld",
1712 __entry
->qgid
, __print_symbolic(__entry
->type
, QGROUP_RSV_TYPES
),
1713 __entry
->cur_reserved
, __entry
->diff
)
1716 TRACE_EVENT(qgroup_meta_reserve
,
1718 TP_PROTO(struct btrfs_root
*root
, s64 diff
, int type
),
1720 TP_ARGS(root
, diff
, type
),
1722 TP_STRUCT__entry_btrfs(
1723 __field( u64
, refroot
)
1724 __field( s64
, diff
)
1725 __field( int, type
)
1728 TP_fast_assign_btrfs(root
->fs_info
,
1729 __entry
->refroot
= root
->root_key
.objectid
;
1730 __entry
->diff
= diff
;
1731 __entry
->type
= type
;
1734 TP_printk_btrfs("refroot=%llu(%s) type=%s diff=%lld",
1735 show_root_type(__entry
->refroot
),
1736 __print_symbolic(__entry
->type
, QGROUP_RSV_TYPES
), __entry
->diff
)
1739 TRACE_EVENT(qgroup_meta_convert
,
1741 TP_PROTO(struct btrfs_root
*root
, s64 diff
),
1743 TP_ARGS(root
, diff
),
1745 TP_STRUCT__entry_btrfs(
1746 __field( u64
, refroot
)
1747 __field( s64
, diff
)
1750 TP_fast_assign_btrfs(root
->fs_info
,
1751 __entry
->refroot
= root
->root_key
.objectid
;
1752 __entry
->diff
= diff
;
1755 TP_printk_btrfs("refroot=%llu(%s) type=%s->%s diff=%lld",
1756 show_root_type(__entry
->refroot
),
1757 __print_symbolic(BTRFS_QGROUP_RSV_META_PREALLOC
, QGROUP_RSV_TYPES
),
1758 __print_symbolic(BTRFS_QGROUP_RSV_META_PERTRANS
, QGROUP_RSV_TYPES
),
1762 TRACE_EVENT(qgroup_meta_free_all_pertrans
,
1764 TP_PROTO(struct btrfs_root
*root
),
1768 TP_STRUCT__entry_btrfs(
1769 __field( u64
, refroot
)
1770 __field( s64
, diff
)
1771 __field( int, type
)
1774 TP_fast_assign_btrfs(root
->fs_info
,
1775 __entry
->refroot
= root
->root_key
.objectid
;
1776 spin_lock(&root
->qgroup_meta_rsv_lock
);
1777 __entry
->diff
= -(s64
)root
->qgroup_meta_rsv_pertrans
;
1778 spin_unlock(&root
->qgroup_meta_rsv_lock
);
1779 __entry
->type
= BTRFS_QGROUP_RSV_META_PERTRANS
;
1782 TP_printk_btrfs("refroot=%llu(%s) type=%s diff=%lld",
1783 show_root_type(__entry
->refroot
),
1784 __print_symbolic(__entry
->type
, QGROUP_RSV_TYPES
), __entry
->diff
)
1787 DECLARE_EVENT_CLASS(btrfs__prelim_ref
,
1788 TP_PROTO(const struct btrfs_fs_info
*fs_info
,
1789 const struct prelim_ref
*oldref
,
1790 const struct prelim_ref
*newref
, u64 tree_size
),
1791 TP_ARGS(fs_info
, newref
, oldref
, tree_size
),
1793 TP_STRUCT__entry_btrfs(
1794 __field( u64
, root_id
)
1795 __field( u64
, objectid
)
1797 __field( u64
, offset
)
1798 __field( int, level
)
1799 __field( int, old_count
)
1800 __field( u64
, parent
)
1801 __field( u64
, bytenr
)
1802 __field( int, mod_count
)
1803 __field( u64
, tree_size
)
1806 TP_fast_assign_btrfs(fs_info
,
1807 __entry
->root_id
= oldref
->root_id
;
1808 __entry
->objectid
= oldref
->key_for_search
.objectid
;
1809 __entry
->type
= oldref
->key_for_search
.type
;
1810 __entry
->offset
= oldref
->key_for_search
.offset
;
1811 __entry
->level
= oldref
->level
;
1812 __entry
->old_count
= oldref
->count
;
1813 __entry
->parent
= oldref
->parent
;
1814 __entry
->bytenr
= oldref
->wanted_disk_byte
;
1815 __entry
->mod_count
= newref
? newref
->count
: 0;
1816 __entry
->tree_size
= tree_size
;
1819 TP_printk_btrfs("root_id=%llu key=[%llu,%u,%llu] level=%d count=[%d+%d=%d] parent=%llu wanted_disk_byte=%llu nodes=%llu",
1821 __entry
->objectid
, __entry
->type
,
1822 __entry
->offset
, __entry
->level
,
1823 __entry
->old_count
, __entry
->mod_count
,
1824 __entry
->old_count
+ __entry
->mod_count
,
1830 DEFINE_EVENT(btrfs__prelim_ref
, btrfs_prelim_ref_merge
,
1831 TP_PROTO(const struct btrfs_fs_info
*fs_info
,
1832 const struct prelim_ref
*oldref
,
1833 const struct prelim_ref
*newref
, u64 tree_size
),
1834 TP_ARGS(fs_info
, oldref
, newref
, tree_size
)
1837 DEFINE_EVENT(btrfs__prelim_ref
, btrfs_prelim_ref_insert
,
1838 TP_PROTO(const struct btrfs_fs_info
*fs_info
,
1839 const struct prelim_ref
*oldref
,
1840 const struct prelim_ref
*newref
, u64 tree_size
),
1841 TP_ARGS(fs_info
, oldref
, newref
, tree_size
)
1844 TRACE_EVENT(btrfs_inode_mod_outstanding_extents
,
1845 TP_PROTO(const struct btrfs_root
*root
, u64 ino
, int mod
),
1847 TP_ARGS(root
, ino
, mod
),
1849 TP_STRUCT__entry_btrfs(
1850 __field( u64
, root_objectid
)
1855 TP_fast_assign_btrfs(root
->fs_info
,
1856 __entry
->root_objectid
= root
->root_key
.objectid
;
1861 TP_printk_btrfs("root=%llu(%s) ino=%llu mod=%d",
1862 show_root_type(__entry
->root_objectid
),
1863 __entry
->ino
, __entry
->mod
)
1866 DECLARE_EVENT_CLASS(btrfs__block_group
,
1867 TP_PROTO(const struct btrfs_block_group
*bg_cache
),
1871 TP_STRUCT__entry_btrfs(
1872 __field( u64
, bytenr
)
1874 __field( u64
, used
)
1875 __field( u64
, flags
)
1878 TP_fast_assign_btrfs(bg_cache
->fs_info
,
1879 __entry
->bytenr
= bg_cache
->start
,
1880 __entry
->len
= bg_cache
->length
,
1881 __entry
->used
= bg_cache
->used
;
1882 __entry
->flags
= bg_cache
->flags
;
1885 TP_printk_btrfs("bg bytenr=%llu len=%llu used=%llu flags=%llu(%s)",
1886 __entry
->bytenr
, __entry
->len
, __entry
->used
, __entry
->flags
,
1887 __print_flags(__entry
->flags
, "|", BTRFS_GROUP_FLAGS
))
1890 DEFINE_EVENT(btrfs__block_group
, btrfs_remove_block_group
,
1891 TP_PROTO(const struct btrfs_block_group
*bg_cache
),
1896 DEFINE_EVENT(btrfs__block_group
, btrfs_add_unused_block_group
,
1897 TP_PROTO(const struct btrfs_block_group
*bg_cache
),
1902 DEFINE_EVENT(btrfs__block_group
, btrfs_skip_unused_block_group
,
1903 TP_PROTO(const struct btrfs_block_group
*bg_cache
),
1908 TRACE_EVENT(btrfs_set_extent_bit
,
1909 TP_PROTO(const struct extent_io_tree
*tree
,
1910 u64 start
, u64 len
, unsigned set_bits
),
1912 TP_ARGS(tree
, start
, len
, set_bits
),
1914 TP_STRUCT__entry_btrfs(
1915 __field( unsigned, owner
)
1917 __field( u64
, rootid
)
1918 __field( u64
, start
)
1920 __field( unsigned, set_bits
)
1923 TP_fast_assign_btrfs(tree
->fs_info
,
1924 __entry
->owner
= tree
->owner
;
1925 if (tree
->private_data
) {
1926 const struct inode
*inode
= tree
->private_data
;
1928 __entry
->ino
= btrfs_ino(BTRFS_I(inode
));
1930 BTRFS_I(inode
)->root
->root_key
.objectid
;
1933 __entry
->rootid
= 0;
1935 __entry
->start
= start
;
1937 __entry
->set_bits
= set_bits
;
1941 "io_tree=%s ino=%llu root=%llu start=%llu len=%llu set_bits=%s",
1942 __print_symbolic(__entry
->owner
, IO_TREE_OWNER
), __entry
->ino
,
1943 __entry
->rootid
, __entry
->start
, __entry
->len
,
1944 __print_flags(__entry
->set_bits
, "|", EXTENT_FLAGS
))
1947 TRACE_EVENT(btrfs_clear_extent_bit
,
1948 TP_PROTO(const struct extent_io_tree
*tree
,
1949 u64 start
, u64 len
, unsigned clear_bits
),
1951 TP_ARGS(tree
, start
, len
, clear_bits
),
1953 TP_STRUCT__entry_btrfs(
1954 __field( unsigned, owner
)
1956 __field( u64
, rootid
)
1957 __field( u64
, start
)
1959 __field( unsigned, clear_bits
)
1962 TP_fast_assign_btrfs(tree
->fs_info
,
1963 __entry
->owner
= tree
->owner
;
1964 if (tree
->private_data
) {
1965 const struct inode
*inode
= tree
->private_data
;
1967 __entry
->ino
= btrfs_ino(BTRFS_I(inode
));
1969 BTRFS_I(inode
)->root
->root_key
.objectid
;
1972 __entry
->rootid
= 0;
1974 __entry
->start
= start
;
1976 __entry
->clear_bits
= clear_bits
;
1980 "io_tree=%s ino=%llu root=%llu start=%llu len=%llu clear_bits=%s",
1981 __print_symbolic(__entry
->owner
, IO_TREE_OWNER
), __entry
->ino
,
1982 __entry
->rootid
, __entry
->start
, __entry
->len
,
1983 __print_flags(__entry
->clear_bits
, "|", EXTENT_FLAGS
))
1986 TRACE_EVENT(btrfs_convert_extent_bit
,
1987 TP_PROTO(const struct extent_io_tree
*tree
,
1988 u64 start
, u64 len
, unsigned set_bits
, unsigned clear_bits
),
1990 TP_ARGS(tree
, start
, len
, set_bits
, clear_bits
),
1992 TP_STRUCT__entry_btrfs(
1993 __field( unsigned, owner
)
1995 __field( u64
, rootid
)
1996 __field( u64
, start
)
1998 __field( unsigned, set_bits
)
1999 __field( unsigned, clear_bits
)
2002 TP_fast_assign_btrfs(tree
->fs_info
,
2003 __entry
->owner
= tree
->owner
;
2004 if (tree
->private_data
) {
2005 const struct inode
*inode
= tree
->private_data
;
2007 __entry
->ino
= btrfs_ino(BTRFS_I(inode
));
2009 BTRFS_I(inode
)->root
->root_key
.objectid
;
2012 __entry
->rootid
= 0;
2014 __entry
->start
= start
;
2016 __entry
->set_bits
= set_bits
;
2017 __entry
->clear_bits
= clear_bits
;
2021 "io_tree=%s ino=%llu root=%llu start=%llu len=%llu set_bits=%s clear_bits=%s",
2022 __print_symbolic(__entry
->owner
, IO_TREE_OWNER
), __entry
->ino
,
2023 __entry
->rootid
, __entry
->start
, __entry
->len
,
2024 __print_flags(__entry
->set_bits
, "|", EXTENT_FLAGS
),
2025 __print_flags(__entry
->clear_bits
, "|", EXTENT_FLAGS
))
2028 DECLARE_EVENT_CLASS(btrfs_sleep_tree_lock
,
2029 TP_PROTO(const struct extent_buffer
*eb
, u64 start_ns
),
2031 TP_ARGS(eb
, start_ns
),
2033 TP_STRUCT__entry_btrfs(
2034 __field( u64
, block
)
2035 __field( u64
, generation
)
2036 __field( u64
, start_ns
)
2037 __field( u64
, end_ns
)
2038 __field( u64
, diff_ns
)
2039 __field( u64
, owner
)
2040 __field( int, is_log_tree
)
2043 TP_fast_assign_btrfs(eb
->fs_info
,
2044 __entry
->block
= eb
->start
;
2045 __entry
->generation
= btrfs_header_generation(eb
);
2046 __entry
->start_ns
= start_ns
;
2047 __entry
->end_ns
= ktime_get_ns();
2048 __entry
->diff_ns
= __entry
->end_ns
- start_ns
;
2049 __entry
->owner
= btrfs_header_owner(eb
);
2050 __entry
->is_log_tree
= (eb
->log_index
>= 0);
2054 "block=%llu generation=%llu start_ns=%llu end_ns=%llu diff_ns=%llu owner=%llu is_log_tree=%d",
2055 __entry
->block
, __entry
->generation
,
2056 __entry
->start_ns
, __entry
->end_ns
, __entry
->diff_ns
,
2057 __entry
->owner
, __entry
->is_log_tree
)
2060 DEFINE_EVENT(btrfs_sleep_tree_lock
, btrfs_tree_read_lock
,
2061 TP_PROTO(const struct extent_buffer
*eb
, u64 start_ns
),
2063 TP_ARGS(eb
, start_ns
)
2066 DEFINE_EVENT(btrfs_sleep_tree_lock
, btrfs_tree_lock
,
2067 TP_PROTO(const struct extent_buffer
*eb
, u64 start_ns
),
2069 TP_ARGS(eb
, start_ns
)
2072 DECLARE_EVENT_CLASS(btrfs_locking_events
,
2073 TP_PROTO(const struct extent_buffer
*eb
),
2077 TP_STRUCT__entry_btrfs(
2078 __field( u64
, block
)
2079 __field( u64
, generation
)
2080 __field( u64
, owner
)
2081 __field( int, is_log_tree
)
2084 TP_fast_assign_btrfs(eb
->fs_info
,
2085 __entry
->block
= eb
->start
;
2086 __entry
->generation
= btrfs_header_generation(eb
);
2087 __entry
->owner
= btrfs_header_owner(eb
);
2088 __entry
->is_log_tree
= (eb
->log_index
>= 0);
2091 TP_printk_btrfs("block=%llu generation=%llu owner=%llu is_log_tree=%d",
2092 __entry
->block
, __entry
->generation
,
2093 __entry
->owner
, __entry
->is_log_tree
)
2096 #define DEFINE_BTRFS_LOCK_EVENT(name) \
2097 DEFINE_EVENT(btrfs_locking_events, name, \
2098 TP_PROTO(const struct extent_buffer *eb), \
2103 DEFINE_BTRFS_LOCK_EVENT(btrfs_tree_unlock
);
2104 DEFINE_BTRFS_LOCK_EVENT(btrfs_tree_read_unlock
);
2105 DEFINE_BTRFS_LOCK_EVENT(btrfs_tree_read_unlock_blocking
);
2106 DEFINE_BTRFS_LOCK_EVENT(btrfs_set_lock_blocking_read
);
2107 DEFINE_BTRFS_LOCK_EVENT(btrfs_set_lock_blocking_write
);
2108 DEFINE_BTRFS_LOCK_EVENT(btrfs_try_tree_read_lock
);
2109 DEFINE_BTRFS_LOCK_EVENT(btrfs_try_tree_write_lock
);
2110 DEFINE_BTRFS_LOCK_EVENT(btrfs_tree_read_lock_atomic
);
2112 DECLARE_EVENT_CLASS(btrfs__space_info_update
,
2114 TP_PROTO(const struct btrfs_fs_info
*fs_info
,
2115 const struct btrfs_space_info
*sinfo
, u64 old
, s64 diff
),
2117 TP_ARGS(fs_info
, sinfo
, old
, diff
),
2119 TP_STRUCT__entry_btrfs(
2120 __field( u64
, type
)
2122 __field( s64
, diff
)
2125 TP_fast_assign_btrfs(fs_info
,
2126 __entry
->type
= sinfo
->flags
;
2128 __entry
->diff
= diff
;
2130 TP_printk_btrfs("type=%s old=%llu diff=%lld",
2131 __print_flags(__entry
->type
, "|", BTRFS_GROUP_FLAGS
),
2132 __entry
->old
, __entry
->diff
)
2135 DEFINE_EVENT(btrfs__space_info_update
, update_bytes_may_use
,
2137 TP_PROTO(const struct btrfs_fs_info
*fs_info
,
2138 const struct btrfs_space_info
*sinfo
, u64 old
, s64 diff
),
2140 TP_ARGS(fs_info
, sinfo
, old
, diff
)
2143 DEFINE_EVENT(btrfs__space_info_update
, update_bytes_pinned
,
2145 TP_PROTO(const struct btrfs_fs_info
*fs_info
,
2146 const struct btrfs_space_info
*sinfo
, u64 old
, s64 diff
),
2148 TP_ARGS(fs_info
, sinfo
, old
, diff
)
2151 #endif /* _TRACE_BTRFS_H */
2153 /* This part must be outside protection */
2154 #include <trace/define_trace.h>