Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 #undef TRACE_SYSTEM
0003 #define TRACE_SYSTEM btrfs
0004 
0005 #if !defined(_TRACE_BTRFS_H) || defined(TRACE_HEADER_MULTI_READ)
0006 #define _TRACE_BTRFS_H
0007 
0008 #include <linux/writeback.h>
0009 #include <linux/tracepoint.h>
0010 #include <trace/events/mmflags.h>
0011 
0012 struct btrfs_root;
0013 struct btrfs_fs_info;
0014 struct btrfs_inode;
0015 struct extent_map;
0016 struct btrfs_file_extent_item;
0017 struct btrfs_ordered_extent;
0018 struct btrfs_delayed_ref_node;
0019 struct btrfs_delayed_tree_ref;
0020 struct btrfs_delayed_data_ref;
0021 struct btrfs_delayed_ref_head;
0022 struct btrfs_block_group;
0023 struct btrfs_free_cluster;
0024 struct map_lookup;
0025 struct extent_buffer;
0026 struct btrfs_work;
0027 struct btrfs_workqueue;
0028 struct btrfs_qgroup_extent_record;
0029 struct btrfs_qgroup;
0030 struct extent_io_tree;
0031 struct prelim_ref;
0032 struct btrfs_space_info;
0033 struct btrfs_raid_bio;
0034 struct raid56_bio_trace_info;
0035 
0036 #define show_ref_type(type)                     \
0037     __print_symbolic(type,                      \
0038         { BTRFS_TREE_BLOCK_REF_KEY,     "TREE_BLOCK_REF" }, \
0039         { BTRFS_EXTENT_DATA_REF_KEY,    "EXTENT_DATA_REF" },    \
0040         { BTRFS_EXTENT_REF_V0_KEY,  "EXTENT_REF_V0" },  \
0041         { BTRFS_SHARED_BLOCK_REF_KEY,   "SHARED_BLOCK_REF" },   \
0042         { BTRFS_SHARED_DATA_REF_KEY,    "SHARED_DATA_REF" })
0043 
0044 #define __show_root_type(obj)                       \
0045     __print_symbolic_u64(obj,                   \
0046         { BTRFS_ROOT_TREE_OBJECTID,     "ROOT_TREE" },  \
0047         { BTRFS_EXTENT_TREE_OBJECTID,   "EXTENT_TREE"   },  \
0048         { BTRFS_CHUNK_TREE_OBJECTID,    "CHUNK_TREE"    },  \
0049         { BTRFS_DEV_TREE_OBJECTID,  "DEV_TREE"  },  \
0050         { BTRFS_FS_TREE_OBJECTID,   "FS_TREE"   },  \
0051         { BTRFS_ROOT_TREE_DIR_OBJECTID, "ROOT_TREE_DIR" },  \
0052         { BTRFS_CSUM_TREE_OBJECTID,     "CSUM_TREE" },  \
0053         { BTRFS_TREE_LOG_OBJECTID,  "TREE_LOG"  },  \
0054         { BTRFS_QUOTA_TREE_OBJECTID,    "QUOTA_TREE"    },  \
0055         { BTRFS_TREE_RELOC_OBJECTID,    "TREE_RELOC"    },  \
0056         { BTRFS_UUID_TREE_OBJECTID, "UUID_TREE" },  \
0057         { BTRFS_FREE_SPACE_TREE_OBJECTID, "FREE_SPACE_TREE" },  \
0058         { BTRFS_BLOCK_GROUP_TREE_OBJECTID, "BLOCK_GROUP_TREE" },\
0059         { BTRFS_DATA_RELOC_TREE_OBJECTID, "DATA_RELOC_TREE" })
0060 
0061 #define show_root_type(obj)                     \
0062     obj, ((obj >= BTRFS_DATA_RELOC_TREE_OBJECTID) ||        \
0063           (obj >= BTRFS_ROOT_TREE_OBJECTID &&           \
0064            obj <= BTRFS_QUOTA_TREE_OBJECTID)) ? __show_root_type(obj) : "-"
0065 
0066 #define FLUSH_ACTIONS                               \
0067     EM( BTRFS_RESERVE_NO_FLUSH,     "BTRFS_RESERVE_NO_FLUSH")   \
0068     EM( BTRFS_RESERVE_FLUSH_LIMIT,      "BTRFS_RESERVE_FLUSH_LIMIT")    \
0069     EM( BTRFS_RESERVE_FLUSH_ALL,        "BTRFS_RESERVE_FLUSH_ALL")  \
0070     EMe(BTRFS_RESERVE_FLUSH_ALL_STEAL,  "BTRFS_RESERVE_FLUSH_ALL_STEAL")
0071 
0072 #define FI_TYPES                            \
0073     EM( BTRFS_FILE_EXTENT_INLINE,       "INLINE")       \
0074     EM( BTRFS_FILE_EXTENT_REG,      "REG")          \
0075     EMe(BTRFS_FILE_EXTENT_PREALLOC,     "PREALLOC")
0076 
0077 #define QGROUP_RSV_TYPES                        \
0078     EM( BTRFS_QGROUP_RSV_DATA,      "DATA")         \
0079     EM( BTRFS_QGROUP_RSV_META_PERTRANS, "META_PERTRANS")    \
0080     EMe(BTRFS_QGROUP_RSV_META_PREALLOC, "META_PREALLOC")
0081 
0082 #define IO_TREE_OWNER                           \
0083     EM( IO_TREE_FS_PINNED_EXTENTS,    "PINNED_EXTENTS")     \
0084     EM( IO_TREE_FS_EXCLUDED_EXTENTS,  "EXCLUDED_EXTENTS")       \
0085     EM( IO_TREE_BTREE_INODE_IO,   "BTREE_INODE_IO")     \
0086     EM( IO_TREE_INODE_IO,         "INODE_IO")           \
0087     EM( IO_TREE_INODE_IO_FAILURE,     "INODE_IO_FAILURE")       \
0088     EM( IO_TREE_RELOC_BLOCKS,     "RELOC_BLOCKS")       \
0089     EM( IO_TREE_TRANS_DIRTY_PAGES,    "TRANS_DIRTY_PAGES")      \
0090     EM( IO_TREE_ROOT_DIRTY_LOG_PAGES, "ROOT_DIRTY_LOG_PAGES")   \
0091     EM( IO_TREE_INODE_FILE_EXTENT,    "INODE_FILE_EXTENT")      \
0092     EM( IO_TREE_LOG_CSUM_RANGE,   "LOG_CSUM_RANGE")         \
0093     EMe(IO_TREE_SELFTEST,         "SELFTEST")
0094 
0095 #define FLUSH_STATES                            \
0096     EM( FLUSH_DELAYED_ITEMS_NR, "FLUSH_DELAYED_ITEMS_NR")   \
0097     EM( FLUSH_DELAYED_ITEMS,    "FLUSH_DELAYED_ITEMS")      \
0098     EM( FLUSH_DELALLOC,     "FLUSH_DELALLOC")       \
0099     EM( FLUSH_DELALLOC_WAIT,    "FLUSH_DELALLOC_WAIT")      \
0100     EM( FLUSH_DELALLOC_FULL,    "FLUSH_DELALLOC_FULL")      \
0101     EM( FLUSH_DELAYED_REFS_NR,  "FLUSH_DELAYED_REFS_NR")    \
0102     EM( FLUSH_DELAYED_REFS,     "FLUSH_ELAYED_REFS")        \
0103     EM( ALLOC_CHUNK,        "ALLOC_CHUNK")          \
0104     EM( ALLOC_CHUNK_FORCE,      "ALLOC_CHUNK_FORCE")        \
0105     EM( RUN_DELAYED_IPUTS,      "RUN_DELAYED_IPUTS")        \
0106     EMe(COMMIT_TRANS,       "COMMIT_TRANS")
0107 
0108 /*
0109  * First define the enums in the above macros to be exported to userspace via
0110  * TRACE_DEFINE_ENUM().
0111  */
0112 
0113 #undef EM
0114 #undef EMe
0115 #define EM(a, b)    TRACE_DEFINE_ENUM(a);
0116 #define EMe(a, b)   TRACE_DEFINE_ENUM(a);
0117 
0118 FLUSH_ACTIONS
0119 FI_TYPES
0120 QGROUP_RSV_TYPES
0121 IO_TREE_OWNER
0122 FLUSH_STATES
0123 
0124 /*
0125  * Now redefine the EM and EMe macros to map the enums to the strings that will
0126  * be printed in the output
0127  */
0128 
0129 #undef EM
0130 #undef EMe
0131 #define EM(a, b)        {a, b},
0132 #define EMe(a, b)       {a, b}
0133 
0134 
0135 #define BTRFS_GROUP_FLAGS   \
0136     { BTRFS_BLOCK_GROUP_DATA,   "DATA"},    \
0137     { BTRFS_BLOCK_GROUP_SYSTEM, "SYSTEM"},  \
0138     { BTRFS_BLOCK_GROUP_METADATA,   "METADATA"},    \
0139     { BTRFS_BLOCK_GROUP_RAID0,  "RAID0"},   \
0140     { BTRFS_BLOCK_GROUP_RAID1,  "RAID1"},   \
0141     { BTRFS_BLOCK_GROUP_DUP,    "DUP"},     \
0142     { BTRFS_BLOCK_GROUP_RAID10, "RAID10"},  \
0143     { BTRFS_BLOCK_GROUP_RAID5,  "RAID5"},   \
0144     { BTRFS_BLOCK_GROUP_RAID6,  "RAID6"}
0145 
0146 #define EXTENT_FLAGS                        \
0147     { EXTENT_DIRTY,         "DIRTY"},       \
0148     { EXTENT_UPTODATE,      "UPTODATE"},        \
0149     { EXTENT_LOCKED,        "LOCKED"},      \
0150     { EXTENT_NEW,           "NEW"},         \
0151     { EXTENT_DELALLOC,      "DELALLOC"},        \
0152     { EXTENT_DEFRAG,        "DEFRAG"},      \
0153     { EXTENT_BOUNDARY,      "BOUNDARY"},        \
0154     { EXTENT_NODATASUM,     "NODATASUM"},       \
0155     { EXTENT_CLEAR_META_RESV,   "CLEAR_META_RESV"}, \
0156     { EXTENT_NEED_WAIT,     "NEED_WAIT"},       \
0157     { EXTENT_DAMAGED,       "DAMAGED"},     \
0158     { EXTENT_NORESERVE,     "NORESERVE"},       \
0159     { EXTENT_QGROUP_RESERVED,   "QGROUP_RESERVED"}, \
0160     { EXTENT_CLEAR_DATA_RESV,   "CLEAR_DATA_RESV"}, \
0161     { EXTENT_DELALLOC_NEW,      "DELALLOC_NEW"}
0162 
0163 #define BTRFS_FSID_SIZE 16
0164 #define TP_STRUCT__entry_fsid __array(u8, fsid, BTRFS_FSID_SIZE)
0165 
0166 #define TP_fast_assign_fsid(fs_info)                    \
0167 ({                                  \
0168     if (fs_info)                            \
0169         memcpy(__entry->fsid, fs_info->fs_devices->fsid,    \
0170                BTRFS_FSID_SIZE);                \
0171     else                                \
0172         memset(__entry->fsid, 0, BTRFS_FSID_SIZE);      \
0173 })
0174 
0175 #define TP_STRUCT__entry_btrfs(args...)                 \
0176     TP_STRUCT__entry(                       \
0177         TP_STRUCT__entry_fsid                   \
0178         args)
0179 #define TP_fast_assign_btrfs(fs_info, args...)              \
0180     TP_fast_assign(                         \
0181         TP_fast_assign_fsid(fs_info);               \
0182         args)
0183 #define TP_printk_btrfs(fmt, args...) \
0184     TP_printk("%pU: " fmt, __entry->fsid, args)
0185 
0186 TRACE_EVENT(btrfs_transaction_commit,
0187 
0188     TP_PROTO(const struct btrfs_fs_info *fs_info),
0189 
0190     TP_ARGS(fs_info),
0191 
0192     TP_STRUCT__entry_btrfs(
0193         __field(    u64,  generation        )
0194         __field(    u64,  root_objectid     )
0195     ),
0196 
0197     TP_fast_assign_btrfs(fs_info,
0198         __entry->generation = fs_info->generation;
0199         __entry->root_objectid  = BTRFS_ROOT_TREE_OBJECTID;
0200     ),
0201 
0202     TP_printk_btrfs("root=%llu(%s) gen=%llu",
0203           show_root_type(__entry->root_objectid),
0204           __entry->generation)
0205 );
0206 
0207 DECLARE_EVENT_CLASS(btrfs__inode,
0208 
0209     TP_PROTO(const struct inode *inode),
0210 
0211     TP_ARGS(inode),
0212 
0213     TP_STRUCT__entry_btrfs(
0214         __field(    u64,  ino           )
0215         __field(    u64,  blocks            )
0216         __field(    u64,  disk_i_size       )
0217         __field(    u64,  generation        )
0218         __field(    u64,  last_trans        )
0219         __field(    u64,  logged_trans      )
0220         __field(    u64,  root_objectid     )
0221     ),
0222 
0223     TP_fast_assign_btrfs(btrfs_sb(inode->i_sb),
0224         __entry->ino    = btrfs_ino(BTRFS_I(inode));
0225         __entry->blocks = inode->i_blocks;
0226         __entry->disk_i_size  = BTRFS_I(inode)->disk_i_size;
0227         __entry->generation = BTRFS_I(inode)->generation;
0228         __entry->last_trans = BTRFS_I(inode)->last_trans;
0229         __entry->logged_trans = BTRFS_I(inode)->logged_trans;
0230         __entry->root_objectid =
0231                 BTRFS_I(inode)->root->root_key.objectid;
0232     ),
0233 
0234     TP_printk_btrfs("root=%llu(%s) gen=%llu ino=%llu blocks=%llu "
0235           "disk_i_size=%llu last_trans=%llu logged_trans=%llu",
0236           show_root_type(__entry->root_objectid),
0237           __entry->generation,
0238           __entry->ino,
0239           __entry->blocks,
0240           __entry->disk_i_size,
0241           __entry->last_trans,
0242           __entry->logged_trans)
0243 );
0244 
0245 DEFINE_EVENT(btrfs__inode, btrfs_inode_new,
0246 
0247     TP_PROTO(const struct inode *inode),
0248 
0249     TP_ARGS(inode)
0250 );
0251 
0252 DEFINE_EVENT(btrfs__inode, btrfs_inode_request,
0253 
0254     TP_PROTO(const struct inode *inode),
0255 
0256     TP_ARGS(inode)
0257 );
0258 
0259 DEFINE_EVENT(btrfs__inode, btrfs_inode_evict,
0260 
0261     TP_PROTO(const struct inode *inode),
0262 
0263     TP_ARGS(inode)
0264 );
0265 
0266 #define __show_map_type(type)                       \
0267     __print_symbolic_u64(type,                  \
0268         { EXTENT_MAP_LAST_BYTE, "LAST_BYTE"     },      \
0269         { EXTENT_MAP_HOLE,  "HOLE"      },      \
0270         { EXTENT_MAP_INLINE,    "INLINE"    },      \
0271         { EXTENT_MAP_DELALLOC,  "DELALLOC"  })
0272 
0273 #define show_map_type(type)         \
0274     type, (type >= EXTENT_MAP_LAST_BYTE) ? "-" :  __show_map_type(type)
0275 
0276 #define show_map_flags(flag)                        \
0277     __print_flags(flag, "|",                    \
0278         { (1 << EXTENT_FLAG_PINNED),        "PINNED"    },\
0279         { (1 << EXTENT_FLAG_COMPRESSED),    "COMPRESSED"    },\
0280         { (1 << EXTENT_FLAG_PREALLOC),      "PREALLOC"  },\
0281         { (1 << EXTENT_FLAG_LOGGING),       "LOGGING"   },\
0282         { (1 << EXTENT_FLAG_FILLING),       "FILLING"   },\
0283         { (1 << EXTENT_FLAG_FS_MAPPING),    "FS_MAPPING"    })
0284 
0285 TRACE_EVENT_CONDITION(btrfs_get_extent,
0286 
0287     TP_PROTO(const struct btrfs_root *root, const struct btrfs_inode *inode,
0288          const struct extent_map *map),
0289 
0290     TP_ARGS(root, inode, map),
0291 
0292     TP_CONDITION(map),
0293 
0294     TP_STRUCT__entry_btrfs(
0295         __field(    u64,  root_objectid )
0296         __field(    u64,  ino       )
0297         __field(    u64,  start     )
0298         __field(    u64,  len       )
0299         __field(    u64,  orig_start    )
0300         __field(    u64,  block_start   )
0301         __field(    u64,  block_len     )
0302         __field(    unsigned long,  flags   )
0303         __field(    int,  refs      )
0304         __field(    unsigned int,  compress_type    )
0305     ),
0306 
0307     TP_fast_assign_btrfs(root->fs_info,
0308         __entry->root_objectid  = root->root_key.objectid;
0309         __entry->ino        = btrfs_ino(inode);
0310         __entry->start      = map->start;
0311         __entry->len        = map->len;
0312         __entry->orig_start = map->orig_start;
0313         __entry->block_start    = map->block_start;
0314         __entry->block_len  = map->block_len;
0315         __entry->flags      = map->flags;
0316         __entry->refs       = refcount_read(&map->refs);
0317         __entry->compress_type  = map->compress_type;
0318     ),
0319 
0320     TP_printk_btrfs("root=%llu(%s) ino=%llu start=%llu len=%llu "
0321           "orig_start=%llu block_start=%llu(%s) "
0322           "block_len=%llu flags=%s refs=%u "
0323           "compress_type=%u",
0324           show_root_type(__entry->root_objectid),
0325           __entry->ino,
0326           __entry->start,
0327           __entry->len,
0328           __entry->orig_start,
0329           show_map_type(__entry->block_start),
0330           __entry->block_len,
0331           show_map_flags(__entry->flags),
0332           __entry->refs, __entry->compress_type)
0333 );
0334 
0335 TRACE_EVENT(btrfs_handle_em_exist,
0336 
0337     TP_PROTO(const struct btrfs_fs_info *fs_info,
0338         const struct extent_map *existing, const struct extent_map *map,
0339         u64 start, u64 len),
0340 
0341     TP_ARGS(fs_info, existing, map, start, len),
0342 
0343     TP_STRUCT__entry_btrfs(
0344         __field(    u64,  e_start       )
0345         __field(    u64,  e_len     )
0346         __field(    u64,  map_start     )
0347         __field(    u64,  map_len       )
0348         __field(    u64,  start     )
0349         __field(    u64,  len       )
0350     ),
0351 
0352     TP_fast_assign_btrfs(fs_info,
0353         __entry->e_start    = existing->start;
0354         __entry->e_len      = existing->len;
0355         __entry->map_start  = map->start;
0356         __entry->map_len    = map->len;
0357         __entry->start      = start;
0358         __entry->len        = len;
0359     ),
0360 
0361     TP_printk_btrfs("start=%llu len=%llu "
0362           "existing(start=%llu len=%llu) "
0363           "em(start=%llu len=%llu)",
0364           __entry->start,
0365           __entry->len,
0366           __entry->e_start,
0367           __entry->e_len,
0368           __entry->map_start,
0369           __entry->map_len)
0370 );
0371 
0372 /* file extent item */
0373 DECLARE_EVENT_CLASS(btrfs__file_extent_item_regular,
0374 
0375     TP_PROTO(const struct btrfs_inode *bi, const struct extent_buffer *l,
0376          const struct btrfs_file_extent_item *fi, u64 start),
0377 
0378     TP_ARGS(bi, l, fi, start),
0379 
0380     TP_STRUCT__entry_btrfs(
0381         __field(    u64,    root_obj    )
0382         __field(    u64,    ino     )
0383         __field(    loff_t, isize       )
0384         __field(    u64,    disk_isize  )
0385         __field(    u64,    num_bytes   )
0386         __field(    u64,    ram_bytes   )
0387         __field(    u64,    disk_bytenr )
0388         __field(    u64,    disk_num_bytes  )
0389         __field(    u64,    extent_offset   )
0390         __field(    u8, extent_type )
0391         __field(    u8, compression )
0392         __field(    u64,    extent_start    )
0393         __field(    u64,    extent_end  )
0394     ),
0395 
0396     TP_fast_assign_btrfs(bi->root->fs_info,
0397         __entry->root_obj   = bi->root->root_key.objectid;
0398         __entry->ino        = btrfs_ino(bi);
0399         __entry->isize      = bi->vfs_inode.i_size;
0400         __entry->disk_isize = bi->disk_i_size;
0401         __entry->num_bytes  = btrfs_file_extent_num_bytes(l, fi);
0402         __entry->ram_bytes  = btrfs_file_extent_ram_bytes(l, fi);
0403         __entry->disk_bytenr    = btrfs_file_extent_disk_bytenr(l, fi);
0404         __entry->disk_num_bytes = btrfs_file_extent_disk_num_bytes(l, fi);
0405         __entry->extent_offset  = btrfs_file_extent_offset(l, fi);
0406         __entry->extent_type    = btrfs_file_extent_type(l, fi);
0407         __entry->compression    = btrfs_file_extent_compression(l, fi);
0408         __entry->extent_start   = start;
0409         __entry->extent_end = (start + __entry->num_bytes);
0410     ),
0411 
0412     TP_printk_btrfs(
0413         "root=%llu(%s) inode=%llu size=%llu disk_isize=%llu "
0414         "file extent range=[%llu %llu] "
0415         "(num_bytes=%llu ram_bytes=%llu disk_bytenr=%llu "
0416         "disk_num_bytes=%llu extent_offset=%llu type=%s "
0417         "compression=%u",
0418         show_root_type(__entry->root_obj), __entry->ino,
0419         __entry->isize,
0420         __entry->disk_isize, __entry->extent_start,
0421         __entry->extent_end, __entry->num_bytes, __entry->ram_bytes,
0422         __entry->disk_bytenr, __entry->disk_num_bytes,
0423         __entry->extent_offset, __print_symbolic(__entry->extent_type, FI_TYPES),
0424         __entry->compression)
0425 );
0426 
0427 DECLARE_EVENT_CLASS(
0428     btrfs__file_extent_item_inline,
0429 
0430     TP_PROTO(const struct btrfs_inode *bi, const struct extent_buffer *l,
0431          const struct btrfs_file_extent_item *fi, int slot, u64 start),
0432 
0433     TP_ARGS(bi, l, fi, slot,  start),
0434 
0435     TP_STRUCT__entry_btrfs(
0436         __field(    u64,    root_obj    )
0437         __field(    u64,    ino     )
0438         __field(    loff_t, isize       )
0439         __field(    u64,    disk_isize  )
0440         __field(    u8, extent_type )
0441         __field(    u8, compression )
0442         __field(    u64,    extent_start    )
0443         __field(    u64,    extent_end  )
0444     ),
0445 
0446     TP_fast_assign_btrfs(
0447         bi->root->fs_info,
0448         __entry->root_obj   = bi->root->root_key.objectid;
0449         __entry->ino        = btrfs_ino(bi);
0450         __entry->isize      = bi->vfs_inode.i_size;
0451         __entry->disk_isize = bi->disk_i_size;
0452         __entry->extent_type    = btrfs_file_extent_type(l, fi);
0453         __entry->compression    = btrfs_file_extent_compression(l, fi);
0454         __entry->extent_start   = start;
0455         __entry->extent_end = (start + btrfs_file_extent_ram_bytes(l, fi));
0456     ),
0457 
0458     TP_printk_btrfs(
0459         "root=%llu(%s) inode=%llu size=%llu disk_isize=%llu "
0460         "file extent range=[%llu %llu] "
0461         "extent_type=%s compression=%u",
0462         show_root_type(__entry->root_obj), __entry->ino, __entry->isize,
0463         __entry->disk_isize, __entry->extent_start,
0464         __entry->extent_end, __print_symbolic(__entry->extent_type, FI_TYPES),
0465         __entry->compression)
0466 );
0467 
0468 DEFINE_EVENT(
0469     btrfs__file_extent_item_regular, btrfs_get_extent_show_fi_regular,
0470 
0471     TP_PROTO(const struct btrfs_inode *bi, const struct extent_buffer *l,
0472          const struct btrfs_file_extent_item *fi, u64 start),
0473 
0474     TP_ARGS(bi, l, fi, start)
0475 );
0476 
0477 DEFINE_EVENT(
0478     btrfs__file_extent_item_regular, btrfs_truncate_show_fi_regular,
0479 
0480     TP_PROTO(const struct btrfs_inode *bi, const struct extent_buffer *l,
0481          const struct btrfs_file_extent_item *fi, u64 start),
0482 
0483     TP_ARGS(bi, l, fi, start)
0484 );
0485 
0486 DEFINE_EVENT(
0487     btrfs__file_extent_item_inline, btrfs_get_extent_show_fi_inline,
0488 
0489     TP_PROTO(const struct btrfs_inode *bi, const struct extent_buffer *l,
0490          const struct btrfs_file_extent_item *fi, int slot, u64 start),
0491 
0492     TP_ARGS(bi, l, fi, slot, start)
0493 );
0494 
0495 DEFINE_EVENT(
0496     btrfs__file_extent_item_inline, btrfs_truncate_show_fi_inline,
0497 
0498     TP_PROTO(const struct btrfs_inode *bi, const struct extent_buffer *l,
0499          const struct btrfs_file_extent_item *fi, int slot, u64 start),
0500 
0501     TP_ARGS(bi, l, fi, slot, start)
0502 );
0503 
0504 #define show_ordered_flags(flags)                      \
0505     __print_flags(flags, "|",                      \
0506         { (1 << BTRFS_ORDERED_REGULAR),     "REGULAR"   }, \
0507         { (1 << BTRFS_ORDERED_NOCOW),       "NOCOW"     }, \
0508         { (1 << BTRFS_ORDERED_PREALLOC),    "PREALLOC"  }, \
0509         { (1 << BTRFS_ORDERED_COMPRESSED),  "COMPRESSED"    }, \
0510         { (1 << BTRFS_ORDERED_DIRECT),      "DIRECT"    }, \
0511         { (1 << BTRFS_ORDERED_IO_DONE),     "IO_DONE"   }, \
0512         { (1 << BTRFS_ORDERED_COMPLETE),    "COMPLETE"  }, \
0513         { (1 << BTRFS_ORDERED_IOERR),       "IOERR"     }, \
0514         { (1 << BTRFS_ORDERED_TRUNCATED),   "TRUNCATED" })
0515 
0516 
0517 DECLARE_EVENT_CLASS(btrfs__ordered_extent,
0518 
0519     TP_PROTO(const struct btrfs_inode *inode,
0520          const struct btrfs_ordered_extent *ordered),
0521 
0522     TP_ARGS(inode, ordered),
0523 
0524     TP_STRUCT__entry_btrfs(
0525         __field(    u64,  ino       )
0526         __field(    u64,  file_offset   )
0527         __field(    u64,  start     )
0528         __field(    u64,  len       )
0529         __field(    u64,  disk_len      )
0530         __field(    u64,  bytes_left    )
0531         __field(    unsigned long,  flags   )
0532         __field(    int,  compress_type )
0533         __field(    int,  refs      )
0534         __field(    u64,  root_objectid )
0535         __field(    u64,  truncated_len )
0536     ),
0537 
0538     TP_fast_assign_btrfs(inode->root->fs_info,
0539         __entry->ino        = btrfs_ino(inode);
0540         __entry->file_offset    = ordered->file_offset;
0541         __entry->start      = ordered->disk_bytenr;
0542         __entry->len        = ordered->num_bytes;
0543         __entry->disk_len   = ordered->disk_num_bytes;
0544         __entry->bytes_left = ordered->bytes_left;
0545         __entry->flags      = ordered->flags;
0546         __entry->compress_type  = ordered->compress_type;
0547         __entry->refs       = refcount_read(&ordered->refs);
0548         __entry->root_objectid  = inode->root->root_key.objectid;
0549         __entry->truncated_len  = ordered->truncated_len;
0550     ),
0551 
0552     TP_printk_btrfs("root=%llu(%s) ino=%llu file_offset=%llu "
0553           "start=%llu len=%llu disk_len=%llu "
0554           "truncated_len=%llu "
0555           "bytes_left=%llu flags=%s compress_type=%d "
0556           "refs=%d",
0557           show_root_type(__entry->root_objectid),
0558           __entry->ino,
0559           __entry->file_offset,
0560           __entry->start,
0561           __entry->len,
0562           __entry->disk_len,
0563           __entry->truncated_len,
0564           __entry->bytes_left,
0565           show_ordered_flags(__entry->flags),
0566           __entry->compress_type, __entry->refs)
0567 );
0568 
0569 DEFINE_EVENT(btrfs__ordered_extent, btrfs_ordered_extent_add,
0570 
0571     TP_PROTO(const struct btrfs_inode *inode,
0572          const struct btrfs_ordered_extent *ordered),
0573 
0574     TP_ARGS(inode, ordered)
0575 );
0576 
0577 DEFINE_EVENT(btrfs__ordered_extent, btrfs_ordered_extent_remove,
0578 
0579     TP_PROTO(const struct btrfs_inode *inode,
0580          const struct btrfs_ordered_extent *ordered),
0581 
0582     TP_ARGS(inode, ordered)
0583 );
0584 
0585 DEFINE_EVENT(btrfs__ordered_extent, btrfs_ordered_extent_start,
0586 
0587     TP_PROTO(const struct btrfs_inode *inode,
0588          const struct btrfs_ordered_extent *ordered),
0589 
0590     TP_ARGS(inode, ordered)
0591 );
0592 
0593 DEFINE_EVENT(btrfs__ordered_extent, btrfs_ordered_extent_put,
0594 
0595     TP_PROTO(const struct btrfs_inode *inode,
0596          const struct btrfs_ordered_extent *ordered),
0597 
0598     TP_ARGS(inode, ordered)
0599 );
0600 
0601 DEFINE_EVENT(btrfs__ordered_extent, btrfs_ordered_extent_lookup,
0602 
0603          TP_PROTO(const struct btrfs_inode *inode,
0604               const struct btrfs_ordered_extent *ordered),
0605 
0606          TP_ARGS(inode, ordered)
0607 );
0608 
0609 DEFINE_EVENT(btrfs__ordered_extent, btrfs_ordered_extent_lookup_range,
0610 
0611          TP_PROTO(const struct btrfs_inode *inode,
0612               const struct btrfs_ordered_extent *ordered),
0613 
0614          TP_ARGS(inode, ordered)
0615 );
0616 
0617 DEFINE_EVENT(btrfs__ordered_extent, btrfs_ordered_extent_lookup_first_range,
0618 
0619          TP_PROTO(const struct btrfs_inode *inode,
0620               const struct btrfs_ordered_extent *ordered),
0621 
0622          TP_ARGS(inode, ordered)
0623 );
0624 
0625 DEFINE_EVENT(btrfs__ordered_extent, btrfs_ordered_extent_lookup_for_logging,
0626 
0627          TP_PROTO(const struct btrfs_inode *inode,
0628               const struct btrfs_ordered_extent *ordered),
0629 
0630          TP_ARGS(inode, ordered)
0631 );
0632 
0633 DEFINE_EVENT(btrfs__ordered_extent, btrfs_ordered_extent_lookup_first,
0634 
0635          TP_PROTO(const struct btrfs_inode *inode,
0636               const struct btrfs_ordered_extent *ordered),
0637 
0638          TP_ARGS(inode, ordered)
0639 );
0640 
0641 DEFINE_EVENT(btrfs__ordered_extent, btrfs_ordered_extent_split,
0642 
0643          TP_PROTO(const struct btrfs_inode *inode,
0644               const struct btrfs_ordered_extent *ordered),
0645 
0646          TP_ARGS(inode, ordered)
0647 );
0648 
0649 DEFINE_EVENT(btrfs__ordered_extent, btrfs_ordered_extent_dec_test_pending,
0650 
0651          TP_PROTO(const struct btrfs_inode *inode,
0652               const struct btrfs_ordered_extent *ordered),
0653 
0654          TP_ARGS(inode, ordered)
0655 );
0656 
0657 DEFINE_EVENT(btrfs__ordered_extent, btrfs_ordered_extent_mark_finished,
0658 
0659          TP_PROTO(const struct btrfs_inode *inode,
0660               const struct btrfs_ordered_extent *ordered),
0661 
0662          TP_ARGS(inode, ordered)
0663 );
0664 
0665 DECLARE_EVENT_CLASS(btrfs__writepage,
0666 
0667     TP_PROTO(const struct page *page, const struct inode *inode,
0668          const struct writeback_control *wbc),
0669 
0670     TP_ARGS(page, inode, wbc),
0671 
0672     TP_STRUCT__entry_btrfs(
0673         __field(    u64,    ino         )
0674         __field(    pgoff_t,  index         )
0675         __field(    long,   nr_to_write     )
0676         __field(    long,   pages_skipped       )
0677         __field(    loff_t, range_start     )
0678         __field(    loff_t, range_end       )
0679         __field(    char,   for_kupdate     )
0680         __field(    char,   for_reclaim     )
0681         __field(    char,   range_cyclic        )
0682         __field(    unsigned long,  writeback_index )
0683         __field(    u64,    root_objectid       )
0684     ),
0685 
0686     TP_fast_assign_btrfs(btrfs_sb(inode->i_sb),
0687         __entry->ino        = btrfs_ino(BTRFS_I(inode));
0688         __entry->index      = page->index;
0689         __entry->nr_to_write    = wbc->nr_to_write;
0690         __entry->pages_skipped  = wbc->pages_skipped;
0691         __entry->range_start    = wbc->range_start;
0692         __entry->range_end  = wbc->range_end;
0693         __entry->for_kupdate    = wbc->for_kupdate;
0694         __entry->for_reclaim    = wbc->for_reclaim;
0695         __entry->range_cyclic   = wbc->range_cyclic;
0696         __entry->writeback_index = inode->i_mapping->writeback_index;
0697         __entry->root_objectid  =
0698                  BTRFS_I(inode)->root->root_key.objectid;
0699     ),
0700 
0701     TP_printk_btrfs("root=%llu(%s) ino=%llu page_index=%lu "
0702           "nr_to_write=%ld pages_skipped=%ld range_start=%llu "
0703           "range_end=%llu for_kupdate=%d "
0704           "for_reclaim=%d range_cyclic=%d writeback_index=%lu",
0705           show_root_type(__entry->root_objectid),
0706           __entry->ino, __entry->index,
0707           __entry->nr_to_write, __entry->pages_skipped,
0708           __entry->range_start, __entry->range_end,
0709           __entry->for_kupdate,
0710           __entry->for_reclaim, __entry->range_cyclic,
0711           __entry->writeback_index)
0712 );
0713 
0714 DEFINE_EVENT(btrfs__writepage, __extent_writepage,
0715 
0716     TP_PROTO(const struct page *page, const struct inode *inode,
0717          const struct writeback_control *wbc),
0718 
0719     TP_ARGS(page, inode, wbc)
0720 );
0721 
0722 TRACE_EVENT(btrfs_writepage_end_io_hook,
0723 
0724     TP_PROTO(const struct btrfs_inode *inode, u64 start, u64 end,
0725          int uptodate),
0726 
0727     TP_ARGS(inode, start, end, uptodate),
0728 
0729     TP_STRUCT__entry_btrfs(
0730         __field(    u64,     ino        )
0731         __field(    u64,     start      )
0732         __field(    u64,     end        )
0733         __field(    int,     uptodate   )
0734         __field(    u64,    root_objectid   )
0735     ),
0736 
0737     TP_fast_assign_btrfs(inode->root->fs_info,
0738         __entry->ino    = btrfs_ino(inode);
0739         __entry->start  = start;
0740         __entry->end    = end;
0741         __entry->uptodate = uptodate;
0742         __entry->root_objectid = inode->root->root_key.objectid;
0743     ),
0744 
0745     TP_printk_btrfs("root=%llu(%s) ino=%llu start=%llu end=%llu uptodate=%d",
0746           show_root_type(__entry->root_objectid),
0747           __entry->ino, __entry->start,
0748           __entry->end, __entry->uptodate)
0749 );
0750 
0751 TRACE_EVENT(btrfs_sync_file,
0752 
0753     TP_PROTO(const struct file *file, int datasync),
0754 
0755     TP_ARGS(file, datasync),
0756 
0757     TP_STRUCT__entry_btrfs(
0758         __field(    u64,    ino     )
0759         __field(    u64,    parent      )
0760         __field(    int,    datasync    )
0761         __field(    u64,    root_objectid   )
0762     ),
0763 
0764     TP_fast_assign(
0765         const struct dentry *dentry = file->f_path.dentry;
0766         const struct inode *inode = d_inode(dentry);
0767 
0768         TP_fast_assign_fsid(btrfs_sb(file->f_path.dentry->d_sb));
0769         __entry->ino        = btrfs_ino(BTRFS_I(inode));
0770         __entry->parent     = btrfs_ino(BTRFS_I(d_inode(dentry->d_parent)));
0771         __entry->datasync   = datasync;
0772         __entry->root_objectid  =
0773                  BTRFS_I(inode)->root->root_key.objectid;
0774     ),
0775 
0776     TP_printk_btrfs("root=%llu(%s) ino=%llu parent=%llu datasync=%d",
0777           show_root_type(__entry->root_objectid),
0778           __entry->ino,
0779           __entry->parent,
0780           __entry->datasync)
0781 );
0782 
0783 TRACE_EVENT(btrfs_sync_fs,
0784 
0785     TP_PROTO(const struct btrfs_fs_info *fs_info, int wait),
0786 
0787     TP_ARGS(fs_info, wait),
0788 
0789     TP_STRUCT__entry_btrfs(
0790         __field(    int,  wait      )
0791     ),
0792 
0793     TP_fast_assign_btrfs(fs_info,
0794         __entry->wait   = wait;
0795     ),
0796 
0797     TP_printk_btrfs("wait=%d", __entry->wait)
0798 );
0799 
0800 TRACE_EVENT(btrfs_add_block_group,
0801 
0802     TP_PROTO(const struct btrfs_fs_info *fs_info,
0803          const struct btrfs_block_group *block_group, int create),
0804 
0805     TP_ARGS(fs_info, block_group, create),
0806 
0807     TP_STRUCT__entry_btrfs(
0808         __field(    u64,    offset          )
0809         __field(    u64,    size            )
0810         __field(    u64,    flags           )
0811         __field(    u64,    bytes_used      )
0812         __field(    u64,    bytes_super     )
0813         __field(    int,    create          )
0814     ),
0815 
0816     TP_fast_assign_btrfs(fs_info,
0817         __entry->offset     = block_group->start;
0818         __entry->size       = block_group->length;
0819         __entry->flags      = block_group->flags;
0820         __entry->bytes_used = block_group->used;
0821         __entry->bytes_super    = block_group->bytes_super;
0822         __entry->create     = create;
0823     ),
0824 
0825     TP_printk_btrfs("block_group offset=%llu size=%llu "
0826           "flags=%llu(%s) bytes_used=%llu bytes_super=%llu "
0827           "create=%d",
0828           __entry->offset,
0829           __entry->size,
0830           __entry->flags,
0831           __print_flags((unsigned long)__entry->flags, "|",
0832                 BTRFS_GROUP_FLAGS),
0833           __entry->bytes_used,
0834           __entry->bytes_super, __entry->create)
0835 );
0836 
0837 #define show_ref_action(action)                     \
0838     __print_symbolic(action,                    \
0839         { BTRFS_ADD_DELAYED_REF,    "ADD_DELAYED_REF" },    \
0840         { BTRFS_DROP_DELAYED_REF,   "DROP_DELAYED_REF" },   \
0841         { BTRFS_ADD_DELAYED_EXTENT, "ADD_DELAYED_EXTENT" },     \
0842         { BTRFS_UPDATE_DELAYED_HEAD, "UPDATE_DELAYED_HEAD" })
0843             
0844 
0845 DECLARE_EVENT_CLASS(btrfs_delayed_tree_ref,
0846 
0847     TP_PROTO(const struct btrfs_fs_info *fs_info,
0848          const struct btrfs_delayed_ref_node *ref,
0849          const struct btrfs_delayed_tree_ref *full_ref,
0850          int action),
0851 
0852     TP_ARGS(fs_info, ref, full_ref, action),
0853 
0854     TP_STRUCT__entry_btrfs(
0855         __field(    u64,  bytenr        )
0856         __field(    u64,  num_bytes     )
0857         __field(    int,  action        ) 
0858         __field(    u64,  parent        )
0859         __field(    u64,  ref_root      )
0860         __field(    int,  level     )
0861         __field(    int,  type      )
0862         __field(    u64,  seq       )
0863     ),
0864 
0865     TP_fast_assign_btrfs(fs_info,
0866         __entry->bytenr     = ref->bytenr;
0867         __entry->num_bytes  = ref->num_bytes;
0868         __entry->action     = action;
0869         __entry->parent     = full_ref->parent;
0870         __entry->ref_root   = full_ref->root;
0871         __entry->level      = full_ref->level;
0872         __entry->type       = ref->type;
0873         __entry->seq        = ref->seq;
0874     ),
0875 
0876     TP_printk_btrfs("bytenr=%llu num_bytes=%llu action=%s "
0877           "parent=%llu(%s) ref_root=%llu(%s) level=%d "
0878           "type=%s seq=%llu",
0879           __entry->bytenr,
0880           __entry->num_bytes,
0881           show_ref_action(__entry->action),
0882           show_root_type(__entry->parent),
0883           show_root_type(__entry->ref_root),
0884           __entry->level, show_ref_type(__entry->type),
0885           __entry->seq)
0886 );
0887 
0888 DEFINE_EVENT(btrfs_delayed_tree_ref,  add_delayed_tree_ref,
0889 
0890     TP_PROTO(const struct btrfs_fs_info *fs_info,
0891          const struct btrfs_delayed_ref_node *ref,
0892          const struct btrfs_delayed_tree_ref *full_ref,
0893          int action),
0894 
0895     TP_ARGS(fs_info, ref, full_ref, action)
0896 );
0897 
0898 DEFINE_EVENT(btrfs_delayed_tree_ref,  run_delayed_tree_ref,
0899 
0900     TP_PROTO(const struct btrfs_fs_info *fs_info,
0901          const struct btrfs_delayed_ref_node *ref,
0902          const struct btrfs_delayed_tree_ref *full_ref,
0903          int action),
0904 
0905     TP_ARGS(fs_info, ref, full_ref, action)
0906 );
0907 
0908 DECLARE_EVENT_CLASS(btrfs_delayed_data_ref,
0909 
0910     TP_PROTO(const struct btrfs_fs_info *fs_info,
0911          const struct btrfs_delayed_ref_node *ref,
0912          const struct btrfs_delayed_data_ref *full_ref,
0913          int action),
0914 
0915     TP_ARGS(fs_info, ref, full_ref, action),
0916 
0917     TP_STRUCT__entry_btrfs(
0918         __field(    u64,  bytenr        )
0919         __field(    u64,  num_bytes     )
0920         __field(    int,  action        ) 
0921         __field(    u64,  parent        )
0922         __field(    u64,  ref_root      )
0923         __field(    u64,  owner     )
0924         __field(    u64,  offset        )
0925         __field(    int,  type      )
0926         __field(    u64,  seq       )
0927     ),
0928 
0929     TP_fast_assign_btrfs(fs_info,
0930         __entry->bytenr     = ref->bytenr;
0931         __entry->num_bytes  = ref->num_bytes;
0932         __entry->action     = action;
0933         __entry->parent     = full_ref->parent;
0934         __entry->ref_root   = full_ref->root;
0935         __entry->owner      = full_ref->objectid;
0936         __entry->offset     = full_ref->offset;
0937         __entry->type       = ref->type;
0938         __entry->seq        = ref->seq;
0939     ),
0940 
0941     TP_printk_btrfs("bytenr=%llu num_bytes=%llu action=%s "
0942           "parent=%llu(%s) ref_root=%llu(%s) owner=%llu "
0943           "offset=%llu type=%s seq=%llu",
0944           __entry->bytenr,
0945           __entry->num_bytes,
0946           show_ref_action(__entry->action),
0947           show_root_type(__entry->parent),
0948           show_root_type(__entry->ref_root),
0949           __entry->owner,
0950           __entry->offset,
0951           show_ref_type(__entry->type),
0952           __entry->seq)
0953 );
0954 
0955 DEFINE_EVENT(btrfs_delayed_data_ref,  add_delayed_data_ref,
0956 
0957     TP_PROTO(const struct btrfs_fs_info *fs_info,
0958          const struct btrfs_delayed_ref_node *ref,
0959          const struct btrfs_delayed_data_ref *full_ref,
0960          int action),
0961 
0962     TP_ARGS(fs_info, ref, full_ref, action)
0963 );
0964 
0965 DEFINE_EVENT(btrfs_delayed_data_ref,  run_delayed_data_ref,
0966 
0967     TP_PROTO(const struct btrfs_fs_info *fs_info,
0968          const struct btrfs_delayed_ref_node *ref,
0969          const struct btrfs_delayed_data_ref *full_ref,
0970          int action),
0971 
0972     TP_ARGS(fs_info, ref, full_ref, action)
0973 );
0974 
0975 DECLARE_EVENT_CLASS(btrfs_delayed_ref_head,
0976 
0977     TP_PROTO(const struct btrfs_fs_info *fs_info,
0978          const struct btrfs_delayed_ref_head *head_ref,
0979          int action),
0980 
0981     TP_ARGS(fs_info, head_ref, action),
0982 
0983     TP_STRUCT__entry_btrfs(
0984         __field(    u64,  bytenr        )
0985         __field(    u64,  num_bytes     )
0986         __field(    int,  action        ) 
0987         __field(    int,  is_data       )
0988     ),
0989 
0990     TP_fast_assign_btrfs(fs_info,
0991         __entry->bytenr     = head_ref->bytenr;
0992         __entry->num_bytes  = head_ref->num_bytes;
0993         __entry->action     = action;
0994         __entry->is_data    = head_ref->is_data;
0995     ),
0996 
0997     TP_printk_btrfs("bytenr=%llu num_bytes=%llu action=%s is_data=%d",
0998           __entry->bytenr,
0999           __entry->num_bytes,
1000           show_ref_action(__entry->action),
1001           __entry->is_data)
1002 );
1003 
1004 DEFINE_EVENT(btrfs_delayed_ref_head,  add_delayed_ref_head,
1005 
1006     TP_PROTO(const struct btrfs_fs_info *fs_info,
1007          const struct btrfs_delayed_ref_head *head_ref,
1008          int action),
1009 
1010     TP_ARGS(fs_info, head_ref, action)
1011 );
1012 
1013 DEFINE_EVENT(btrfs_delayed_ref_head,  run_delayed_ref_head,
1014 
1015     TP_PROTO(const struct btrfs_fs_info *fs_info,
1016          const struct btrfs_delayed_ref_head *head_ref,
1017          int action),
1018 
1019     TP_ARGS(fs_info, head_ref, action)
1020 );
1021 
1022 #define show_chunk_type(type)                   \
1023     __print_flags(type, "|",                \
1024         { BTRFS_BLOCK_GROUP_DATA,   "DATA"  },  \
1025         { BTRFS_BLOCK_GROUP_SYSTEM,     "SYSTEM"},  \
1026         { BTRFS_BLOCK_GROUP_METADATA,   "METADATA"},    \
1027         { BTRFS_BLOCK_GROUP_RAID0,  "RAID0" },  \
1028         { BTRFS_BLOCK_GROUP_RAID1,  "RAID1" },  \
1029         { BTRFS_BLOCK_GROUP_DUP,    "DUP"   },  \
1030         { BTRFS_BLOCK_GROUP_RAID10,     "RAID10"},  \
1031         { BTRFS_BLOCK_GROUP_RAID5,  "RAID5" },  \
1032         { BTRFS_BLOCK_GROUP_RAID6,  "RAID6" })
1033 
1034 DECLARE_EVENT_CLASS(btrfs__chunk,
1035 
1036     TP_PROTO(const struct btrfs_fs_info *fs_info,
1037          const struct map_lookup *map, u64 offset, u64 size),
1038 
1039     TP_ARGS(fs_info, map, offset, size),
1040 
1041     TP_STRUCT__entry_btrfs(
1042         __field(    int,  num_stripes       )
1043         __field(    u64,  type          )
1044         __field(    int,  sub_stripes       )
1045         __field(    u64,  offset            )
1046         __field(    u64,  size          )
1047         __field(    u64,  root_objectid     )
1048     ),
1049 
1050     TP_fast_assign_btrfs(fs_info,
1051         __entry->num_stripes    = map->num_stripes;
1052         __entry->type       = map->type;
1053         __entry->sub_stripes    = map->sub_stripes;
1054         __entry->offset     = offset;
1055         __entry->size       = size;
1056         __entry->root_objectid  = fs_info->chunk_root->root_key.objectid;
1057     ),
1058 
1059     TP_printk_btrfs("root=%llu(%s) offset=%llu size=%llu "
1060           "num_stripes=%d sub_stripes=%d type=%s",
1061           show_root_type(__entry->root_objectid),
1062           __entry->offset,
1063           __entry->size,
1064           __entry->num_stripes, __entry->sub_stripes,
1065           show_chunk_type(__entry->type))
1066 );
1067 
1068 DEFINE_EVENT(btrfs__chunk,  btrfs_chunk_alloc,
1069 
1070     TP_PROTO(const struct btrfs_fs_info *fs_info,
1071          const struct map_lookup *map, u64 offset, u64 size),
1072 
1073     TP_ARGS(fs_info, map, offset, size)
1074 );
1075 
1076 DEFINE_EVENT(btrfs__chunk,  btrfs_chunk_free,
1077 
1078     TP_PROTO(const struct btrfs_fs_info *fs_info,
1079          const struct map_lookup *map, u64 offset, u64 size),
1080 
1081     TP_ARGS(fs_info, map, offset, size)
1082 );
1083 
1084 TRACE_EVENT(btrfs_cow_block,
1085 
1086     TP_PROTO(const struct btrfs_root *root, const struct extent_buffer *buf,
1087          const struct extent_buffer *cow),
1088 
1089     TP_ARGS(root, buf, cow),
1090 
1091     TP_STRUCT__entry_btrfs(
1092         __field(    u64,  root_objectid     )
1093         __field(    u64,  buf_start         )
1094         __field(    int,  refs          )
1095         __field(    u64,  cow_start         )
1096         __field(    int,  buf_level         )
1097         __field(    int,  cow_level         )
1098     ),
1099 
1100     TP_fast_assign_btrfs(root->fs_info,
1101         __entry->root_objectid  = root->root_key.objectid;
1102         __entry->buf_start  = buf->start;
1103         __entry->refs       = atomic_read(&buf->refs);
1104         __entry->cow_start  = cow->start;
1105         __entry->buf_level  = btrfs_header_level(buf);
1106         __entry->cow_level  = btrfs_header_level(cow);
1107     ),
1108 
1109     TP_printk_btrfs("root=%llu(%s) refs=%d orig_buf=%llu "
1110           "(orig_level=%d) cow_buf=%llu (cow_level=%d)",
1111           show_root_type(__entry->root_objectid),
1112           __entry->refs,
1113           __entry->buf_start,
1114           __entry->buf_level,
1115           __entry->cow_start,
1116           __entry->cow_level)
1117 );
1118 
1119 TRACE_EVENT(btrfs_space_reservation,
1120 
1121     TP_PROTO(const struct btrfs_fs_info *fs_info, const char *type, u64 val,
1122          u64 bytes, int reserve),
1123 
1124     TP_ARGS(fs_info, type, val, bytes, reserve),
1125 
1126     TP_STRUCT__entry_btrfs(
1127         __string(   type,   type            )
1128         __field(    u64,    val         )
1129         __field(    u64,    bytes           )
1130         __field(    int,    reserve         )
1131     ),
1132 
1133     TP_fast_assign_btrfs(fs_info,
1134         __assign_str(type, type);
1135         __entry->val        = val;
1136         __entry->bytes      = bytes;
1137         __entry->reserve    = reserve;
1138     ),
1139 
1140     TP_printk_btrfs("%s: %llu %s %llu", __get_str(type), __entry->val,
1141             __entry->reserve ? "reserve" : "release",
1142             __entry->bytes)
1143 );
1144 
1145 TRACE_EVENT(btrfs_trigger_flush,
1146 
1147     TP_PROTO(const struct btrfs_fs_info *fs_info, u64 flags, u64 bytes,
1148          int flush, const char *reason),
1149 
1150     TP_ARGS(fs_info, flags, bytes, flush, reason),
1151 
1152     TP_STRUCT__entry_btrfs(
1153         __field(    u64,    flags           )
1154         __field(    u64,    bytes           )
1155         __field(    int,    flush           )
1156         __string(   reason, reason          )
1157     ),
1158 
1159     TP_fast_assign_btrfs(fs_info,
1160         __entry->flags  = flags;
1161         __entry->bytes  = bytes;
1162         __entry->flush  = flush;
1163         __assign_str(reason, reason);
1164     ),
1165 
1166     TP_printk_btrfs("%s: flush=%d(%s) flags=%llu(%s) bytes=%llu",
1167           __get_str(reason), __entry->flush,
1168           __print_symbolic(__entry->flush, FLUSH_ACTIONS),
1169           __entry->flags,
1170           __print_flags((unsigned long)__entry->flags, "|",
1171                 BTRFS_GROUP_FLAGS),
1172           __entry->bytes)
1173 );
1174 
1175 
1176 TRACE_EVENT(btrfs_flush_space,
1177 
1178     TP_PROTO(const struct btrfs_fs_info *fs_info, u64 flags, u64 num_bytes,
1179          int state, int ret, bool for_preempt),
1180 
1181     TP_ARGS(fs_info, flags, num_bytes, state, ret, for_preempt),
1182 
1183     TP_STRUCT__entry_btrfs(
1184         __field(    u64,    flags           )
1185         __field(    u64,    num_bytes       )
1186         __field(    int,    state           )
1187         __field(    int,    ret         )
1188         __field(       bool,    for_preempt     )
1189     ),
1190 
1191     TP_fast_assign_btrfs(fs_info,
1192         __entry->flags      =   flags;
1193         __entry->num_bytes  =   num_bytes;
1194         __entry->state      =   state;
1195         __entry->ret        =   ret;
1196         __entry->for_preempt    =   for_preempt;
1197     ),
1198 
1199     TP_printk_btrfs("state=%d(%s) flags=%llu(%s) num_bytes=%llu ret=%d for_preempt=%d",
1200           __entry->state,
1201           __print_symbolic(__entry->state, FLUSH_STATES),
1202           __entry->flags,
1203           __print_flags((unsigned long)__entry->flags, "|",
1204                 BTRFS_GROUP_FLAGS),
1205           __entry->num_bytes, __entry->ret, __entry->for_preempt)
1206 );
1207 
1208 DECLARE_EVENT_CLASS(btrfs__reserved_extent,
1209 
1210     TP_PROTO(const struct btrfs_fs_info *fs_info, u64 start, u64 len),
1211 
1212     TP_ARGS(fs_info, start, len),
1213 
1214     TP_STRUCT__entry_btrfs(
1215         __field(    u64,  start         )
1216         __field(    u64,  len           )
1217     ),
1218 
1219     TP_fast_assign_btrfs(fs_info,
1220         __entry->start      = start;
1221         __entry->len        = len;
1222     ),
1223 
1224     TP_printk_btrfs("root=%llu(%s) start=%llu len=%llu",
1225           show_root_type(BTRFS_EXTENT_TREE_OBJECTID),
1226           __entry->start,
1227           __entry->len)
1228 );
1229 
1230 DEFINE_EVENT(btrfs__reserved_extent,  btrfs_reserved_extent_alloc,
1231 
1232     TP_PROTO(const struct btrfs_fs_info *fs_info, u64 start, u64 len),
1233 
1234     TP_ARGS(fs_info, start, len)
1235 );
1236 
1237 DEFINE_EVENT(btrfs__reserved_extent,  btrfs_reserved_extent_free,
1238 
1239     TP_PROTO(const struct btrfs_fs_info *fs_info, u64 start, u64 len),
1240 
1241     TP_ARGS(fs_info, start, len)
1242 );
1243 
1244 TRACE_EVENT(find_free_extent,
1245 
1246     TP_PROTO(const struct btrfs_root *root, u64 num_bytes,
1247          u64 empty_size, u64 data),
1248 
1249     TP_ARGS(root, num_bytes, empty_size, data),
1250 
1251     TP_STRUCT__entry_btrfs(
1252         __field(    u64,    root_objectid       )
1253         __field(    u64,    num_bytes       )
1254         __field(    u64,    empty_size      )
1255         __field(    u64,    data            )
1256     ),
1257 
1258     TP_fast_assign_btrfs(root->fs_info,
1259         __entry->root_objectid  = root->root_key.objectid;
1260         __entry->num_bytes  = num_bytes;
1261         __entry->empty_size = empty_size;
1262         __entry->data       = data;
1263     ),
1264 
1265     TP_printk_btrfs("root=%llu(%s) len=%llu empty_size=%llu flags=%llu(%s)",
1266           show_root_type(__entry->root_objectid),
1267           __entry->num_bytes, __entry->empty_size, __entry->data,
1268           __print_flags((unsigned long)__entry->data, "|",
1269                  BTRFS_GROUP_FLAGS))
1270 );
1271 
1272 DECLARE_EVENT_CLASS(btrfs__reserve_extent,
1273 
1274     TP_PROTO(const struct btrfs_block_group *block_group, u64 start,
1275          u64 len),
1276 
1277     TP_ARGS(block_group, start, len),
1278 
1279     TP_STRUCT__entry_btrfs(
1280         __field(    u64,    bg_objectid     )
1281         __field(    u64,    flags           )
1282         __field(    u64,    start           )
1283         __field(    u64,    len         )
1284     ),
1285 
1286     TP_fast_assign_btrfs(block_group->fs_info,
1287         __entry->bg_objectid    = block_group->start;
1288         __entry->flags      = block_group->flags;
1289         __entry->start      = start;
1290         __entry->len        = len;
1291     ),
1292 
1293     TP_printk_btrfs("root=%llu(%s) block_group=%llu flags=%llu(%s) "
1294           "start=%llu len=%llu",
1295           show_root_type(BTRFS_EXTENT_TREE_OBJECTID),
1296           __entry->bg_objectid,
1297           __entry->flags, __print_flags((unsigned long)__entry->flags,
1298                         "|", BTRFS_GROUP_FLAGS),
1299           __entry->start, __entry->len)
1300 );
1301 
1302 DEFINE_EVENT(btrfs__reserve_extent, btrfs_reserve_extent,
1303 
1304     TP_PROTO(const struct btrfs_block_group *block_group, u64 start,
1305          u64 len),
1306 
1307     TP_ARGS(block_group, start, len)
1308 );
1309 
1310 DEFINE_EVENT(btrfs__reserve_extent, btrfs_reserve_extent_cluster,
1311 
1312     TP_PROTO(const struct btrfs_block_group *block_group, u64 start,
1313          u64 len),
1314 
1315     TP_ARGS(block_group, start, len)
1316 );
1317 
1318 TRACE_EVENT(btrfs_find_cluster,
1319 
1320     TP_PROTO(const struct btrfs_block_group *block_group, u64 start,
1321          u64 bytes, u64 empty_size, u64 min_bytes),
1322 
1323     TP_ARGS(block_group, start, bytes, empty_size, min_bytes),
1324 
1325     TP_STRUCT__entry_btrfs(
1326         __field(    u64,    bg_objectid     )
1327         __field(    u64,    flags           )
1328         __field(    u64,    start           )
1329         __field(    u64,    bytes           )
1330         __field(    u64,    empty_size      )
1331         __field(    u64,    min_bytes       )
1332     ),
1333 
1334     TP_fast_assign_btrfs(block_group->fs_info,
1335         __entry->bg_objectid    = block_group->start;
1336         __entry->flags      = block_group->flags;
1337         __entry->start      = start;
1338         __entry->bytes      = bytes;
1339         __entry->empty_size = empty_size;
1340         __entry->min_bytes  = min_bytes;
1341     ),
1342 
1343     TP_printk_btrfs("block_group=%llu flags=%llu(%s) start=%llu len=%llu "
1344           "empty_size=%llu min_bytes=%llu", __entry->bg_objectid,
1345           __entry->flags,
1346           __print_flags((unsigned long)__entry->flags, "|",
1347                 BTRFS_GROUP_FLAGS), __entry->start,
1348           __entry->bytes, __entry->empty_size,  __entry->min_bytes)
1349 );
1350 
1351 TRACE_EVENT(btrfs_failed_cluster_setup,
1352 
1353     TP_PROTO(const struct btrfs_block_group *block_group),
1354 
1355     TP_ARGS(block_group),
1356 
1357     TP_STRUCT__entry_btrfs(
1358         __field(    u64,    bg_objectid     )
1359     ),
1360 
1361     TP_fast_assign_btrfs(block_group->fs_info,
1362         __entry->bg_objectid    = block_group->start;
1363     ),
1364 
1365     TP_printk_btrfs("block_group=%llu", __entry->bg_objectid)
1366 );
1367 
1368 TRACE_EVENT(btrfs_setup_cluster,
1369 
1370     TP_PROTO(const struct btrfs_block_group *block_group,
1371          const struct btrfs_free_cluster *cluster,
1372          u64 size, int bitmap),
1373 
1374     TP_ARGS(block_group, cluster, size, bitmap),
1375 
1376     TP_STRUCT__entry_btrfs(
1377         __field(    u64,    bg_objectid     )
1378         __field(    u64,    flags           )
1379         __field(    u64,    start           )
1380         __field(    u64,    max_size        )
1381         __field(    u64,    size            )
1382         __field(    int,    bitmap          )
1383     ),
1384 
1385     TP_fast_assign_btrfs(block_group->fs_info,
1386         __entry->bg_objectid    = block_group->start;
1387         __entry->flags      = block_group->flags;
1388         __entry->start      = cluster->window_start;
1389         __entry->max_size   = cluster->max_size;
1390         __entry->size       = size;
1391         __entry->bitmap     = bitmap;
1392     ),
1393 
1394     TP_printk_btrfs("block_group=%llu flags=%llu(%s) window_start=%llu "
1395           "size=%llu max_size=%llu bitmap=%d",
1396           __entry->bg_objectid,
1397           __entry->flags,
1398           __print_flags((unsigned long)__entry->flags, "|",
1399                 BTRFS_GROUP_FLAGS), __entry->start,
1400           __entry->size, __entry->max_size, __entry->bitmap)
1401 );
1402 
1403 struct extent_state;
1404 TRACE_EVENT(alloc_extent_state,
1405 
1406     TP_PROTO(const struct extent_state *state,
1407          gfp_t mask, unsigned long IP),
1408 
1409     TP_ARGS(state, mask, IP),
1410 
1411     TP_STRUCT__entry(
1412         __field(const struct extent_state *, state)
1413         __field(unsigned long, mask)
1414         __field(const void*, ip)
1415     ),
1416 
1417     TP_fast_assign(
1418         __entry->state  = state,
1419         __entry->mask   = (__force unsigned long)mask,
1420         __entry->ip = (const void *)IP
1421     ),
1422 
1423     TP_printk("state=%p mask=%s caller=%pS", __entry->state,
1424           show_gfp_flags(__entry->mask), __entry->ip)
1425 );
1426 
1427 TRACE_EVENT(free_extent_state,
1428 
1429     TP_PROTO(const struct extent_state *state, unsigned long IP),
1430 
1431     TP_ARGS(state, IP),
1432 
1433     TP_STRUCT__entry(
1434         __field(const struct extent_state *, state)
1435         __field(const void*, ip)
1436     ),
1437 
1438     TP_fast_assign(
1439         __entry->state  = state,
1440         __entry->ip = (const void *)IP
1441     ),
1442 
1443     TP_printk("state=%p caller=%pS", __entry->state, __entry->ip)
1444 );
1445 
1446 DECLARE_EVENT_CLASS(btrfs__work,
1447 
1448     TP_PROTO(const struct btrfs_work *work),
1449 
1450     TP_ARGS(work),
1451 
1452     TP_STRUCT__entry_btrfs(
1453         __field(    const void *,   work            )
1454         __field(    const void *,   wq          )
1455         __field(    const void *,   func            )
1456         __field(    const void *,   ordered_func        )
1457         __field(    const void *,   ordered_free        )
1458         __field(    const void *,   normal_work     )
1459     ),
1460 
1461     TP_fast_assign_btrfs(btrfs_work_owner(work),
1462         __entry->work       = work;
1463         __entry->wq     = work->wq;
1464         __entry->func       = work->func;
1465         __entry->ordered_func   = work->ordered_func;
1466         __entry->ordered_free   = work->ordered_free;
1467         __entry->normal_work    = &work->normal_work;
1468     ),
1469 
1470     TP_printk_btrfs("work=%p (normal_work=%p) wq=%p func=%ps ordered_func=%p "
1471           "ordered_free=%p",
1472           __entry->work, __entry->normal_work, __entry->wq,
1473            __entry->func, __entry->ordered_func, __entry->ordered_free)
1474 );
1475 
1476 /*
1477  * For situations when the work is freed, we pass fs_info and a tag that matches
1478  * the address of the work structure so it can be paired with the scheduling
1479  * event. DO NOT add anything here that dereferences wtag.
1480  */
1481 DECLARE_EVENT_CLASS(btrfs__work__done,
1482 
1483     TP_PROTO(const struct btrfs_fs_info *fs_info, const void *wtag),
1484 
1485     TP_ARGS(fs_info, wtag),
1486 
1487     TP_STRUCT__entry_btrfs(
1488         __field(    const void *,   wtag            )
1489     ),
1490 
1491     TP_fast_assign_btrfs(fs_info,
1492         __entry->wtag       = wtag;
1493     ),
1494 
1495     TP_printk_btrfs("work->%p", __entry->wtag)
1496 );
1497 
1498 DEFINE_EVENT(btrfs__work, btrfs_work_queued,
1499 
1500     TP_PROTO(const struct btrfs_work *work),
1501 
1502     TP_ARGS(work)
1503 );
1504 
1505 DEFINE_EVENT(btrfs__work, btrfs_work_sched,
1506 
1507     TP_PROTO(const struct btrfs_work *work),
1508 
1509     TP_ARGS(work)
1510 );
1511 
1512 DEFINE_EVENT(btrfs__work__done, btrfs_all_work_done,
1513 
1514     TP_PROTO(const struct btrfs_fs_info *fs_info, const void *wtag),
1515 
1516     TP_ARGS(fs_info, wtag)
1517 );
1518 
1519 DEFINE_EVENT(btrfs__work, btrfs_ordered_sched,
1520 
1521     TP_PROTO(const struct btrfs_work *work),
1522 
1523     TP_ARGS(work)
1524 );
1525 
1526 DECLARE_EVENT_CLASS(btrfs_workqueue,
1527 
1528     TP_PROTO(const struct btrfs_workqueue *wq, const char *name),
1529 
1530     TP_ARGS(wq, name),
1531 
1532     TP_STRUCT__entry_btrfs(
1533         __field(    const void *,   wq          )
1534         __string(   name,   name            )
1535     ),
1536 
1537     TP_fast_assign_btrfs(btrfs_workqueue_owner(wq),
1538         __entry->wq     = wq;
1539         __assign_str(name, name);
1540     ),
1541 
1542     TP_printk_btrfs("name=%s wq=%p", __get_str(name),
1543           __entry->wq)
1544 );
1545 
1546 DEFINE_EVENT(btrfs_workqueue, btrfs_workqueue_alloc,
1547 
1548     TP_PROTO(const struct btrfs_workqueue *wq, const char *name),
1549 
1550     TP_ARGS(wq, name)
1551 );
1552 
1553 DECLARE_EVENT_CLASS(btrfs_workqueue_done,
1554 
1555     TP_PROTO(const struct btrfs_workqueue *wq),
1556 
1557     TP_ARGS(wq),
1558 
1559     TP_STRUCT__entry_btrfs(
1560         __field(    const void *,   wq      )
1561     ),
1562 
1563     TP_fast_assign_btrfs(btrfs_workqueue_owner(wq),
1564         __entry->wq     = wq;
1565     ),
1566 
1567     TP_printk_btrfs("wq=%p", __entry->wq)
1568 );
1569 
1570 DEFINE_EVENT(btrfs_workqueue_done, btrfs_workqueue_destroy,
1571 
1572     TP_PROTO(const struct btrfs_workqueue *wq),
1573 
1574     TP_ARGS(wq)
1575 );
1576 
1577 #define BTRFS_QGROUP_OPERATIONS             \
1578     { QGROUP_RESERVE,   "reserve"   },  \
1579     { QGROUP_RELEASE,   "release"   },  \
1580     { QGROUP_FREE,      "free"      }
1581 
1582 DECLARE_EVENT_CLASS(btrfs__qgroup_rsv_data,
1583 
1584     TP_PROTO(const struct inode *inode, u64 start, u64 len,
1585          u64 reserved, int op),
1586 
1587     TP_ARGS(inode, start, len, reserved, op),
1588 
1589     TP_STRUCT__entry_btrfs(
1590         __field(    u64,        rootid      )
1591         __field(    u64,        ino     )
1592         __field(    u64,        start       )
1593         __field(    u64,        len     )
1594         __field(    u64,        reserved    )
1595         __field(    int,        op      )
1596     ),
1597 
1598     TP_fast_assign_btrfs(btrfs_sb(inode->i_sb),
1599         __entry->rootid     =
1600             BTRFS_I(inode)->root->root_key.objectid;
1601         __entry->ino        = btrfs_ino(BTRFS_I(inode));
1602         __entry->start      = start;
1603         __entry->len        = len;
1604         __entry->reserved   = reserved;
1605         __entry->op     = op;
1606     ),
1607 
1608     TP_printk_btrfs("root=%llu ino=%llu start=%llu len=%llu reserved=%llu op=%s",
1609           __entry->rootid, __entry->ino, __entry->start, __entry->len,
1610           __entry->reserved,
1611           __print_flags((unsigned long)__entry->op, "",
1612                 BTRFS_QGROUP_OPERATIONS)
1613     )
1614 );
1615 
1616 DEFINE_EVENT(btrfs__qgroup_rsv_data, btrfs_qgroup_reserve_data,
1617 
1618     TP_PROTO(const struct inode *inode, u64 start, u64 len,
1619          u64 reserved, int op),
1620 
1621     TP_ARGS(inode, start, len, reserved, op)
1622 );
1623 
1624 DEFINE_EVENT(btrfs__qgroup_rsv_data, btrfs_qgroup_release_data,
1625 
1626     TP_PROTO(const struct inode *inode, u64 start, u64 len,
1627          u64 reserved, int op),
1628 
1629     TP_ARGS(inode, start, len, reserved, op)
1630 );
1631 
1632 DECLARE_EVENT_CLASS(btrfs_qgroup_extent,
1633     TP_PROTO(const struct btrfs_fs_info *fs_info,
1634          const struct btrfs_qgroup_extent_record *rec),
1635 
1636     TP_ARGS(fs_info, rec),
1637 
1638     TP_STRUCT__entry_btrfs(
1639         __field(    u64,  bytenr        )
1640         __field(    u64,  num_bytes     )
1641     ),
1642 
1643     TP_fast_assign_btrfs(fs_info,
1644         __entry->bytenr     = rec->bytenr,
1645         __entry->num_bytes  = rec->num_bytes;
1646     ),
1647 
1648     TP_printk_btrfs("bytenr=%llu num_bytes=%llu",
1649           __entry->bytenr, __entry->num_bytes)
1650 );
1651 
1652 DEFINE_EVENT(btrfs_qgroup_extent, btrfs_qgroup_account_extents,
1653 
1654     TP_PROTO(const struct btrfs_fs_info *fs_info,
1655          const struct btrfs_qgroup_extent_record *rec),
1656 
1657     TP_ARGS(fs_info, rec)
1658 );
1659 
1660 DEFINE_EVENT(btrfs_qgroup_extent, btrfs_qgroup_trace_extent,
1661 
1662     TP_PROTO(const struct btrfs_fs_info *fs_info,
1663          const struct btrfs_qgroup_extent_record *rec),
1664 
1665     TP_ARGS(fs_info, rec)
1666 );
1667 
1668 TRACE_EVENT(qgroup_num_dirty_extents,
1669 
1670     TP_PROTO(const struct btrfs_fs_info *fs_info, u64 transid,
1671          u64 num_dirty_extents),
1672 
1673     TP_ARGS(fs_info, transid, num_dirty_extents),
1674 
1675     TP_STRUCT__entry_btrfs(
1676         __field(    u64, transid            )
1677         __field(    u64, num_dirty_extents      )
1678     ),
1679 
1680     TP_fast_assign_btrfs(fs_info,
1681         __entry->transid       = transid;
1682         __entry->num_dirty_extents = num_dirty_extents;
1683     ),
1684 
1685     TP_printk_btrfs("transid=%llu num_dirty_extents=%llu",
1686         __entry->transid, __entry->num_dirty_extents)
1687 );
1688 
1689 TRACE_EVENT(btrfs_qgroup_account_extent,
1690 
1691     TP_PROTO(const struct btrfs_fs_info *fs_info, u64 transid, u64 bytenr,
1692          u64 num_bytes, u64 nr_old_roots, u64 nr_new_roots),
1693 
1694     TP_ARGS(fs_info, transid, bytenr, num_bytes, nr_old_roots,
1695         nr_new_roots),
1696 
1697     TP_STRUCT__entry_btrfs(
1698         __field(    u64,  transid           )
1699         __field(    u64,  bytenr            )
1700         __field(    u64,  num_bytes         )
1701         __field(    u64,  nr_old_roots      )
1702         __field(    u64,  nr_new_roots      )
1703     ),
1704 
1705     TP_fast_assign_btrfs(fs_info,
1706         __entry->transid    = transid;
1707         __entry->bytenr     = bytenr;
1708         __entry->num_bytes  = num_bytes;
1709         __entry->nr_old_roots   = nr_old_roots;
1710         __entry->nr_new_roots   = nr_new_roots;
1711     ),
1712 
1713     TP_printk_btrfs(
1714 "transid=%llu bytenr=%llu num_bytes=%llu nr_old_roots=%llu nr_new_roots=%llu",
1715         __entry->transid,
1716         __entry->bytenr,
1717         __entry->num_bytes,
1718         __entry->nr_old_roots,
1719         __entry->nr_new_roots)
1720 );
1721 
1722 TRACE_EVENT(qgroup_update_counters,
1723 
1724     TP_PROTO(const struct btrfs_fs_info *fs_info,
1725          const struct btrfs_qgroup *qgroup,
1726          u64 cur_old_count, u64 cur_new_count),
1727 
1728     TP_ARGS(fs_info, qgroup, cur_old_count, cur_new_count),
1729 
1730     TP_STRUCT__entry_btrfs(
1731         __field(    u64,  qgid          )
1732         __field(    u64,  old_rfer          )
1733         __field(    u64,  old_excl          )
1734         __field(    u64,  cur_old_count     )
1735         __field(    u64,  cur_new_count     )
1736     ),
1737 
1738     TP_fast_assign_btrfs(fs_info,
1739         __entry->qgid       = qgroup->qgroupid;
1740         __entry->old_rfer   = qgroup->rfer;
1741         __entry->old_excl   = qgroup->excl;
1742         __entry->cur_old_count  = cur_old_count;
1743         __entry->cur_new_count  = cur_new_count;
1744     ),
1745 
1746     TP_printk_btrfs("qgid=%llu old_rfer=%llu old_excl=%llu cur_old_count=%llu cur_new_count=%llu",
1747           __entry->qgid, __entry->old_rfer, __entry->old_excl,
1748           __entry->cur_old_count, __entry->cur_new_count)
1749 );
1750 
1751 TRACE_EVENT(qgroup_update_reserve,
1752 
1753     TP_PROTO(struct btrfs_fs_info *fs_info, struct btrfs_qgroup *qgroup,
1754          s64 diff, int type),
1755 
1756     TP_ARGS(fs_info, qgroup, diff, type),
1757 
1758     TP_STRUCT__entry_btrfs(
1759         __field(    u64,    qgid            )
1760         __field(    u64,    cur_reserved        )
1761         __field(    s64,    diff            )
1762         __field(    int,    type            )
1763     ),
1764 
1765     TP_fast_assign_btrfs(fs_info,
1766         __entry->qgid       = qgroup->qgroupid;
1767         __entry->cur_reserved   = qgroup->rsv.values[type];
1768         __entry->diff       = diff;
1769         __entry->type       = type;
1770     ),
1771 
1772     TP_printk_btrfs("qgid=%llu type=%s cur_reserved=%llu diff=%lld",
1773         __entry->qgid, __print_symbolic(__entry->type, QGROUP_RSV_TYPES),
1774         __entry->cur_reserved, __entry->diff)
1775 );
1776 
1777 TRACE_EVENT(qgroup_meta_reserve,
1778 
1779     TP_PROTO(struct btrfs_root *root, s64 diff, int type),
1780 
1781     TP_ARGS(root, diff, type),
1782 
1783     TP_STRUCT__entry_btrfs(
1784         __field(    u64,    refroot         )
1785         __field(    s64,    diff            )
1786         __field(    int,    type            )
1787     ),
1788 
1789     TP_fast_assign_btrfs(root->fs_info,
1790         __entry->refroot    = root->root_key.objectid;
1791         __entry->diff       = diff;
1792         __entry->type       = type;
1793     ),
1794 
1795     TP_printk_btrfs("refroot=%llu(%s) type=%s diff=%lld",
1796         show_root_type(__entry->refroot),
1797         __print_symbolic(__entry->type, QGROUP_RSV_TYPES), __entry->diff)
1798 );
1799 
1800 TRACE_EVENT(qgroup_meta_convert,
1801 
1802     TP_PROTO(struct btrfs_root *root, s64 diff),
1803 
1804     TP_ARGS(root, diff),
1805 
1806     TP_STRUCT__entry_btrfs(
1807         __field(    u64,    refroot         )
1808         __field(    s64,    diff            )
1809     ),
1810 
1811     TP_fast_assign_btrfs(root->fs_info,
1812         __entry->refroot    = root->root_key.objectid;
1813         __entry->diff       = diff;
1814     ),
1815 
1816     TP_printk_btrfs("refroot=%llu(%s) type=%s->%s diff=%lld",
1817         show_root_type(__entry->refroot),
1818         __print_symbolic(BTRFS_QGROUP_RSV_META_PREALLOC, QGROUP_RSV_TYPES),
1819         __print_symbolic(BTRFS_QGROUP_RSV_META_PERTRANS, QGROUP_RSV_TYPES),
1820         __entry->diff)
1821 );
1822 
1823 TRACE_EVENT(qgroup_meta_free_all_pertrans,
1824 
1825     TP_PROTO(struct btrfs_root *root),
1826 
1827     TP_ARGS(root),
1828 
1829     TP_STRUCT__entry_btrfs(
1830         __field(    u64,    refroot         )
1831         __field(    s64,    diff            )
1832         __field(    int,    type            )
1833     ),
1834 
1835     TP_fast_assign_btrfs(root->fs_info,
1836         __entry->refroot    = root->root_key.objectid;
1837         spin_lock(&root->qgroup_meta_rsv_lock);
1838         __entry->diff       = -(s64)root->qgroup_meta_rsv_pertrans;
1839         spin_unlock(&root->qgroup_meta_rsv_lock);
1840         __entry->type       = BTRFS_QGROUP_RSV_META_PERTRANS;
1841     ),
1842 
1843     TP_printk_btrfs("refroot=%llu(%s) type=%s diff=%lld",
1844         show_root_type(__entry->refroot),
1845         __print_symbolic(__entry->type, QGROUP_RSV_TYPES), __entry->diff)
1846 );
1847 
1848 DECLARE_EVENT_CLASS(btrfs__prelim_ref,
1849     TP_PROTO(const struct btrfs_fs_info *fs_info,
1850          const struct prelim_ref *oldref,
1851          const struct prelim_ref *newref, u64 tree_size),
1852     TP_ARGS(fs_info, newref, oldref, tree_size),
1853 
1854     TP_STRUCT__entry_btrfs(
1855         __field(    u64,  root_id       )
1856         __field(    u64,  objectid      )
1857         __field(     u8,  type      )
1858         __field(    u64,  offset        )
1859         __field(    int,  level     )
1860         __field(    int,  old_count     )
1861         __field(    u64,  parent        )
1862         __field(    u64,  bytenr        )
1863         __field(    int,  mod_count     )
1864         __field(    u64,  tree_size     )
1865     ),
1866 
1867     TP_fast_assign_btrfs(fs_info,
1868         __entry->root_id    = oldref->root_id;
1869         __entry->objectid   = oldref->key_for_search.objectid;
1870         __entry->type       = oldref->key_for_search.type;
1871         __entry->offset     = oldref->key_for_search.offset;
1872         __entry->level      = oldref->level;
1873         __entry->old_count  = oldref->count;
1874         __entry->parent     = oldref->parent;
1875         __entry->bytenr     = oldref->wanted_disk_byte;
1876         __entry->mod_count  = newref ? newref->count : 0;
1877         __entry->tree_size  = tree_size;
1878     ),
1879 
1880     TP_printk_btrfs("root_id=%llu key=[%llu,%u,%llu] level=%d count=[%d+%d=%d] parent=%llu wanted_disk_byte=%llu nodes=%llu",
1881             __entry->root_id,
1882             __entry->objectid, __entry->type,
1883             __entry->offset, __entry->level,
1884             __entry->old_count, __entry->mod_count,
1885             __entry->old_count + __entry->mod_count,
1886             __entry->parent,
1887             __entry->bytenr,
1888             __entry->tree_size)
1889 );
1890 
1891 DEFINE_EVENT(btrfs__prelim_ref, btrfs_prelim_ref_merge,
1892     TP_PROTO(const struct btrfs_fs_info *fs_info,
1893          const struct prelim_ref *oldref,
1894          const struct prelim_ref *newref, u64 tree_size),
1895     TP_ARGS(fs_info, oldref, newref, tree_size)
1896 );
1897 
1898 DEFINE_EVENT(btrfs__prelim_ref, btrfs_prelim_ref_insert,
1899     TP_PROTO(const struct btrfs_fs_info *fs_info,
1900          const struct prelim_ref *oldref,
1901          const struct prelim_ref *newref, u64 tree_size),
1902     TP_ARGS(fs_info, oldref, newref, tree_size)
1903 );
1904 
1905 TRACE_EVENT(btrfs_inode_mod_outstanding_extents,
1906     TP_PROTO(const struct btrfs_root *root, u64 ino, int mod),
1907 
1908     TP_ARGS(root, ino, mod),
1909 
1910     TP_STRUCT__entry_btrfs(
1911         __field(    u64, root_objectid  )
1912         __field(    u64, ino        )
1913         __field(    int, mod        )
1914     ),
1915 
1916     TP_fast_assign_btrfs(root->fs_info,
1917         __entry->root_objectid  = root->root_key.objectid;
1918         __entry->ino        = ino;
1919         __entry->mod        = mod;
1920     ),
1921 
1922     TP_printk_btrfs("root=%llu(%s) ino=%llu mod=%d",
1923             show_root_type(__entry->root_objectid),
1924             __entry->ino, __entry->mod)
1925 );
1926 
1927 DECLARE_EVENT_CLASS(btrfs__block_group,
1928     TP_PROTO(const struct btrfs_block_group *bg_cache),
1929 
1930     TP_ARGS(bg_cache),
1931 
1932     TP_STRUCT__entry_btrfs(
1933         __field(    u64,    bytenr      )
1934         __field(    u64,    len     )
1935         __field(    u64,    used        )
1936         __field(    u64,    flags       )
1937     ),
1938 
1939     TP_fast_assign_btrfs(bg_cache->fs_info,
1940         __entry->bytenr = bg_cache->start,
1941         __entry->len    = bg_cache->length,
1942         __entry->used   = bg_cache->used;
1943         __entry->flags  = bg_cache->flags;
1944     ),
1945 
1946     TP_printk_btrfs("bg bytenr=%llu len=%llu used=%llu flags=%llu(%s)",
1947         __entry->bytenr, __entry->len, __entry->used, __entry->flags,
1948         __print_flags(__entry->flags, "|", BTRFS_GROUP_FLAGS))
1949 );
1950 
1951 DEFINE_EVENT(btrfs__block_group, btrfs_remove_block_group,
1952     TP_PROTO(const struct btrfs_block_group *bg_cache),
1953 
1954     TP_ARGS(bg_cache)
1955 );
1956 
1957 DEFINE_EVENT(btrfs__block_group, btrfs_add_unused_block_group,
1958     TP_PROTO(const struct btrfs_block_group *bg_cache),
1959 
1960     TP_ARGS(bg_cache)
1961 );
1962 
1963 DEFINE_EVENT(btrfs__block_group, btrfs_add_reclaim_block_group,
1964     TP_PROTO(const struct btrfs_block_group *bg_cache),
1965 
1966     TP_ARGS(bg_cache)
1967 );
1968 
1969 DEFINE_EVENT(btrfs__block_group, btrfs_reclaim_block_group,
1970     TP_PROTO(const struct btrfs_block_group *bg_cache),
1971 
1972     TP_ARGS(bg_cache)
1973 );
1974 
1975 DEFINE_EVENT(btrfs__block_group, btrfs_skip_unused_block_group,
1976     TP_PROTO(const struct btrfs_block_group *bg_cache),
1977 
1978     TP_ARGS(bg_cache)
1979 );
1980 
1981 TRACE_EVENT(btrfs_set_extent_bit,
1982     TP_PROTO(const struct extent_io_tree *tree,
1983          u64 start, u64 len, unsigned set_bits),
1984 
1985     TP_ARGS(tree, start, len, set_bits),
1986 
1987     TP_STRUCT__entry_btrfs(
1988         __field(    unsigned,   owner   )
1989         __field(    u64,        ino )
1990         __field(    u64,        rootid  )
1991         __field(    u64,        start   )
1992         __field(    u64,        len )
1993         __field(    unsigned,   set_bits)
1994     ),
1995 
1996     TP_fast_assign_btrfs(tree->fs_info,
1997         __entry->owner = tree->owner;
1998         if (tree->private_data) {
1999             const struct inode *inode = tree->private_data;
2000 
2001             __entry->ino    = btrfs_ino(BTRFS_I(inode));
2002             __entry->rootid =
2003                 BTRFS_I(inode)->root->root_key.objectid;
2004         } else {
2005             __entry->ino    = 0;
2006             __entry->rootid = 0;
2007         }
2008         __entry->start      = start;
2009         __entry->len        = len;
2010         __entry->set_bits   = set_bits;
2011     ),
2012 
2013     TP_printk_btrfs(
2014         "io_tree=%s ino=%llu root=%llu start=%llu len=%llu set_bits=%s",
2015         __print_symbolic(__entry->owner, IO_TREE_OWNER), __entry->ino,
2016         __entry->rootid, __entry->start, __entry->len,
2017         __print_flags(__entry->set_bits, "|", EXTENT_FLAGS))
2018 );
2019 
2020 TRACE_EVENT(btrfs_clear_extent_bit,
2021     TP_PROTO(const struct extent_io_tree *tree,
2022          u64 start, u64 len, unsigned clear_bits),
2023 
2024     TP_ARGS(tree, start, len, clear_bits),
2025 
2026     TP_STRUCT__entry_btrfs(
2027         __field(    unsigned,   owner   )
2028         __field(    u64,        ino )
2029         __field(    u64,        rootid  )
2030         __field(    u64,        start   )
2031         __field(    u64,        len )
2032         __field(    unsigned,   clear_bits)
2033     ),
2034 
2035     TP_fast_assign_btrfs(tree->fs_info,
2036         __entry->owner = tree->owner;
2037         if (tree->private_data) {
2038             const struct inode *inode = tree->private_data;
2039 
2040             __entry->ino    = btrfs_ino(BTRFS_I(inode));
2041             __entry->rootid =
2042                 BTRFS_I(inode)->root->root_key.objectid;
2043         } else {
2044             __entry->ino    = 0;
2045             __entry->rootid = 0;
2046         }
2047         __entry->start      = start;
2048         __entry->len        = len;
2049         __entry->clear_bits = clear_bits;
2050     ),
2051 
2052     TP_printk_btrfs(
2053         "io_tree=%s ino=%llu root=%llu start=%llu len=%llu clear_bits=%s",
2054         __print_symbolic(__entry->owner, IO_TREE_OWNER), __entry->ino,
2055         __entry->rootid, __entry->start, __entry->len,
2056         __print_flags(__entry->clear_bits, "|", EXTENT_FLAGS))
2057 );
2058 
2059 TRACE_EVENT(btrfs_convert_extent_bit,
2060     TP_PROTO(const struct extent_io_tree *tree,
2061          u64 start, u64 len, unsigned set_bits, unsigned clear_bits),
2062 
2063     TP_ARGS(tree, start, len, set_bits, clear_bits),
2064 
2065     TP_STRUCT__entry_btrfs(
2066         __field(    unsigned,   owner   )
2067         __field(    u64,        ino )
2068         __field(    u64,        rootid  )
2069         __field(    u64,        start   )
2070         __field(    u64,        len )
2071         __field(    unsigned,   set_bits)
2072         __field(    unsigned,   clear_bits)
2073     ),
2074 
2075     TP_fast_assign_btrfs(tree->fs_info,
2076         __entry->owner = tree->owner;
2077         if (tree->private_data) {
2078             const struct inode *inode = tree->private_data;
2079 
2080             __entry->ino    = btrfs_ino(BTRFS_I(inode));
2081             __entry->rootid =
2082                 BTRFS_I(inode)->root->root_key.objectid;
2083         } else {
2084             __entry->ino    = 0;
2085             __entry->rootid = 0;
2086         }
2087         __entry->start      = start;
2088         __entry->len        = len;
2089         __entry->set_bits   = set_bits;
2090         __entry->clear_bits = clear_bits;
2091     ),
2092 
2093     TP_printk_btrfs(
2094 "io_tree=%s ino=%llu root=%llu start=%llu len=%llu set_bits=%s clear_bits=%s",
2095           __print_symbolic(__entry->owner, IO_TREE_OWNER), __entry->ino,
2096           __entry->rootid, __entry->start, __entry->len,
2097           __print_flags(__entry->set_bits , "|", EXTENT_FLAGS),
2098           __print_flags(__entry->clear_bits, "|", EXTENT_FLAGS))
2099 );
2100 
2101 DECLARE_EVENT_CLASS(btrfs_dump_space_info,
2102     TP_PROTO(struct btrfs_fs_info *fs_info,
2103          const struct btrfs_space_info *sinfo),
2104 
2105     TP_ARGS(fs_info, sinfo),
2106 
2107     TP_STRUCT__entry_btrfs(
2108         __field(    u64,    flags           )
2109         __field(    u64,    total_bytes     )
2110         __field(    u64,    bytes_used      )
2111         __field(    u64,    bytes_pinned        )
2112         __field(    u64,    bytes_reserved      )
2113         __field(    u64,    bytes_may_use       )
2114         __field(    u64,    bytes_readonly      )
2115         __field(    u64,    reclaim_size        )
2116         __field(    int,    clamp           )
2117         __field(    u64,    global_reserved     )
2118         __field(    u64,    trans_reserved      )
2119         __field(    u64,    delayed_refs_reserved   )
2120         __field(    u64,    delayed_reserved    )
2121         __field(    u64,    free_chunk_space    )
2122         __field(    u64,    delalloc_bytes      )
2123         __field(    u64,    ordered_bytes       )
2124     ),
2125 
2126     TP_fast_assign_btrfs(fs_info,
2127         __entry->flags          =   sinfo->flags;
2128         __entry->total_bytes        =   sinfo->total_bytes;
2129         __entry->bytes_used     =   sinfo->bytes_used;
2130         __entry->bytes_pinned       =   sinfo->bytes_pinned;
2131         __entry->bytes_reserved     =   sinfo->bytes_reserved;
2132         __entry->bytes_may_use      =   sinfo->bytes_may_use;
2133         __entry->bytes_readonly     =   sinfo->bytes_readonly;
2134         __entry->reclaim_size       =   sinfo->reclaim_size;
2135         __entry->clamp          =   sinfo->clamp;
2136         __entry->global_reserved    =   fs_info->global_block_rsv.reserved;
2137         __entry->trans_reserved     =   fs_info->trans_block_rsv.reserved;
2138         __entry->delayed_refs_reserved  =   fs_info->delayed_refs_rsv.reserved;
2139         __entry->delayed_reserved   =   fs_info->delayed_block_rsv.reserved;
2140         __entry->free_chunk_space   =   atomic64_read(&fs_info->free_chunk_space);
2141         __entry->delalloc_bytes     =   percpu_counter_sum_positive(&fs_info->delalloc_bytes);
2142         __entry->ordered_bytes      =   percpu_counter_sum_positive(&fs_info->ordered_bytes);
2143     ),
2144 
2145     TP_printk_btrfs("flags=%s total_bytes=%llu bytes_used=%llu "
2146             "bytes_pinned=%llu bytes_reserved=%llu "
2147             "bytes_may_use=%llu bytes_readonly=%llu "
2148             "reclaim_size=%llu clamp=%d global_reserved=%llu "
2149             "trans_reserved=%llu delayed_refs_reserved=%llu "
2150             "delayed_reserved=%llu chunk_free_space=%llu "
2151             "delalloc_bytes=%llu ordered_bytes=%llu",
2152             __print_flags(__entry->flags, "|", BTRFS_GROUP_FLAGS),
2153             __entry->total_bytes, __entry->bytes_used,
2154             __entry->bytes_pinned, __entry->bytes_reserved,
2155             __entry->bytes_may_use, __entry->bytes_readonly,
2156             __entry->reclaim_size, __entry->clamp,
2157             __entry->global_reserved, __entry->trans_reserved,
2158             __entry->delayed_refs_reserved,
2159             __entry->delayed_reserved, __entry->free_chunk_space,
2160             __entry->delalloc_bytes, __entry->ordered_bytes)
2161 );
2162 
2163 DEFINE_EVENT(btrfs_dump_space_info, btrfs_done_preemptive_reclaim,
2164     TP_PROTO(struct btrfs_fs_info *fs_info,
2165          const struct btrfs_space_info *sinfo),
2166     TP_ARGS(fs_info, sinfo)
2167 );
2168 
2169 DEFINE_EVENT(btrfs_dump_space_info, btrfs_fail_all_tickets,
2170     TP_PROTO(struct btrfs_fs_info *fs_info,
2171          const struct btrfs_space_info *sinfo),
2172     TP_ARGS(fs_info, sinfo)
2173 );
2174 
2175 TRACE_EVENT(btrfs_reserve_ticket,
2176     TP_PROTO(const struct btrfs_fs_info *fs_info, u64 flags, u64 bytes,
2177          u64 start_ns, int flush, int error),
2178 
2179     TP_ARGS(fs_info, flags, bytes, start_ns, flush, error),
2180 
2181     TP_STRUCT__entry_btrfs(
2182         __field(    u64,    flags       )
2183         __field(    u64,    bytes       )
2184         __field(    u64,    start_ns    )
2185         __field(    int,    flush       )
2186         __field(    int,    error       )
2187     ),
2188 
2189     TP_fast_assign_btrfs(fs_info,
2190         __entry->flags      = flags;
2191         __entry->bytes      = bytes;
2192         __entry->start_ns   = start_ns;
2193         __entry->flush      = flush;
2194         __entry->error      = error;
2195     ),
2196 
2197     TP_printk_btrfs("flags=%s bytes=%llu start_ns=%llu flush=%s error=%d",
2198             __print_flags(__entry->flags, "|", BTRFS_GROUP_FLAGS),
2199             __entry->bytes, __entry->start_ns,
2200             __print_symbolic(__entry->flush, FLUSH_ACTIONS),
2201             __entry->error)
2202 );
2203 
2204 DECLARE_EVENT_CLASS(btrfs_sleep_tree_lock,
2205     TP_PROTO(const struct extent_buffer *eb, u64 start_ns),
2206 
2207     TP_ARGS(eb, start_ns),
2208 
2209     TP_STRUCT__entry_btrfs(
2210         __field(    u64,    block       )
2211         __field(    u64,    generation  )
2212         __field(    u64,    start_ns    )
2213         __field(    u64,    end_ns      )
2214         __field(    u64,    diff_ns     )
2215         __field(    u64,    owner       )
2216         __field(    int,    is_log_tree )
2217     ),
2218 
2219     TP_fast_assign_btrfs(eb->fs_info,
2220         __entry->block      = eb->start;
2221         __entry->generation = btrfs_header_generation(eb);
2222         __entry->start_ns   = start_ns;
2223         __entry->end_ns     = ktime_get_ns();
2224         __entry->diff_ns    = __entry->end_ns - start_ns;
2225         __entry->owner      = btrfs_header_owner(eb);
2226         __entry->is_log_tree    = (eb->log_index >= 0);
2227     ),
2228 
2229     TP_printk_btrfs(
2230 "block=%llu generation=%llu start_ns=%llu end_ns=%llu diff_ns=%llu owner=%llu is_log_tree=%d",
2231         __entry->block, __entry->generation,
2232         __entry->start_ns, __entry->end_ns, __entry->diff_ns,
2233         __entry->owner, __entry->is_log_tree)
2234 );
2235 
2236 DEFINE_EVENT(btrfs_sleep_tree_lock, btrfs_tree_read_lock,
2237     TP_PROTO(const struct extent_buffer *eb, u64 start_ns),
2238 
2239     TP_ARGS(eb, start_ns)
2240 );
2241 
2242 DEFINE_EVENT(btrfs_sleep_tree_lock, btrfs_tree_lock,
2243     TP_PROTO(const struct extent_buffer *eb, u64 start_ns),
2244 
2245     TP_ARGS(eb, start_ns)
2246 );
2247 
2248 DECLARE_EVENT_CLASS(btrfs_locking_events,
2249     TP_PROTO(const struct extent_buffer *eb),
2250 
2251     TP_ARGS(eb),
2252 
2253     TP_STRUCT__entry_btrfs(
2254         __field(    u64,    block       )
2255         __field(    u64,    generation  )
2256         __field(    u64,    owner       )
2257         __field(    int,    is_log_tree )
2258     ),
2259 
2260     TP_fast_assign_btrfs(eb->fs_info,
2261         __entry->block      = eb->start;
2262         __entry->generation = btrfs_header_generation(eb);
2263         __entry->owner      = btrfs_header_owner(eb);
2264         __entry->is_log_tree    = (eb->log_index >= 0);
2265     ),
2266 
2267     TP_printk_btrfs("block=%llu generation=%llu owner=%llu is_log_tree=%d",
2268         __entry->block, __entry->generation,
2269         __entry->owner, __entry->is_log_tree)
2270 );
2271 
2272 #define DEFINE_BTRFS_LOCK_EVENT(name)               \
2273 DEFINE_EVENT(btrfs_locking_events, name,            \
2274         TP_PROTO(const struct extent_buffer *eb),   \
2275                                 \
2276         TP_ARGS(eb)                 \
2277 )
2278 
2279 DEFINE_BTRFS_LOCK_EVENT(btrfs_tree_unlock);
2280 DEFINE_BTRFS_LOCK_EVENT(btrfs_tree_read_unlock);
2281 DEFINE_BTRFS_LOCK_EVENT(btrfs_tree_read_unlock_blocking);
2282 DEFINE_BTRFS_LOCK_EVENT(btrfs_set_lock_blocking_read);
2283 DEFINE_BTRFS_LOCK_EVENT(btrfs_set_lock_blocking_write);
2284 DEFINE_BTRFS_LOCK_EVENT(btrfs_try_tree_read_lock);
2285 DEFINE_BTRFS_LOCK_EVENT(btrfs_try_tree_write_lock);
2286 DEFINE_BTRFS_LOCK_EVENT(btrfs_tree_read_lock_atomic);
2287 
2288 DECLARE_EVENT_CLASS(btrfs__space_info_update,
2289 
2290     TP_PROTO(const struct btrfs_fs_info *fs_info,
2291          const struct btrfs_space_info *sinfo, u64 old, s64 diff),
2292 
2293     TP_ARGS(fs_info, sinfo, old, diff),
2294 
2295     TP_STRUCT__entry_btrfs(
2296         __field(    u64,    type        )
2297         __field(    u64,    old     )
2298         __field(    s64,    diff        )
2299     ),
2300 
2301     TP_fast_assign_btrfs(fs_info,
2302         __entry->type   = sinfo->flags;
2303         __entry->old    = old;
2304         __entry->diff   = diff;
2305     ),
2306     TP_printk_btrfs("type=%s old=%llu diff=%lld",
2307         __print_flags(__entry->type, "|", BTRFS_GROUP_FLAGS),
2308         __entry->old, __entry->diff)
2309 );
2310 
2311 DEFINE_EVENT(btrfs__space_info_update, update_bytes_may_use,
2312 
2313     TP_PROTO(const struct btrfs_fs_info *fs_info,
2314          const struct btrfs_space_info *sinfo, u64 old, s64 diff),
2315 
2316     TP_ARGS(fs_info, sinfo, old, diff)
2317 );
2318 
2319 DEFINE_EVENT(btrfs__space_info_update, update_bytes_pinned,
2320 
2321     TP_PROTO(const struct btrfs_fs_info *fs_info,
2322          const struct btrfs_space_info *sinfo, u64 old, s64 diff),
2323 
2324     TP_ARGS(fs_info, sinfo, old, diff)
2325 );
2326 
2327 DECLARE_EVENT_CLASS(btrfs_raid56_bio,
2328 
2329     TP_PROTO(const struct btrfs_raid_bio *rbio,
2330          const struct bio *bio,
2331          const struct raid56_bio_trace_info *trace_info),
2332 
2333     TP_ARGS(rbio, bio, trace_info),
2334 
2335     TP_STRUCT__entry_btrfs(
2336         __field(    u64,    full_stripe )
2337         __field(    u64,    physical    )
2338         __field(    u64,    devid       )
2339         __field(    u32,    offset      )
2340         __field(    u32,    len     )
2341         __field(    u8, opf     )
2342         __field(    u8, total_stripes   )
2343         __field(    u8, real_stripes    )
2344         __field(    u8, nr_data     )
2345         __field(    u8, stripe_nr   )
2346     ),
2347 
2348     TP_fast_assign_btrfs(rbio->bioc->fs_info,
2349         __entry->full_stripe    = rbio->bioc->raid_map[0];
2350         __entry->physical   = bio->bi_iter.bi_sector << SECTOR_SHIFT;
2351         __entry->len        = bio->bi_iter.bi_size;
2352         __entry->opf        = bio_op(bio);
2353         __entry->devid      = trace_info->devid;
2354         __entry->offset     = trace_info->offset;
2355         __entry->stripe_nr  = trace_info->stripe_nr;
2356         __entry->total_stripes  = rbio->bioc->num_stripes;
2357         __entry->real_stripes   = rbio->real_stripes;
2358         __entry->nr_data    = rbio->nr_data;
2359     ),
2360     /*
2361      * For type output, we need to output things like "DATA1"
2362      * (the first data stripe), "DATA2" (the second data stripe),
2363      * "PQ1" (P stripe),"PQ2" (Q stripe), "REPLACE0" (replace target device).
2364      */
2365     TP_printk_btrfs(
2366 "full_stripe=%llu devid=%lld type=%s%d offset=%d opf=0x%x physical=%llu len=%u",
2367         __entry->full_stripe, __entry->devid,
2368         (__entry->stripe_nr < __entry->nr_data) ? "DATA" :
2369             ((__entry->stripe_nr < __entry->real_stripes) ? "PQ" :
2370              "REPLACE"),
2371         (__entry->stripe_nr < __entry->nr_data) ?
2372             (__entry->stripe_nr + 1) :
2373             ((__entry->stripe_nr < __entry->real_stripes) ?
2374              (__entry->stripe_nr - __entry->nr_data + 1) : 0),
2375         __entry->offset, __entry->opf, __entry->physical, __entry->len)
2376 );
2377 
2378 DEFINE_EVENT(btrfs_raid56_bio, raid56_read_partial,
2379     TP_PROTO(const struct btrfs_raid_bio *rbio,
2380          const struct bio *bio,
2381          const struct raid56_bio_trace_info *trace_info),
2382 
2383     TP_ARGS(rbio, bio, trace_info)
2384 );
2385 
2386 DEFINE_EVENT(btrfs_raid56_bio, raid56_write_stripe,
2387     TP_PROTO(const struct btrfs_raid_bio *rbio,
2388          const struct bio *bio,
2389          const struct raid56_bio_trace_info *trace_info),
2390 
2391     TP_ARGS(rbio, bio, trace_info)
2392 );
2393 
2394 
2395 DEFINE_EVENT(btrfs_raid56_bio, raid56_scrub_write_stripe,
2396     TP_PROTO(const struct btrfs_raid_bio *rbio,
2397          const struct bio *bio,
2398          const struct raid56_bio_trace_info *trace_info),
2399 
2400     TP_ARGS(rbio, bio, trace_info)
2401 );
2402 
2403 DEFINE_EVENT(btrfs_raid56_bio, raid56_scrub_read,
2404     TP_PROTO(const struct btrfs_raid_bio *rbio,
2405          const struct bio *bio,
2406          const struct raid56_bio_trace_info *trace_info),
2407 
2408     TP_ARGS(rbio, bio, trace_info)
2409 );
2410 
2411 DEFINE_EVENT(btrfs_raid56_bio, raid56_scrub_read_recover,
2412     TP_PROTO(const struct btrfs_raid_bio *rbio,
2413          const struct bio *bio,
2414          const struct raid56_bio_trace_info *trace_info),
2415 
2416     TP_ARGS(rbio, bio, trace_info)
2417 );
2418 
2419 #endif /* _TRACE_BTRFS_H */
2420 
2421 /* This part must be outside protection */
2422 #include <trace/define_trace.h>