11abe9b8aSliubo #undef TRACE_SYSTEM 21abe9b8aSliubo #define TRACE_SYSTEM btrfs 31abe9b8aSliubo 41abe9b8aSliubo #if !defined(_TRACE_BTRFS_H) || defined(TRACE_HEADER_MULTI_READ) 51abe9b8aSliubo #define _TRACE_BTRFS_H 61abe9b8aSliubo 71abe9b8aSliubo #include <linux/writeback.h> 81abe9b8aSliubo #include <linux/tracepoint.h> 91abe9b8aSliubo 101abe9b8aSliubo struct btrfs_root; 111abe9b8aSliubo struct btrfs_fs_info; 121abe9b8aSliubo struct btrfs_inode; 131abe9b8aSliubo struct extent_map; 141abe9b8aSliubo struct btrfs_ordered_extent; 151abe9b8aSliubo struct btrfs_delayed_ref_node; 161abe9b8aSliubo struct btrfs_delayed_tree_ref; 171abe9b8aSliubo struct btrfs_delayed_data_ref; 181abe9b8aSliubo struct btrfs_delayed_ref_head; 191abe9b8aSliubo struct map_lookup; 201abe9b8aSliubo struct extent_buffer; 211abe9b8aSliubo 221abe9b8aSliubo #define show_ref_type(type) \ 231abe9b8aSliubo __print_symbolic(type, \ 241abe9b8aSliubo { BTRFS_TREE_BLOCK_REF_KEY, "TREE_BLOCK_REF" }, \ 251abe9b8aSliubo { BTRFS_EXTENT_DATA_REF_KEY, "EXTENT_DATA_REF" }, \ 261abe9b8aSliubo { BTRFS_EXTENT_REF_V0_KEY, "EXTENT_REF_V0" }, \ 271abe9b8aSliubo { BTRFS_SHARED_BLOCK_REF_KEY, "SHARED_BLOCK_REF" }, \ 281abe9b8aSliubo { BTRFS_SHARED_DATA_REF_KEY, "SHARED_DATA_REF" }) 291abe9b8aSliubo 301abe9b8aSliubo #define __show_root_type(obj) \ 311abe9b8aSliubo __print_symbolic(obj, \ 321abe9b8aSliubo { BTRFS_ROOT_TREE_OBJECTID, "ROOT_TREE" }, \ 331abe9b8aSliubo { BTRFS_EXTENT_TREE_OBJECTID, "EXTENT_TREE" }, \ 341abe9b8aSliubo { BTRFS_CHUNK_TREE_OBJECTID, "CHUNK_TREE" }, \ 351abe9b8aSliubo { BTRFS_DEV_TREE_OBJECTID, "DEV_TREE" }, \ 361abe9b8aSliubo { BTRFS_FS_TREE_OBJECTID, "FS_TREE" }, \ 371abe9b8aSliubo { BTRFS_ROOT_TREE_DIR_OBJECTID, "ROOT_TREE_DIR" }, \ 381abe9b8aSliubo { BTRFS_CSUM_TREE_OBJECTID, "CSUM_TREE" }, \ 391abe9b8aSliubo { BTRFS_TREE_LOG_OBJECTID, "TREE_LOG" }, \ 401abe9b8aSliubo { BTRFS_TREE_RELOC_OBJECTID, "TREE_RELOC" }, \ 411abe9b8aSliubo { BTRFS_DATA_RELOC_TREE_OBJECTID, "DATA_RELOC_TREE" }) 421abe9b8aSliubo 431abe9b8aSliubo #define show_root_type(obj) \ 441abe9b8aSliubo obj, ((obj >= BTRFS_DATA_RELOC_TREE_OBJECTID) || \ 451abe9b8aSliubo (obj <= BTRFS_CSUM_TREE_OBJECTID )) ? __show_root_type(obj) : "-" 461abe9b8aSliubo 471abe9b8aSliubo TRACE_EVENT(btrfs_transaction_commit, 481abe9b8aSliubo 491abe9b8aSliubo TP_PROTO(struct btrfs_root *root), 501abe9b8aSliubo 511abe9b8aSliubo TP_ARGS(root), 521abe9b8aSliubo 531abe9b8aSliubo TP_STRUCT__entry( 541abe9b8aSliubo __field( u64, generation ) 551abe9b8aSliubo __field( u64, root_objectid ) 561abe9b8aSliubo ), 571abe9b8aSliubo 581abe9b8aSliubo TP_fast_assign( 591abe9b8aSliubo __entry->generation = root->fs_info->generation; 601abe9b8aSliubo __entry->root_objectid = root->root_key.objectid; 611abe9b8aSliubo ), 621abe9b8aSliubo 631abe9b8aSliubo TP_printk("root = %llu(%s), gen = %llu", 641abe9b8aSliubo show_root_type(__entry->root_objectid), 651abe9b8aSliubo (unsigned long long)__entry->generation) 661abe9b8aSliubo ); 671abe9b8aSliubo 681abe9b8aSliubo DECLARE_EVENT_CLASS(btrfs__inode, 691abe9b8aSliubo 701abe9b8aSliubo TP_PROTO(struct inode *inode), 711abe9b8aSliubo 721abe9b8aSliubo TP_ARGS(inode), 731abe9b8aSliubo 741abe9b8aSliubo TP_STRUCT__entry( 751abe9b8aSliubo __field( ino_t, ino ) 761abe9b8aSliubo __field( blkcnt_t, blocks ) 771abe9b8aSliubo __field( u64, disk_i_size ) 781abe9b8aSliubo __field( u64, generation ) 791abe9b8aSliubo __field( u64, last_trans ) 801abe9b8aSliubo __field( u64, logged_trans ) 811abe9b8aSliubo __field( u64, root_objectid ) 821abe9b8aSliubo ), 831abe9b8aSliubo 841abe9b8aSliubo TP_fast_assign( 851abe9b8aSliubo __entry->ino = inode->i_ino; 861abe9b8aSliubo __entry->blocks = inode->i_blocks; 871abe9b8aSliubo __entry->disk_i_size = BTRFS_I(inode)->disk_i_size; 881abe9b8aSliubo __entry->generation = BTRFS_I(inode)->generation; 891abe9b8aSliubo __entry->last_trans = BTRFS_I(inode)->last_trans; 901abe9b8aSliubo __entry->logged_trans = BTRFS_I(inode)->logged_trans; 911abe9b8aSliubo __entry->root_objectid = 921abe9b8aSliubo BTRFS_I(inode)->root->root_key.objectid; 931abe9b8aSliubo ), 941abe9b8aSliubo 951abe9b8aSliubo TP_printk("root = %llu(%s), gen = %llu, ino = %lu, blocks = %llu, " 961abe9b8aSliubo "disk_i_size = %llu, last_trans = %llu, logged_trans = %llu", 971abe9b8aSliubo show_root_type(__entry->root_objectid), 981abe9b8aSliubo (unsigned long long)__entry->generation, 991abe9b8aSliubo (unsigned long)__entry->ino, 1001abe9b8aSliubo (unsigned long long)__entry->blocks, 1011abe9b8aSliubo (unsigned long long)__entry->disk_i_size, 1021abe9b8aSliubo (unsigned long long)__entry->last_trans, 1031abe9b8aSliubo (unsigned long long)__entry->logged_trans) 1041abe9b8aSliubo ); 1051abe9b8aSliubo 1061abe9b8aSliubo DEFINE_EVENT(btrfs__inode, btrfs_inode_new, 1071abe9b8aSliubo 1081abe9b8aSliubo TP_PROTO(struct inode *inode), 1091abe9b8aSliubo 1101abe9b8aSliubo TP_ARGS(inode) 1111abe9b8aSliubo ); 1121abe9b8aSliubo 1131abe9b8aSliubo DEFINE_EVENT(btrfs__inode, btrfs_inode_request, 1141abe9b8aSliubo 1151abe9b8aSliubo TP_PROTO(struct inode *inode), 1161abe9b8aSliubo 1171abe9b8aSliubo TP_ARGS(inode) 1181abe9b8aSliubo ); 1191abe9b8aSliubo 1201abe9b8aSliubo DEFINE_EVENT(btrfs__inode, btrfs_inode_evict, 1211abe9b8aSliubo 1221abe9b8aSliubo TP_PROTO(struct inode *inode), 1231abe9b8aSliubo 1241abe9b8aSliubo TP_ARGS(inode) 1251abe9b8aSliubo ); 1261abe9b8aSliubo 1271abe9b8aSliubo #define __show_map_type(type) \ 1281abe9b8aSliubo __print_symbolic(type, \ 1291abe9b8aSliubo { EXTENT_MAP_LAST_BYTE, "LAST_BYTE" }, \ 1301abe9b8aSliubo { EXTENT_MAP_HOLE, "HOLE" }, \ 1311abe9b8aSliubo { EXTENT_MAP_INLINE, "INLINE" }, \ 1321abe9b8aSliubo { EXTENT_MAP_DELALLOC, "DELALLOC" }) 1331abe9b8aSliubo 1341abe9b8aSliubo #define show_map_type(type) \ 1351abe9b8aSliubo type, (type >= EXTENT_MAP_LAST_BYTE) ? "-" : __show_map_type(type) 1361abe9b8aSliubo 1371abe9b8aSliubo #define show_map_flags(flag) \ 1381abe9b8aSliubo __print_flags(flag, "|", \ 1391abe9b8aSliubo { EXTENT_FLAG_PINNED, "PINNED" }, \ 1401abe9b8aSliubo { EXTENT_FLAG_COMPRESSED, "COMPRESSED" }, \ 1411abe9b8aSliubo { EXTENT_FLAG_VACANCY, "VACANCY" }, \ 1421abe9b8aSliubo { EXTENT_FLAG_PREALLOC, "PREALLOC" }) 1431abe9b8aSliubo 1441abe9b8aSliubo TRACE_EVENT(btrfs_get_extent, 1451abe9b8aSliubo 1461abe9b8aSliubo TP_PROTO(struct btrfs_root *root, struct extent_map *map), 1471abe9b8aSliubo 1481abe9b8aSliubo TP_ARGS(root, map), 1491abe9b8aSliubo 1501abe9b8aSliubo TP_STRUCT__entry( 1511abe9b8aSliubo __field( u64, root_objectid ) 1521abe9b8aSliubo __field( u64, start ) 1531abe9b8aSliubo __field( u64, len ) 1541abe9b8aSliubo __field( u64, orig_start ) 1551abe9b8aSliubo __field( u64, block_start ) 1561abe9b8aSliubo __field( u64, block_len ) 1571abe9b8aSliubo __field( unsigned long, flags ) 1581abe9b8aSliubo __field( int, refs ) 1591abe9b8aSliubo __field( unsigned int, compress_type ) 1601abe9b8aSliubo ), 1611abe9b8aSliubo 1621abe9b8aSliubo TP_fast_assign( 1631abe9b8aSliubo __entry->root_objectid = root->root_key.objectid; 1641abe9b8aSliubo __entry->start = map->start; 1651abe9b8aSliubo __entry->len = map->len; 1661abe9b8aSliubo __entry->orig_start = map->orig_start; 1671abe9b8aSliubo __entry->block_start = map->block_start; 1681abe9b8aSliubo __entry->block_len = map->block_len; 1691abe9b8aSliubo __entry->flags = map->flags; 1701abe9b8aSliubo __entry->refs = atomic_read(&map->refs); 1711abe9b8aSliubo __entry->compress_type = map->compress_type; 1721abe9b8aSliubo ), 1731abe9b8aSliubo 1741abe9b8aSliubo TP_printk("root = %llu(%s), start = %llu, len = %llu, " 1751abe9b8aSliubo "orig_start = %llu, block_start = %llu(%s), " 1761abe9b8aSliubo "block_len = %llu, flags = %s, refs = %u, " 1771abe9b8aSliubo "compress_type = %u", 1781abe9b8aSliubo show_root_type(__entry->root_objectid), 1791abe9b8aSliubo (unsigned long long)__entry->start, 1801abe9b8aSliubo (unsigned long long)__entry->len, 1811abe9b8aSliubo (unsigned long long)__entry->orig_start, 1821abe9b8aSliubo show_map_type(__entry->block_start), 1831abe9b8aSliubo (unsigned long long)__entry->block_len, 1841abe9b8aSliubo show_map_flags(__entry->flags), 1851abe9b8aSliubo __entry->refs, __entry->compress_type) 1861abe9b8aSliubo ); 1871abe9b8aSliubo 1881abe9b8aSliubo #define show_ordered_flags(flags) \ 1891abe9b8aSliubo __print_symbolic(flags, \ 1901abe9b8aSliubo { BTRFS_ORDERED_IO_DONE, "IO_DONE" }, \ 1911abe9b8aSliubo { BTRFS_ORDERED_COMPLETE, "COMPLETE" }, \ 1921abe9b8aSliubo { BTRFS_ORDERED_NOCOW, "NOCOW" }, \ 1931abe9b8aSliubo { BTRFS_ORDERED_COMPRESSED, "COMPRESSED" }, \ 1941abe9b8aSliubo { BTRFS_ORDERED_PREALLOC, "PREALLOC" }, \ 1951abe9b8aSliubo { BTRFS_ORDERED_DIRECT, "DIRECT" }) 1961abe9b8aSliubo 1971abe9b8aSliubo DECLARE_EVENT_CLASS(btrfs__ordered_extent, 1981abe9b8aSliubo 1991abe9b8aSliubo TP_PROTO(struct inode *inode, struct btrfs_ordered_extent *ordered), 2001abe9b8aSliubo 2011abe9b8aSliubo TP_ARGS(inode, ordered), 2021abe9b8aSliubo 2031abe9b8aSliubo TP_STRUCT__entry( 2041abe9b8aSliubo __field( ino_t, ino ) 2051abe9b8aSliubo __field( u64, file_offset ) 2061abe9b8aSliubo __field( u64, start ) 2071abe9b8aSliubo __field( u64, len ) 2081abe9b8aSliubo __field( u64, disk_len ) 2091abe9b8aSliubo __field( u64, bytes_left ) 2101abe9b8aSliubo __field( unsigned long, flags ) 2111abe9b8aSliubo __field( int, compress_type ) 2121abe9b8aSliubo __field( int, refs ) 2131abe9b8aSliubo __field( u64, root_objectid ) 2141abe9b8aSliubo ), 2151abe9b8aSliubo 2161abe9b8aSliubo TP_fast_assign( 2171abe9b8aSliubo __entry->ino = inode->i_ino; 2181abe9b8aSliubo __entry->file_offset = ordered->file_offset; 2191abe9b8aSliubo __entry->start = ordered->start; 2201abe9b8aSliubo __entry->len = ordered->len; 2211abe9b8aSliubo __entry->disk_len = ordered->disk_len; 2221abe9b8aSliubo __entry->bytes_left = ordered->bytes_left; 2231abe9b8aSliubo __entry->flags = ordered->flags; 2241abe9b8aSliubo __entry->compress_type = ordered->compress_type; 2251abe9b8aSliubo __entry->refs = atomic_read(&ordered->refs); 2261abe9b8aSliubo __entry->root_objectid = 2271abe9b8aSliubo BTRFS_I(inode)->root->root_key.objectid; 2281abe9b8aSliubo ), 2291abe9b8aSliubo 2301abe9b8aSliubo TP_printk("root = %llu(%s), ino = %llu, file_offset = %llu, " 2311abe9b8aSliubo "start = %llu, len = %llu, disk_len = %llu, " 2321abe9b8aSliubo "bytes_left = %llu, flags = %s, compress_type = %d, " 2331abe9b8aSliubo "refs = %d", 2341abe9b8aSliubo show_root_type(__entry->root_objectid), 2351abe9b8aSliubo (unsigned long long)__entry->ino, 2361abe9b8aSliubo (unsigned long long)__entry->file_offset, 2371abe9b8aSliubo (unsigned long long)__entry->start, 2381abe9b8aSliubo (unsigned long long)__entry->len, 2391abe9b8aSliubo (unsigned long long)__entry->disk_len, 2401abe9b8aSliubo (unsigned long long)__entry->bytes_left, 2411abe9b8aSliubo show_ordered_flags(__entry->flags), 2421abe9b8aSliubo __entry->compress_type, __entry->refs) 2431abe9b8aSliubo ); 2441abe9b8aSliubo 2451abe9b8aSliubo DEFINE_EVENT(btrfs__ordered_extent, btrfs_ordered_extent_add, 2461abe9b8aSliubo 2471abe9b8aSliubo TP_PROTO(struct inode *inode, struct btrfs_ordered_extent *ordered), 2481abe9b8aSliubo 2491abe9b8aSliubo TP_ARGS(inode, ordered) 2501abe9b8aSliubo ); 2511abe9b8aSliubo 2521abe9b8aSliubo DEFINE_EVENT(btrfs__ordered_extent, btrfs_ordered_extent_remove, 2531abe9b8aSliubo 2541abe9b8aSliubo TP_PROTO(struct inode *inode, struct btrfs_ordered_extent *ordered), 2551abe9b8aSliubo 2561abe9b8aSliubo TP_ARGS(inode, ordered) 2571abe9b8aSliubo ); 2581abe9b8aSliubo 2591abe9b8aSliubo DEFINE_EVENT(btrfs__ordered_extent, btrfs_ordered_extent_start, 2601abe9b8aSliubo 2611abe9b8aSliubo TP_PROTO(struct inode *inode, struct btrfs_ordered_extent *ordered), 2621abe9b8aSliubo 2631abe9b8aSliubo TP_ARGS(inode, ordered) 2641abe9b8aSliubo ); 2651abe9b8aSliubo 2661abe9b8aSliubo DEFINE_EVENT(btrfs__ordered_extent, btrfs_ordered_extent_put, 2671abe9b8aSliubo 2681abe9b8aSliubo TP_PROTO(struct inode *inode, struct btrfs_ordered_extent *ordered), 2691abe9b8aSliubo 2701abe9b8aSliubo TP_ARGS(inode, ordered) 2711abe9b8aSliubo ); 2721abe9b8aSliubo 2731abe9b8aSliubo DECLARE_EVENT_CLASS(btrfs__writepage, 2741abe9b8aSliubo 2751abe9b8aSliubo TP_PROTO(struct page *page, struct inode *inode, 2761abe9b8aSliubo struct writeback_control *wbc), 2771abe9b8aSliubo 2781abe9b8aSliubo TP_ARGS(page, inode, wbc), 2791abe9b8aSliubo 2801abe9b8aSliubo TP_STRUCT__entry( 2811abe9b8aSliubo __field( ino_t, ino ) 2821abe9b8aSliubo __field( pgoff_t, index ) 2831abe9b8aSliubo __field( long, nr_to_write ) 2841abe9b8aSliubo __field( long, pages_skipped ) 2851abe9b8aSliubo __field( loff_t, range_start ) 2861abe9b8aSliubo __field( loff_t, range_end ) 2871abe9b8aSliubo __field( char, nonblocking ) 2881abe9b8aSliubo __field( char, for_kupdate ) 2891abe9b8aSliubo __field( char, for_reclaim ) 2901abe9b8aSliubo __field( char, range_cyclic ) 2911abe9b8aSliubo __field( pgoff_t, writeback_index ) 2921abe9b8aSliubo __field( u64, root_objectid ) 2931abe9b8aSliubo ), 2941abe9b8aSliubo 2951abe9b8aSliubo TP_fast_assign( 2961abe9b8aSliubo __entry->ino = inode->i_ino; 2971abe9b8aSliubo __entry->index = page->index; 2981abe9b8aSliubo __entry->nr_to_write = wbc->nr_to_write; 2991abe9b8aSliubo __entry->pages_skipped = wbc->pages_skipped; 3001abe9b8aSliubo __entry->range_start = wbc->range_start; 3011abe9b8aSliubo __entry->range_end = wbc->range_end; 3021abe9b8aSliubo __entry->nonblocking = wbc->nonblocking; 3031abe9b8aSliubo __entry->for_kupdate = wbc->for_kupdate; 3041abe9b8aSliubo __entry->for_reclaim = wbc->for_reclaim; 3051abe9b8aSliubo __entry->range_cyclic = wbc->range_cyclic; 3061abe9b8aSliubo __entry->writeback_index = inode->i_mapping->writeback_index; 3071abe9b8aSliubo __entry->root_objectid = 3081abe9b8aSliubo BTRFS_I(inode)->root->root_key.objectid; 3091abe9b8aSliubo ), 3101abe9b8aSliubo 3111abe9b8aSliubo TP_printk("root = %llu(%s), ino = %lu, page_index = %lu, " 3121abe9b8aSliubo "nr_to_write = %ld, pages_skipped = %ld, range_start = %llu, " 3131abe9b8aSliubo "range_end = %llu, nonblocking = %d, for_kupdate = %d, " 3141abe9b8aSliubo "for_reclaim = %d, range_cyclic = %d, writeback_index = %lu", 3151abe9b8aSliubo show_root_type(__entry->root_objectid), 3161abe9b8aSliubo (unsigned long)__entry->ino, __entry->index, 3171abe9b8aSliubo __entry->nr_to_write, __entry->pages_skipped, 3181abe9b8aSliubo __entry->range_start, __entry->range_end, 3191abe9b8aSliubo __entry->nonblocking, __entry->for_kupdate, 3201abe9b8aSliubo __entry->for_reclaim, __entry->range_cyclic, 3211abe9b8aSliubo (unsigned long)__entry->writeback_index) 3221abe9b8aSliubo ); 3231abe9b8aSliubo 3241abe9b8aSliubo DEFINE_EVENT(btrfs__writepage, __extent_writepage, 3251abe9b8aSliubo 3261abe9b8aSliubo TP_PROTO(struct page *page, struct inode *inode, 3271abe9b8aSliubo struct writeback_control *wbc), 3281abe9b8aSliubo 3291abe9b8aSliubo TP_ARGS(page, inode, wbc) 3301abe9b8aSliubo ); 3311abe9b8aSliubo 3321abe9b8aSliubo TRACE_EVENT(btrfs_writepage_end_io_hook, 3331abe9b8aSliubo 3341abe9b8aSliubo TP_PROTO(struct page *page, u64 start, u64 end, int uptodate), 3351abe9b8aSliubo 3361abe9b8aSliubo TP_ARGS(page, start, end, uptodate), 3371abe9b8aSliubo 3381abe9b8aSliubo TP_STRUCT__entry( 3391abe9b8aSliubo __field( ino_t, ino ) 3401abe9b8aSliubo __field( pgoff_t, index ) 3411abe9b8aSliubo __field( u64, start ) 3421abe9b8aSliubo __field( u64, end ) 3431abe9b8aSliubo __field( int, uptodate ) 3441abe9b8aSliubo __field( u64, root_objectid ) 3451abe9b8aSliubo ), 3461abe9b8aSliubo 3471abe9b8aSliubo TP_fast_assign( 3481abe9b8aSliubo __entry->ino = page->mapping->host->i_ino; 3491abe9b8aSliubo __entry->index = page->index; 3501abe9b8aSliubo __entry->start = start; 3511abe9b8aSliubo __entry->end = end; 3521abe9b8aSliubo __entry->uptodate = uptodate; 3531abe9b8aSliubo __entry->root_objectid = 3541abe9b8aSliubo BTRFS_I(page->mapping->host)->root->root_key.objectid; 3551abe9b8aSliubo ), 3561abe9b8aSliubo 3571abe9b8aSliubo TP_printk("root = %llu(%s), ino = %lu, page_index = %lu, start = %llu, " 3581abe9b8aSliubo "end = %llu, uptodate = %d", 3591abe9b8aSliubo show_root_type(__entry->root_objectid), 3601abe9b8aSliubo (unsigned long)__entry->ino, (unsigned long)__entry->index, 3611abe9b8aSliubo (unsigned long long)__entry->start, 3621abe9b8aSliubo (unsigned long long)__entry->end, __entry->uptodate) 3631abe9b8aSliubo ); 3641abe9b8aSliubo 3651abe9b8aSliubo TRACE_EVENT(btrfs_sync_file, 3661abe9b8aSliubo 3671abe9b8aSliubo TP_PROTO(struct file *file, int datasync), 3681abe9b8aSliubo 3691abe9b8aSliubo TP_ARGS(file, datasync), 3701abe9b8aSliubo 3711abe9b8aSliubo TP_STRUCT__entry( 3721abe9b8aSliubo __field( ino_t, ino ) 3731abe9b8aSliubo __field( ino_t, parent ) 3741abe9b8aSliubo __field( int, datasync ) 3751abe9b8aSliubo __field( u64, root_objectid ) 3761abe9b8aSliubo ), 3771abe9b8aSliubo 3781abe9b8aSliubo TP_fast_assign( 3791abe9b8aSliubo struct dentry *dentry = file->f_path.dentry; 3801abe9b8aSliubo struct inode *inode = dentry->d_inode; 3811abe9b8aSliubo 3821abe9b8aSliubo __entry->ino = inode->i_ino; 3831abe9b8aSliubo __entry->parent = dentry->d_parent->d_inode->i_ino; 3841abe9b8aSliubo __entry->datasync = datasync; 3851abe9b8aSliubo __entry->root_objectid = 3861abe9b8aSliubo BTRFS_I(inode)->root->root_key.objectid; 3871abe9b8aSliubo ), 3881abe9b8aSliubo 3891abe9b8aSliubo TP_printk("root = %llu(%s), ino = %ld, parent = %ld, datasync = %d", 3901abe9b8aSliubo show_root_type(__entry->root_objectid), 3911abe9b8aSliubo (unsigned long)__entry->ino, (unsigned long)__entry->parent, 3921abe9b8aSliubo __entry->datasync) 3931abe9b8aSliubo ); 3941abe9b8aSliubo 3951abe9b8aSliubo TRACE_EVENT(btrfs_sync_fs, 3961abe9b8aSliubo 3971abe9b8aSliubo TP_PROTO(int wait), 3981abe9b8aSliubo 3991abe9b8aSliubo TP_ARGS(wait), 4001abe9b8aSliubo 4011abe9b8aSliubo TP_STRUCT__entry( 4021abe9b8aSliubo __field( int, wait ) 4031abe9b8aSliubo ), 4041abe9b8aSliubo 4051abe9b8aSliubo TP_fast_assign( 4061abe9b8aSliubo __entry->wait = wait; 4071abe9b8aSliubo ), 4081abe9b8aSliubo 4091abe9b8aSliubo TP_printk("wait = %d", __entry->wait) 4101abe9b8aSliubo ); 4111abe9b8aSliubo 4121abe9b8aSliubo #define show_ref_action(action) \ 4131abe9b8aSliubo __print_symbolic(action, \ 4141abe9b8aSliubo { BTRFS_ADD_DELAYED_REF, "ADD_DELAYED_REF" }, \ 4151abe9b8aSliubo { BTRFS_DROP_DELAYED_REF, "DROP_DELAYED_REF" }, \ 4161abe9b8aSliubo { BTRFS_ADD_DELAYED_EXTENT, "ADD_DELAYED_EXTENT" }, \ 4171abe9b8aSliubo { BTRFS_UPDATE_DELAYED_HEAD, "UPDATE_DELAYED_HEAD" }) 4181abe9b8aSliubo 4191abe9b8aSliubo 4201abe9b8aSliubo TRACE_EVENT(btrfs_delayed_tree_ref, 4211abe9b8aSliubo 4221abe9b8aSliubo TP_PROTO(struct btrfs_delayed_ref_node *ref, 4231abe9b8aSliubo struct btrfs_delayed_tree_ref *full_ref, 4241abe9b8aSliubo int action), 4251abe9b8aSliubo 4261abe9b8aSliubo TP_ARGS(ref, full_ref, action), 4271abe9b8aSliubo 4281abe9b8aSliubo TP_STRUCT__entry( 4291abe9b8aSliubo __field( u64, bytenr ) 4301abe9b8aSliubo __field( u64, num_bytes ) 4311abe9b8aSliubo __field( int, action ) 4321abe9b8aSliubo __field( u64, parent ) 4331abe9b8aSliubo __field( u64, ref_root ) 4341abe9b8aSliubo __field( int, level ) 4351abe9b8aSliubo __field( int, type ) 4361abe9b8aSliubo ), 4371abe9b8aSliubo 4381abe9b8aSliubo TP_fast_assign( 4391abe9b8aSliubo __entry->bytenr = ref->bytenr; 4401abe9b8aSliubo __entry->num_bytes = ref->num_bytes; 4411abe9b8aSliubo __entry->action = action; 4421abe9b8aSliubo __entry->parent = full_ref->parent; 4431abe9b8aSliubo __entry->ref_root = full_ref->root; 4441abe9b8aSliubo __entry->level = full_ref->level; 4451abe9b8aSliubo __entry->type = ref->type; 4461abe9b8aSliubo ), 4471abe9b8aSliubo 4481abe9b8aSliubo TP_printk("bytenr = %llu, num_bytes = %llu, action = %s, " 4491abe9b8aSliubo "parent = %llu(%s), ref_root = %llu(%s), level = %d, " 4501abe9b8aSliubo "type = %s", 4511abe9b8aSliubo (unsigned long long)__entry->bytenr, 4521abe9b8aSliubo (unsigned long long)__entry->num_bytes, 4531abe9b8aSliubo show_ref_action(__entry->action), 4541abe9b8aSliubo show_root_type(__entry->parent), 4551abe9b8aSliubo show_root_type(__entry->ref_root), 4561abe9b8aSliubo __entry->level, show_ref_type(__entry->type)) 4571abe9b8aSliubo ); 4581abe9b8aSliubo 4591abe9b8aSliubo TRACE_EVENT(btrfs_delayed_data_ref, 4601abe9b8aSliubo 4611abe9b8aSliubo TP_PROTO(struct btrfs_delayed_ref_node *ref, 4621abe9b8aSliubo struct btrfs_delayed_data_ref *full_ref, 4631abe9b8aSliubo int action), 4641abe9b8aSliubo 4651abe9b8aSliubo TP_ARGS(ref, full_ref, action), 4661abe9b8aSliubo 4671abe9b8aSliubo TP_STRUCT__entry( 4681abe9b8aSliubo __field( u64, bytenr ) 4691abe9b8aSliubo __field( u64, num_bytes ) 4701abe9b8aSliubo __field( int, action ) 4711abe9b8aSliubo __field( u64, parent ) 4721abe9b8aSliubo __field( u64, ref_root ) 4731abe9b8aSliubo __field( u64, owner ) 4741abe9b8aSliubo __field( u64, offset ) 4751abe9b8aSliubo __field( int, type ) 4761abe9b8aSliubo ), 4771abe9b8aSliubo 4781abe9b8aSliubo TP_fast_assign( 4791abe9b8aSliubo __entry->bytenr = ref->bytenr; 4801abe9b8aSliubo __entry->num_bytes = ref->num_bytes; 4811abe9b8aSliubo __entry->action = action; 4821abe9b8aSliubo __entry->parent = full_ref->parent; 4831abe9b8aSliubo __entry->ref_root = full_ref->root; 4841abe9b8aSliubo __entry->owner = full_ref->objectid; 4851abe9b8aSliubo __entry->offset = full_ref->offset; 4861abe9b8aSliubo __entry->type = ref->type; 4871abe9b8aSliubo ), 4881abe9b8aSliubo 4891abe9b8aSliubo TP_printk("bytenr = %llu, num_bytes = %llu, action = %s, " 4901abe9b8aSliubo "parent = %llu(%s), ref_root = %llu(%s), owner = %llu, " 4911abe9b8aSliubo "offset = %llu, type = %s", 4921abe9b8aSliubo (unsigned long long)__entry->bytenr, 4931abe9b8aSliubo (unsigned long long)__entry->num_bytes, 4941abe9b8aSliubo show_ref_action(__entry->action), 4951abe9b8aSliubo show_root_type(__entry->parent), 4961abe9b8aSliubo show_root_type(__entry->ref_root), 4971abe9b8aSliubo (unsigned long long)__entry->owner, 4981abe9b8aSliubo (unsigned long long)__entry->offset, 4991abe9b8aSliubo show_ref_type(__entry->type)) 5001abe9b8aSliubo ); 5011abe9b8aSliubo 5021abe9b8aSliubo TRACE_EVENT(btrfs_delayed_ref_head, 5031abe9b8aSliubo 5041abe9b8aSliubo TP_PROTO(struct btrfs_delayed_ref_node *ref, 5051abe9b8aSliubo struct btrfs_delayed_ref_head *head_ref, 5061abe9b8aSliubo int action), 5071abe9b8aSliubo 5081abe9b8aSliubo TP_ARGS(ref, head_ref, action), 5091abe9b8aSliubo 5101abe9b8aSliubo TP_STRUCT__entry( 5111abe9b8aSliubo __field( u64, bytenr ) 5121abe9b8aSliubo __field( u64, num_bytes ) 5131abe9b8aSliubo __field( int, action ) 5141abe9b8aSliubo __field( int, is_data ) 5151abe9b8aSliubo ), 5161abe9b8aSliubo 5171abe9b8aSliubo TP_fast_assign( 5181abe9b8aSliubo __entry->bytenr = ref->bytenr; 5191abe9b8aSliubo __entry->num_bytes = ref->num_bytes; 5201abe9b8aSliubo __entry->action = action; 5211abe9b8aSliubo __entry->is_data = head_ref->is_data; 5221abe9b8aSliubo ), 5231abe9b8aSliubo 5241abe9b8aSliubo TP_printk("bytenr = %llu, num_bytes = %llu, action = %s, is_data = %d", 5251abe9b8aSliubo (unsigned long long)__entry->bytenr, 5261abe9b8aSliubo (unsigned long long)__entry->num_bytes, 5271abe9b8aSliubo show_ref_action(__entry->action), 5281abe9b8aSliubo __entry->is_data) 5291abe9b8aSliubo ); 5301abe9b8aSliubo 5311abe9b8aSliubo #define show_chunk_type(type) \ 5321abe9b8aSliubo __print_flags(type, "|", \ 5331abe9b8aSliubo { BTRFS_BLOCK_GROUP_DATA, "DATA" }, \ 5341abe9b8aSliubo { BTRFS_BLOCK_GROUP_SYSTEM, "SYSTEM"}, \ 5351abe9b8aSliubo { BTRFS_BLOCK_GROUP_METADATA, "METADATA"}, \ 5361abe9b8aSliubo { BTRFS_BLOCK_GROUP_RAID0, "RAID0" }, \ 5371abe9b8aSliubo { BTRFS_BLOCK_GROUP_RAID1, "RAID1" }, \ 5381abe9b8aSliubo { BTRFS_BLOCK_GROUP_DUP, "DUP" }, \ 5391abe9b8aSliubo { BTRFS_BLOCK_GROUP_RAID10, "RAID10"}) 5401abe9b8aSliubo 5411abe9b8aSliubo DECLARE_EVENT_CLASS(btrfs__chunk, 5421abe9b8aSliubo 5431abe9b8aSliubo TP_PROTO(struct btrfs_root *root, struct map_lookup *map, 5441abe9b8aSliubo u64 offset, u64 size), 5451abe9b8aSliubo 5461abe9b8aSliubo TP_ARGS(root, map, offset, size), 5471abe9b8aSliubo 5481abe9b8aSliubo TP_STRUCT__entry( 5491abe9b8aSliubo __field( int, num_stripes ) 5501abe9b8aSliubo __field( u64, type ) 5511abe9b8aSliubo __field( int, sub_stripes ) 5521abe9b8aSliubo __field( u64, offset ) 5531abe9b8aSliubo __field( u64, size ) 5541abe9b8aSliubo __field( u64, root_objectid ) 5551abe9b8aSliubo ), 5561abe9b8aSliubo 5571abe9b8aSliubo TP_fast_assign( 5581abe9b8aSliubo __entry->num_stripes = map->num_stripes; 5591abe9b8aSliubo __entry->type = map->type; 5601abe9b8aSliubo __entry->sub_stripes = map->sub_stripes; 5611abe9b8aSliubo __entry->offset = offset; 5621abe9b8aSliubo __entry->size = size; 5631abe9b8aSliubo __entry->root_objectid = root->root_key.objectid; 5641abe9b8aSliubo ), 5651abe9b8aSliubo 5661abe9b8aSliubo TP_printk("root = %llu(%s), offset = %llu, size = %llu, " 5671abe9b8aSliubo "num_stripes = %d, sub_stripes = %d, type = %s", 5681abe9b8aSliubo show_root_type(__entry->root_objectid), 5691abe9b8aSliubo (unsigned long long)__entry->offset, 5701abe9b8aSliubo (unsigned long long)__entry->size, 5711abe9b8aSliubo __entry->num_stripes, __entry->sub_stripes, 5721abe9b8aSliubo show_chunk_type(__entry->type)) 5731abe9b8aSliubo ); 5741abe9b8aSliubo 5751abe9b8aSliubo DEFINE_EVENT(btrfs__chunk, btrfs_chunk_alloc, 5761abe9b8aSliubo 5771abe9b8aSliubo TP_PROTO(struct btrfs_root *root, struct map_lookup *map, 5781abe9b8aSliubo u64 offset, u64 size), 5791abe9b8aSliubo 5801abe9b8aSliubo TP_ARGS(root, map, offset, size) 5811abe9b8aSliubo ); 5821abe9b8aSliubo 5831abe9b8aSliubo DEFINE_EVENT(btrfs__chunk, btrfs_chunk_free, 5841abe9b8aSliubo 5851abe9b8aSliubo TP_PROTO(struct btrfs_root *root, struct map_lookup *map, 5861abe9b8aSliubo u64 offset, u64 size), 5871abe9b8aSliubo 5881abe9b8aSliubo TP_ARGS(root, map, offset, size) 5891abe9b8aSliubo ); 5901abe9b8aSliubo 5911abe9b8aSliubo TRACE_EVENT(btrfs_cow_block, 5921abe9b8aSliubo 5931abe9b8aSliubo TP_PROTO(struct btrfs_root *root, struct extent_buffer *buf, 5941abe9b8aSliubo struct extent_buffer *cow), 5951abe9b8aSliubo 5961abe9b8aSliubo TP_ARGS(root, buf, cow), 5971abe9b8aSliubo 5981abe9b8aSliubo TP_STRUCT__entry( 5991abe9b8aSliubo __field( u64, root_objectid ) 6001abe9b8aSliubo __field( u64, buf_start ) 6011abe9b8aSliubo __field( int, refs ) 6021abe9b8aSliubo __field( u64, cow_start ) 6031abe9b8aSliubo __field( int, buf_level ) 6041abe9b8aSliubo __field( int, cow_level ) 6051abe9b8aSliubo ), 6061abe9b8aSliubo 6071abe9b8aSliubo TP_fast_assign( 6081abe9b8aSliubo __entry->root_objectid = root->root_key.objectid; 6091abe9b8aSliubo __entry->buf_start = buf->start; 6101abe9b8aSliubo __entry->refs = atomic_read(&buf->refs); 6111abe9b8aSliubo __entry->cow_start = cow->start; 6121abe9b8aSliubo __entry->buf_level = btrfs_header_level(buf); 6131abe9b8aSliubo __entry->cow_level = btrfs_header_level(cow); 6141abe9b8aSliubo ), 6151abe9b8aSliubo 6161abe9b8aSliubo TP_printk("root = %llu(%s), refs = %d, orig_buf = %llu " 6171abe9b8aSliubo "(orig_level = %d), cow_buf = %llu (cow_level = %d)", 6181abe9b8aSliubo show_root_type(__entry->root_objectid), 6191abe9b8aSliubo __entry->refs, 6201abe9b8aSliubo (unsigned long long)__entry->buf_start, 6211abe9b8aSliubo __entry->buf_level, 6221abe9b8aSliubo (unsigned long long)__entry->cow_start, 6231abe9b8aSliubo __entry->cow_level) 6241abe9b8aSliubo ); 6251abe9b8aSliubo 6261abe9b8aSliubo DECLARE_EVENT_CLASS(btrfs__reserved_extent, 6271abe9b8aSliubo 6281abe9b8aSliubo TP_PROTO(struct btrfs_root *root, u64 start, u64 len), 6291abe9b8aSliubo 6301abe9b8aSliubo TP_ARGS(root, start, len), 6311abe9b8aSliubo 6321abe9b8aSliubo TP_STRUCT__entry( 6331abe9b8aSliubo __field( u64, root_objectid ) 6341abe9b8aSliubo __field( u64, start ) 6351abe9b8aSliubo __field( u64, len ) 6361abe9b8aSliubo ), 6371abe9b8aSliubo 6381abe9b8aSliubo TP_fast_assign( 6391abe9b8aSliubo __entry->root_objectid = root->root_key.objectid; 6401abe9b8aSliubo __entry->start = start; 6411abe9b8aSliubo __entry->len = len; 6421abe9b8aSliubo ), 6431abe9b8aSliubo 6441abe9b8aSliubo TP_printk("root = %llu(%s), start = %llu, len = %llu", 6451abe9b8aSliubo show_root_type(__entry->root_objectid), 6461abe9b8aSliubo (unsigned long long)__entry->start, 6471abe9b8aSliubo (unsigned long long)__entry->len) 6481abe9b8aSliubo ); 6491abe9b8aSliubo 6501abe9b8aSliubo DEFINE_EVENT(btrfs__reserved_extent, btrfs_reserved_extent_alloc, 6511abe9b8aSliubo 6521abe9b8aSliubo TP_PROTO(struct btrfs_root *root, u64 start, u64 len), 6531abe9b8aSliubo 6541abe9b8aSliubo TP_ARGS(root, start, len) 6551abe9b8aSliubo ); 6561abe9b8aSliubo 6571abe9b8aSliubo DEFINE_EVENT(btrfs__reserved_extent, btrfs_reserved_extent_free, 6581abe9b8aSliubo 6591abe9b8aSliubo TP_PROTO(struct btrfs_root *root, u64 start, u64 len), 6601abe9b8aSliubo 6611abe9b8aSliubo TP_ARGS(root, start, len) 6621abe9b8aSliubo ); 6631abe9b8aSliubo 6641abe9b8aSliubo #endif /* _TRACE_BTRFS_H */ 6651abe9b8aSliubo 6661abe9b8aSliubo /* This part must be outside protection */ 6671abe9b8aSliubo #include <trace/define_trace.h> 668