| 1 | // SPDX-License-Identifier: GPL-2.0 |
| 2 | /* |
| 3 | * Copyright (c) 2009, Christoph Hellwig |
| 4 | * All Rights Reserved. |
| 5 | * |
| 6 | * NOTE: none of these tracepoints shall be considered a stable kernel ABI |
| 7 | * as they can change at any time. |
| 8 | * |
| 9 | * Current conventions for printing numbers measuring specific units: |
| 10 | * |
| 11 | * agno: allocation group number |
| 12 | * |
| 13 | * agino: per-AG inode number |
| 14 | * ino: filesystem inode number |
| 15 | * |
| 16 | * agbno: per-AG block number in fs blocks |
| 17 | * rgbno: per-rtgroup block number in fs blocks |
| 18 | * startblock: physical block number for file mappings. This is either a |
| 19 | * segmented fsblock for data device mappings, or a rfsblock |
| 20 | * for realtime device mappings |
| 21 | * fsbcount: number of blocks in an extent, in fs blocks |
| 22 | * |
| 23 | * gbno: generic allocation group block number. This is an agbno for |
| 24 | * space in a per-AG or a rgbno for space in a realtime group. |
| 25 | * |
| 26 | * daddr: physical block number in 512b blocks |
| 27 | * bbcount: number of blocks in a physical extent, in 512b blocks |
| 28 | * |
| 29 | * rtx: physical rt extent number for extent mappings |
| 30 | * rtxcount: number of rt extents in an extent mapping |
| 31 | * |
| 32 | * owner: reverse-mapping owner, usually inodes |
| 33 | * |
| 34 | * fileoff: file offset, in fs blocks |
| 35 | * pos: file offset, in bytes |
| 36 | * bytecount: number of bytes |
| 37 | * |
| 38 | * dablk: directory or xattr block offset, in filesystem blocks |
| 39 | * |
| 40 | * disize: ondisk file size, in bytes |
| 41 | * isize: incore file size, in bytes |
| 42 | * |
| 43 | * forkoff: inode fork offset, in bytes |
| 44 | * |
| 45 | * ireccount: number of inode records |
| 46 | * |
| 47 | * Numbers describing space allocations (blocks, extents, inodes) should be |
| 48 | * formatted in hexadecimal. |
| 49 | */ |
| 50 | #undef TRACE_SYSTEM |
| 51 | #define TRACE_SYSTEM xfs |
| 52 | |
| 53 | #if !defined(_TRACE_XFS_H) || defined(TRACE_HEADER_MULTI_READ) |
| 54 | #define _TRACE_XFS_H |
| 55 | |
| 56 | #include <linux/tracepoint.h> |
| 57 | |
| 58 | struct xfs_agf; |
| 59 | struct xfs_alloc_arg; |
| 60 | struct xfs_attr_list_context; |
| 61 | struct xfs_buf_log_item; |
| 62 | struct xfs_da_args; |
| 63 | struct xfs_da_node_entry; |
| 64 | struct xfs_dquot; |
| 65 | struct xfs_log_item; |
| 66 | struct xlog; |
| 67 | struct xlog_ticket; |
| 68 | struct xlog_recover; |
| 69 | struct xlog_recover_item; |
| 70 | struct ; |
| 71 | struct xlog_in_core; |
| 72 | struct xfs_buf_log_format; |
| 73 | struct xfs_inode_log_format; |
| 74 | struct xfs_bmbt_irec; |
| 75 | struct xfs_btree_cur; |
| 76 | struct xfs_defer_op_type; |
| 77 | struct xfs_refcount_irec; |
| 78 | struct xfs_fsmap; |
| 79 | struct xfs_fsmap_irec; |
| 80 | struct xfs_group; |
| 81 | struct xfs_rmap_irec; |
| 82 | struct xfs_icreate_log; |
| 83 | struct xfs_iunlink_item; |
| 84 | struct xfs_owner_info; |
| 85 | struct xfs_trans_res; |
| 86 | struct xfs_inobt_rec_incore; |
| 87 | union xfs_btree_ptr; |
| 88 | struct xfs_dqtrx; |
| 89 | struct xfs_icwalk; |
| 90 | struct xfs_perag; |
| 91 | struct xfbtree; |
| 92 | struct xfs_btree_ops; |
| 93 | struct xfs_bmap_intent; |
| 94 | struct xfs_exchmaps_intent; |
| 95 | struct xfs_exchmaps_req; |
| 96 | struct xfs_exchrange; |
| 97 | struct xfs_getparents; |
| 98 | struct xfs_parent_irec; |
| 99 | struct xfs_attrlist_cursor_kern; |
| 100 | struct xfs_extent_free_item; |
| 101 | struct xfs_rmap_intent; |
| 102 | struct xfs_refcount_intent; |
| 103 | struct xfs_metadir_update; |
| 104 | struct xfs_rtgroup; |
| 105 | struct xfs_open_zone; |
| 106 | |
| 107 | #define XFS_ATTR_FILTER_FLAGS \ |
| 108 | { XFS_ATTR_ROOT, "ROOT" }, \ |
| 109 | { XFS_ATTR_SECURE, "SECURE" }, \ |
| 110 | { XFS_ATTR_INCOMPLETE, "INCOMPLETE" }, \ |
| 111 | { XFS_ATTR_PARENT, "PARENT" } |
| 112 | |
| 113 | DECLARE_EVENT_CLASS(xfs_attr_list_class, |
| 114 | TP_PROTO(struct xfs_attr_list_context *ctx), |
| 115 | TP_ARGS(ctx), |
| 116 | TP_STRUCT__entry( |
| 117 | __field(dev_t, dev) |
| 118 | __field(xfs_ino_t, ino) |
| 119 | __field(u32, hashval) |
| 120 | __field(u32, blkno) |
| 121 | __field(u32, offset) |
| 122 | __field(void *, buffer) |
| 123 | __field(int, bufsize) |
| 124 | __field(int, count) |
| 125 | __field(int, firstu) |
| 126 | __field(int, dupcnt) |
| 127 | __field(unsigned int, attr_filter) |
| 128 | ), |
| 129 | TP_fast_assign( |
| 130 | __entry->dev = VFS_I(ctx->dp)->i_sb->s_dev; |
| 131 | __entry->ino = ctx->dp->i_ino; |
| 132 | __entry->hashval = ctx->cursor.hashval; |
| 133 | __entry->blkno = ctx->cursor.blkno; |
| 134 | __entry->offset = ctx->cursor.offset; |
| 135 | __entry->buffer = ctx->buffer; |
| 136 | __entry->bufsize = ctx->bufsize; |
| 137 | __entry->count = ctx->count; |
| 138 | __entry->firstu = ctx->firstu; |
| 139 | __entry->attr_filter = ctx->attr_filter; |
| 140 | ), |
| 141 | TP_printk("dev %d:%d ino 0x%llx cursor h/b/o 0x%x/0x%x/%u dupcnt %u " |
| 142 | "buffer %p size %u count %u firstu %u filter %s" , |
| 143 | MAJOR(__entry->dev), MINOR(__entry->dev), |
| 144 | __entry->ino, |
| 145 | __entry->hashval, |
| 146 | __entry->blkno, |
| 147 | __entry->offset, |
| 148 | __entry->dupcnt, |
| 149 | __entry->buffer, |
| 150 | __entry->bufsize, |
| 151 | __entry->count, |
| 152 | __entry->firstu, |
| 153 | __print_flags(__entry->attr_filter, "|" , |
| 154 | XFS_ATTR_FILTER_FLAGS) |
| 155 | ) |
| 156 | ) |
| 157 | |
| 158 | #define DEFINE_ATTR_LIST_EVENT(name) \ |
| 159 | DEFINE_EVENT(xfs_attr_list_class, name, \ |
| 160 | TP_PROTO(struct xfs_attr_list_context *ctx), \ |
| 161 | TP_ARGS(ctx)) |
| 162 | DEFINE_ATTR_LIST_EVENT(xfs_attr_list_sf); |
| 163 | DEFINE_ATTR_LIST_EVENT(xfs_attr_list_sf_all); |
| 164 | DEFINE_ATTR_LIST_EVENT(xfs_attr_list_leaf); |
| 165 | DEFINE_ATTR_LIST_EVENT(xfs_attr_list_leaf_end); |
| 166 | DEFINE_ATTR_LIST_EVENT(xfs_attr_list_full); |
| 167 | DEFINE_ATTR_LIST_EVENT(xfs_attr_list_add); |
| 168 | DEFINE_ATTR_LIST_EVENT(xfs_attr_list_wrong_blk); |
| 169 | DEFINE_ATTR_LIST_EVENT(xfs_attr_list_notfound); |
| 170 | DEFINE_ATTR_LIST_EVENT(xfs_attr_leaf_list); |
| 171 | DEFINE_ATTR_LIST_EVENT(xfs_attr_node_list); |
| 172 | |
| 173 | TRACE_EVENT(xfs_calc_atomic_write_unit_max, |
| 174 | TP_PROTO(struct xfs_mount *mp, enum xfs_group_type type, |
| 175 | unsigned int max_write, unsigned int max_ioend, |
| 176 | unsigned int max_gsize, unsigned int awu_max), |
| 177 | TP_ARGS(mp, type, max_write, max_ioend, max_gsize, awu_max), |
| 178 | TP_STRUCT__entry( |
| 179 | __field(dev_t, dev) |
| 180 | __field(enum xfs_group_type, type) |
| 181 | __field(unsigned int, max_write) |
| 182 | __field(unsigned int, max_ioend) |
| 183 | __field(unsigned int, max_gsize) |
| 184 | __field(unsigned int, awu_max) |
| 185 | ), |
| 186 | TP_fast_assign( |
| 187 | __entry->dev = mp->m_super->s_dev; |
| 188 | __entry->type = type; |
| 189 | __entry->max_write = max_write; |
| 190 | __entry->max_ioend = max_ioend; |
| 191 | __entry->max_gsize = max_gsize; |
| 192 | __entry->awu_max = awu_max; |
| 193 | ), |
| 194 | TP_printk("dev %d:%d %s max_write %u max_ioend %u max_gsize %u awu_max %u" , |
| 195 | MAJOR(__entry->dev), MINOR(__entry->dev), |
| 196 | __print_symbolic(__entry->type, XG_TYPE_STRINGS), |
| 197 | __entry->max_write, |
| 198 | __entry->max_ioend, |
| 199 | __entry->max_gsize, |
| 200 | __entry->awu_max) |
| 201 | ); |
| 202 | |
| 203 | TRACE_EVENT(xfs_calc_max_atomic_write_fsblocks, |
| 204 | TP_PROTO(struct xfs_mount *mp, unsigned int per_intent, |
| 205 | unsigned int step_size, unsigned int logres, |
| 206 | unsigned int blockcount), |
| 207 | TP_ARGS(mp, per_intent, step_size, logres, blockcount), |
| 208 | TP_STRUCT__entry( |
| 209 | __field(dev_t, dev) |
| 210 | __field(unsigned int, per_intent) |
| 211 | __field(unsigned int, step_size) |
| 212 | __field(unsigned int, logres) |
| 213 | __field(unsigned int, blockcount) |
| 214 | ), |
| 215 | TP_fast_assign( |
| 216 | __entry->dev = mp->m_super->s_dev; |
| 217 | __entry->per_intent = per_intent; |
| 218 | __entry->step_size = step_size; |
| 219 | __entry->logres = logres; |
| 220 | __entry->blockcount = blockcount; |
| 221 | ), |
| 222 | TP_printk("dev %d:%d per_intent %u step_size %u logres %u blockcount %u" , |
| 223 | MAJOR(__entry->dev), MINOR(__entry->dev), |
| 224 | __entry->per_intent, |
| 225 | __entry->step_size, |
| 226 | __entry->logres, |
| 227 | __entry->blockcount) |
| 228 | ); |
| 229 | |
| 230 | TRACE_EVENT(xfs_calc_max_atomic_write_log_geometry, |
| 231 | TP_PROTO(struct xfs_mount *mp, unsigned int per_intent, |
| 232 | unsigned int step_size, unsigned int blockcount, |
| 233 | unsigned int min_logblocks, unsigned int logres), |
| 234 | TP_ARGS(mp, per_intent, step_size, blockcount, min_logblocks, logres), |
| 235 | TP_STRUCT__entry( |
| 236 | __field(dev_t, dev) |
| 237 | __field(unsigned int, per_intent) |
| 238 | __field(unsigned int, step_size) |
| 239 | __field(unsigned int, blockcount) |
| 240 | __field(unsigned int, min_logblocks) |
| 241 | __field(unsigned int, cur_logblocks) |
| 242 | __field(unsigned int, logres) |
| 243 | ), |
| 244 | TP_fast_assign( |
| 245 | __entry->dev = mp->m_super->s_dev; |
| 246 | __entry->per_intent = per_intent; |
| 247 | __entry->step_size = step_size; |
| 248 | __entry->blockcount = blockcount; |
| 249 | __entry->min_logblocks = min_logblocks; |
| 250 | __entry->cur_logblocks = mp->m_sb.sb_logblocks; |
| 251 | __entry->logres = logres; |
| 252 | ), |
| 253 | TP_printk("dev %d:%d per_intent %u step_size %u blockcount %u min_logblocks %u logblocks %u logres %u" , |
| 254 | MAJOR(__entry->dev), MINOR(__entry->dev), |
| 255 | __entry->per_intent, |
| 256 | __entry->step_size, |
| 257 | __entry->blockcount, |
| 258 | __entry->min_logblocks, |
| 259 | __entry->cur_logblocks, |
| 260 | __entry->logres) |
| 261 | ); |
| 262 | |
| 263 | TRACE_EVENT(xlog_intent_recovery_failed, |
| 264 | TP_PROTO(struct xfs_mount *mp, const struct xfs_defer_op_type *ops, |
| 265 | int error), |
| 266 | TP_ARGS(mp, ops, error), |
| 267 | TP_STRUCT__entry( |
| 268 | __field(dev_t, dev) |
| 269 | __string(name, ops->name) |
| 270 | __field(int, error) |
| 271 | ), |
| 272 | TP_fast_assign( |
| 273 | __entry->dev = mp->m_super->s_dev; |
| 274 | __assign_str(name); |
| 275 | __entry->error = error; |
| 276 | ), |
| 277 | TP_printk("dev %d:%d optype %s error %d" , |
| 278 | MAJOR(__entry->dev), MINOR(__entry->dev), |
| 279 | __get_str(name), |
| 280 | __entry->error) |
| 281 | ); |
| 282 | |
| 283 | DECLARE_EVENT_CLASS(xfs_perag_class, |
| 284 | TP_PROTO(const struct xfs_perag *pag, unsigned long caller_ip), |
| 285 | TP_ARGS(pag, caller_ip), |
| 286 | TP_STRUCT__entry( |
| 287 | __field(dev_t, dev) |
| 288 | __field(xfs_agnumber_t, agno) |
| 289 | __field(int, refcount) |
| 290 | __field(int, active_refcount) |
| 291 | __field(unsigned long, caller_ip) |
| 292 | ), |
| 293 | TP_fast_assign( |
| 294 | __entry->dev = pag_mount(pag)->m_super->s_dev; |
| 295 | __entry->agno = pag_agno(pag); |
| 296 | __entry->refcount = atomic_read(&pag->pag_group.xg_ref); |
| 297 | __entry->active_refcount = |
| 298 | atomic_read(&pag->pag_group.xg_active_ref); |
| 299 | __entry->caller_ip = caller_ip; |
| 300 | ), |
| 301 | TP_printk("dev %d:%d agno 0x%x passive refs %d active refs %d caller %pS" , |
| 302 | MAJOR(__entry->dev), MINOR(__entry->dev), |
| 303 | __entry->agno, |
| 304 | __entry->refcount, |
| 305 | __entry->active_refcount, |
| 306 | (char *)__entry->caller_ip) |
| 307 | ); |
| 308 | |
| 309 | #define DEFINE_PERAG_REF_EVENT(name) \ |
| 310 | DEFINE_EVENT(xfs_perag_class, name, \ |
| 311 | TP_PROTO(const struct xfs_perag *pag, unsigned long caller_ip), \ |
| 312 | TP_ARGS(pag, caller_ip)) |
| 313 | DEFINE_PERAG_REF_EVENT(xfs_perag_set_inode_tag); |
| 314 | DEFINE_PERAG_REF_EVENT(xfs_perag_clear_inode_tag); |
| 315 | DEFINE_PERAG_REF_EVENT(xfs_reclaim_inodes_count); |
| 316 | |
| 317 | TRACE_DEFINE_ENUM(XG_TYPE_AG); |
| 318 | TRACE_DEFINE_ENUM(XG_TYPE_RTG); |
| 319 | |
| 320 | DECLARE_EVENT_CLASS(xfs_group_class, |
| 321 | TP_PROTO(struct xfs_group *xg, unsigned long caller_ip), |
| 322 | TP_ARGS(xg, caller_ip), |
| 323 | TP_STRUCT__entry( |
| 324 | __field(dev_t, dev) |
| 325 | __field(enum xfs_group_type, type) |
| 326 | __field(xfs_agnumber_t, agno) |
| 327 | __field(int, refcount) |
| 328 | __field(int, active_refcount) |
| 329 | __field(unsigned long, caller_ip) |
| 330 | ), |
| 331 | TP_fast_assign( |
| 332 | __entry->dev = xg->xg_mount->m_super->s_dev; |
| 333 | __entry->type = xg->xg_type; |
| 334 | __entry->agno = xg->xg_gno; |
| 335 | __entry->refcount = atomic_read(&xg->xg_ref); |
| 336 | __entry->active_refcount = atomic_read(&xg->xg_active_ref); |
| 337 | __entry->caller_ip = caller_ip; |
| 338 | ), |
| 339 | TP_printk("dev %d:%d %sno 0x%x passive refs %d active refs %d caller %pS" , |
| 340 | MAJOR(__entry->dev), MINOR(__entry->dev), |
| 341 | __print_symbolic(__entry->type, XG_TYPE_STRINGS), |
| 342 | __entry->agno, |
| 343 | __entry->refcount, |
| 344 | __entry->active_refcount, |
| 345 | (char *)__entry->caller_ip) |
| 346 | ); |
| 347 | |
| 348 | #define DEFINE_GROUP_REF_EVENT(name) \ |
| 349 | DEFINE_EVENT(xfs_group_class, name, \ |
| 350 | TP_PROTO(struct xfs_group *xg, unsigned long caller_ip), \ |
| 351 | TP_ARGS(xg, caller_ip)) |
| 352 | DEFINE_GROUP_REF_EVENT(xfs_group_get); |
| 353 | DEFINE_GROUP_REF_EVENT(xfs_group_hold); |
| 354 | DEFINE_GROUP_REF_EVENT(xfs_group_put); |
| 355 | DEFINE_GROUP_REF_EVENT(xfs_group_grab); |
| 356 | DEFINE_GROUP_REF_EVENT(xfs_group_grab_next_tag); |
| 357 | DEFINE_GROUP_REF_EVENT(xfs_group_rele); |
| 358 | |
| 359 | #ifdef CONFIG_XFS_RT |
| 360 | DECLARE_EVENT_CLASS(xfs_zone_class, |
| 361 | TP_PROTO(struct xfs_rtgroup *rtg), |
| 362 | TP_ARGS(rtg), |
| 363 | TP_STRUCT__entry( |
| 364 | __field(dev_t, dev) |
| 365 | __field(xfs_rgnumber_t, rgno) |
| 366 | __field(xfs_rgblock_t, used) |
| 367 | __field(unsigned int, nr_open) |
| 368 | ), |
| 369 | TP_fast_assign( |
| 370 | struct xfs_mount *mp = rtg_mount(rtg); |
| 371 | |
| 372 | __entry->dev = mp->m_super->s_dev; |
| 373 | __entry->rgno = rtg_rgno(rtg); |
| 374 | __entry->used = rtg_rmap(rtg)->i_used_blocks; |
| 375 | __entry->nr_open = mp->m_zone_info->zi_nr_open_zones; |
| 376 | ), |
| 377 | TP_printk("dev %d:%d rgno 0x%x used 0x%x nr_open %u" , |
| 378 | MAJOR(__entry->dev), MINOR(__entry->dev), |
| 379 | __entry->rgno, |
| 380 | __entry->used, |
| 381 | __entry->nr_open) |
| 382 | ); |
| 383 | |
| 384 | #define DEFINE_ZONE_EVENT(name) \ |
| 385 | DEFINE_EVENT(xfs_zone_class, name, \ |
| 386 | TP_PROTO(struct xfs_rtgroup *rtg), \ |
| 387 | TP_ARGS(rtg)) |
| 388 | DEFINE_ZONE_EVENT(xfs_zone_emptied); |
| 389 | DEFINE_ZONE_EVENT(xfs_zone_full); |
| 390 | DEFINE_ZONE_EVENT(xfs_zone_opened); |
| 391 | DEFINE_ZONE_EVENT(xfs_zone_reset); |
| 392 | DEFINE_ZONE_EVENT(xfs_zone_gc_target_opened); |
| 393 | |
| 394 | TRACE_EVENT(xfs_zone_free_blocks, |
| 395 | TP_PROTO(struct xfs_rtgroup *rtg, xfs_rgblock_t rgbno, |
| 396 | xfs_extlen_t len), |
| 397 | TP_ARGS(rtg, rgbno, len), |
| 398 | TP_STRUCT__entry( |
| 399 | __field(dev_t, dev) |
| 400 | __field(xfs_rgnumber_t, rgno) |
| 401 | __field(xfs_rgblock_t, used) |
| 402 | __field(xfs_rgblock_t, rgbno) |
| 403 | __field(xfs_extlen_t, len) |
| 404 | ), |
| 405 | TP_fast_assign( |
| 406 | __entry->dev = rtg_mount(rtg)->m_super->s_dev; |
| 407 | __entry->rgno = rtg_rgno(rtg); |
| 408 | __entry->used = rtg_rmap(rtg)->i_used_blocks; |
| 409 | __entry->rgbno = rgbno; |
| 410 | __entry->len = len; |
| 411 | ), |
| 412 | TP_printk("dev %d:%d rgno 0x%x used 0x%x rgbno 0x%x len 0x%x" , |
| 413 | MAJOR(__entry->dev), MINOR(__entry->dev), |
| 414 | __entry->rgno, |
| 415 | __entry->used, |
| 416 | __entry->rgbno, |
| 417 | __entry->len) |
| 418 | ); |
| 419 | |
| 420 | DECLARE_EVENT_CLASS(xfs_zone_alloc_class, |
| 421 | TP_PROTO(struct xfs_open_zone *oz, xfs_rgblock_t rgbno, |
| 422 | xfs_extlen_t len), |
| 423 | TP_ARGS(oz, rgbno, len), |
| 424 | TP_STRUCT__entry( |
| 425 | __field(dev_t, dev) |
| 426 | __field(xfs_rgnumber_t, rgno) |
| 427 | __field(xfs_rgblock_t, used) |
| 428 | __field(xfs_rgblock_t, allocated) |
| 429 | __field(xfs_rgblock_t, written) |
| 430 | __field(xfs_rgblock_t, rgbno) |
| 431 | __field(xfs_extlen_t, len) |
| 432 | ), |
| 433 | TP_fast_assign( |
| 434 | __entry->dev = rtg_mount(oz->oz_rtg)->m_super->s_dev; |
| 435 | __entry->rgno = rtg_rgno(oz->oz_rtg); |
| 436 | __entry->used = rtg_rmap(oz->oz_rtg)->i_used_blocks; |
| 437 | __entry->allocated = oz->oz_allocated; |
| 438 | __entry->written = oz->oz_written; |
| 439 | __entry->rgbno = rgbno; |
| 440 | __entry->len = len; |
| 441 | ), |
| 442 | TP_printk("dev %d:%d rgno 0x%x used 0x%x alloced 0x%x written 0x%x rgbno 0x%x len 0x%x" , |
| 443 | MAJOR(__entry->dev), MINOR(__entry->dev), |
| 444 | __entry->rgno, |
| 445 | __entry->used, |
| 446 | __entry->allocated, |
| 447 | __entry->written, |
| 448 | __entry->rgbno, |
| 449 | __entry->len) |
| 450 | ); |
| 451 | |
| 452 | #define DEFINE_ZONE_ALLOC_EVENT(name) \ |
| 453 | DEFINE_EVENT(xfs_zone_alloc_class, name, \ |
| 454 | TP_PROTO(struct xfs_open_zone *oz, xfs_rgblock_t rgbno, \ |
| 455 | xfs_extlen_t len), \ |
| 456 | TP_ARGS(oz, rgbno, len)) |
| 457 | DEFINE_ZONE_ALLOC_EVENT(xfs_zone_record_blocks); |
| 458 | DEFINE_ZONE_ALLOC_EVENT(xfs_zone_skip_blocks); |
| 459 | DEFINE_ZONE_ALLOC_EVENT(xfs_zone_alloc_blocks); |
| 460 | |
| 461 | TRACE_EVENT(xfs_zone_gc_select_victim, |
| 462 | TP_PROTO(struct xfs_rtgroup *rtg, unsigned int bucket), |
| 463 | TP_ARGS(rtg, bucket), |
| 464 | TP_STRUCT__entry( |
| 465 | __field(dev_t, dev) |
| 466 | __field(xfs_rgnumber_t, rgno) |
| 467 | __field(xfs_rgblock_t, used) |
| 468 | __field(unsigned int, bucket) |
| 469 | ), |
| 470 | TP_fast_assign( |
| 471 | __entry->dev = rtg_mount(rtg)->m_super->s_dev; |
| 472 | __entry->rgno = rtg_rgno(rtg); |
| 473 | __entry->used = rtg_rmap(rtg)->i_used_blocks; |
| 474 | __entry->bucket = bucket; |
| 475 | ), |
| 476 | TP_printk("dev %d:%d rgno 0x%x used 0x%x bucket %u" , |
| 477 | MAJOR(__entry->dev), MINOR(__entry->dev), |
| 478 | __entry->rgno, |
| 479 | __entry->used, |
| 480 | __entry->bucket) |
| 481 | ); |
| 482 | |
| 483 | TRACE_EVENT(xfs_zones_mount, |
| 484 | TP_PROTO(struct xfs_mount *mp), |
| 485 | TP_ARGS(mp), |
| 486 | TP_STRUCT__entry( |
| 487 | __field(dev_t, dev) |
| 488 | __field(xfs_rgnumber_t, rgcount) |
| 489 | __field(uint32_t, blocks) |
| 490 | __field(unsigned int, max_open_zones) |
| 491 | ), |
| 492 | TP_fast_assign( |
| 493 | __entry->dev = mp->m_super->s_dev; |
| 494 | __entry->rgcount = mp->m_sb.sb_rgcount; |
| 495 | __entry->blocks = mp->m_groups[XG_TYPE_RTG].blocks; |
| 496 | __entry->max_open_zones = mp->m_max_open_zones; |
| 497 | ), |
| 498 | TP_printk("dev %d:%d zoned %u blocks_per_zone %u, max_open %u" , |
| 499 | MAJOR(__entry->dev), MINOR(__entry->dev), |
| 500 | __entry->rgcount, |
| 501 | __entry->blocks, |
| 502 | __entry->max_open_zones) |
| 503 | ); |
| 504 | #endif /* CONFIG_XFS_RT */ |
| 505 | |
| 506 | TRACE_EVENT(xfs_inodegc_worker, |
| 507 | TP_PROTO(struct xfs_mount *mp, unsigned int shrinker_hits), |
| 508 | TP_ARGS(mp, shrinker_hits), |
| 509 | TP_STRUCT__entry( |
| 510 | __field(dev_t, dev) |
| 511 | __field(unsigned int, shrinker_hits) |
| 512 | ), |
| 513 | TP_fast_assign( |
| 514 | __entry->dev = mp->m_super->s_dev; |
| 515 | __entry->shrinker_hits = shrinker_hits; |
| 516 | ), |
| 517 | TP_printk("dev %d:%d shrinker_hits %u" , |
| 518 | MAJOR(__entry->dev), MINOR(__entry->dev), |
| 519 | __entry->shrinker_hits) |
| 520 | ); |
| 521 | |
| 522 | DECLARE_EVENT_CLASS(xfs_fs_class, |
| 523 | TP_PROTO(struct xfs_mount *mp, void *caller_ip), |
| 524 | TP_ARGS(mp, caller_ip), |
| 525 | TP_STRUCT__entry( |
| 526 | __field(dev_t, dev) |
| 527 | __field(unsigned long long, mflags) |
| 528 | __field(unsigned long, opstate) |
| 529 | __field(unsigned long, sbflags) |
| 530 | __field(void *, caller_ip) |
| 531 | ), |
| 532 | TP_fast_assign( |
| 533 | if (mp) { |
| 534 | __entry->dev = mp->m_super->s_dev; |
| 535 | __entry->mflags = mp->m_features; |
| 536 | __entry->opstate = mp->m_opstate; |
| 537 | __entry->sbflags = mp->m_super->s_flags; |
| 538 | } |
| 539 | __entry->caller_ip = caller_ip; |
| 540 | ), |
| 541 | TP_printk("dev %d:%d m_features 0x%llx opstate (%s) s_flags 0x%lx caller %pS" , |
| 542 | MAJOR(__entry->dev), MINOR(__entry->dev), |
| 543 | __entry->mflags, |
| 544 | __print_flags(__entry->opstate, "|" , XFS_OPSTATE_STRINGS), |
| 545 | __entry->sbflags, |
| 546 | __entry->caller_ip) |
| 547 | ); |
| 548 | |
| 549 | #define DEFINE_FS_EVENT(name) \ |
| 550 | DEFINE_EVENT(xfs_fs_class, name, \ |
| 551 | TP_PROTO(struct xfs_mount *mp, void *caller_ip), \ |
| 552 | TP_ARGS(mp, caller_ip)) |
| 553 | DEFINE_FS_EVENT(xfs_inodegc_flush); |
| 554 | DEFINE_FS_EVENT(xfs_inodegc_push); |
| 555 | DEFINE_FS_EVENT(xfs_inodegc_start); |
| 556 | DEFINE_FS_EVENT(xfs_inodegc_stop); |
| 557 | DEFINE_FS_EVENT(xfs_inodegc_queue); |
| 558 | DEFINE_FS_EVENT(xfs_inodegc_throttle); |
| 559 | DEFINE_FS_EVENT(xfs_fs_sync_fs); |
| 560 | DEFINE_FS_EVENT(xfs_blockgc_start); |
| 561 | DEFINE_FS_EVENT(xfs_blockgc_stop); |
| 562 | DEFINE_FS_EVENT(xfs_blockgc_worker); |
| 563 | DEFINE_FS_EVENT(xfs_blockgc_flush_all); |
| 564 | |
| 565 | TRACE_EVENT(xfs_inodegc_shrinker_scan, |
| 566 | TP_PROTO(struct xfs_mount *mp, struct shrink_control *sc, |
| 567 | void *caller_ip), |
| 568 | TP_ARGS(mp, sc, caller_ip), |
| 569 | TP_STRUCT__entry( |
| 570 | __field(dev_t, dev) |
| 571 | __field(unsigned long, nr_to_scan) |
| 572 | __field(void *, caller_ip) |
| 573 | ), |
| 574 | TP_fast_assign( |
| 575 | __entry->dev = mp->m_super->s_dev; |
| 576 | __entry->nr_to_scan = sc->nr_to_scan; |
| 577 | __entry->caller_ip = caller_ip; |
| 578 | ), |
| 579 | TP_printk("dev %d:%d nr_to_scan %lu caller %pS" , |
| 580 | MAJOR(__entry->dev), MINOR(__entry->dev), |
| 581 | __entry->nr_to_scan, |
| 582 | __entry->caller_ip) |
| 583 | ); |
| 584 | |
| 585 | DECLARE_EVENT_CLASS(xfs_ag_class, |
| 586 | TP_PROTO(const struct xfs_perag *pag), |
| 587 | TP_ARGS(pag), |
| 588 | TP_STRUCT__entry( |
| 589 | __field(dev_t, dev) |
| 590 | __field(xfs_agnumber_t, agno) |
| 591 | ), |
| 592 | TP_fast_assign( |
| 593 | __entry->dev = pag_mount(pag)->m_super->s_dev; |
| 594 | __entry->agno = pag_agno(pag); |
| 595 | ), |
| 596 | TP_printk("dev %d:%d agno 0x%x" , |
| 597 | MAJOR(__entry->dev), MINOR(__entry->dev), |
| 598 | __entry->agno) |
| 599 | ); |
| 600 | #define DEFINE_AG_EVENT(name) \ |
| 601 | DEFINE_EVENT(xfs_ag_class, name, \ |
| 602 | TP_PROTO(const struct xfs_perag *pag), \ |
| 603 | TP_ARGS(pag)) |
| 604 | |
| 605 | DEFINE_AG_EVENT(xfs_read_agf); |
| 606 | DEFINE_AG_EVENT(xfs_alloc_read_agf); |
| 607 | DEFINE_AG_EVENT(xfs_read_agi); |
| 608 | DEFINE_AG_EVENT(xfs_ialloc_read_agi); |
| 609 | |
| 610 | TRACE_EVENT(xfs_attr_list_node_descend, |
| 611 | TP_PROTO(struct xfs_attr_list_context *ctx, |
| 612 | struct xfs_da_node_entry *btree), |
| 613 | TP_ARGS(ctx, btree), |
| 614 | TP_STRUCT__entry( |
| 615 | __field(dev_t, dev) |
| 616 | __field(xfs_ino_t, ino) |
| 617 | __field(u32, hashval) |
| 618 | __field(u32, blkno) |
| 619 | __field(u32, offset) |
| 620 | __field(void *, buffer) |
| 621 | __field(int, bufsize) |
| 622 | __field(int, count) |
| 623 | __field(int, firstu) |
| 624 | __field(int, dupcnt) |
| 625 | __field(unsigned int, attr_filter) |
| 626 | __field(u32, bt_hashval) |
| 627 | __field(u32, bt_before) |
| 628 | ), |
| 629 | TP_fast_assign( |
| 630 | __entry->dev = VFS_I(ctx->dp)->i_sb->s_dev; |
| 631 | __entry->ino = ctx->dp->i_ino; |
| 632 | __entry->hashval = ctx->cursor.hashval; |
| 633 | __entry->blkno = ctx->cursor.blkno; |
| 634 | __entry->offset = ctx->cursor.offset; |
| 635 | __entry->buffer = ctx->buffer; |
| 636 | __entry->bufsize = ctx->bufsize; |
| 637 | __entry->count = ctx->count; |
| 638 | __entry->firstu = ctx->firstu; |
| 639 | __entry->attr_filter = ctx->attr_filter; |
| 640 | __entry->bt_hashval = be32_to_cpu(btree->hashval); |
| 641 | __entry->bt_before = be32_to_cpu(btree->before); |
| 642 | ), |
| 643 | TP_printk("dev %d:%d ino 0x%llx cursor h/b/o 0x%x/0x%x/%u dupcnt %u " |
| 644 | "buffer %p size %u count %u firstu %u filter %s " |
| 645 | "node hashval %u, node before %u" , |
| 646 | MAJOR(__entry->dev), MINOR(__entry->dev), |
| 647 | __entry->ino, |
| 648 | __entry->hashval, |
| 649 | __entry->blkno, |
| 650 | __entry->offset, |
| 651 | __entry->dupcnt, |
| 652 | __entry->buffer, |
| 653 | __entry->bufsize, |
| 654 | __entry->count, |
| 655 | __entry->firstu, |
| 656 | __print_flags(__entry->attr_filter, "|" , |
| 657 | XFS_ATTR_FILTER_FLAGS), |
| 658 | __entry->bt_hashval, |
| 659 | __entry->bt_before) |
| 660 | ); |
| 661 | |
| 662 | DECLARE_EVENT_CLASS(xfs_bmap_class, |
| 663 | TP_PROTO(struct xfs_inode *ip, struct xfs_iext_cursor *cur, int state, |
| 664 | unsigned long caller_ip), |
| 665 | TP_ARGS(ip, cur, state, caller_ip), |
| 666 | TP_STRUCT__entry( |
| 667 | __field(dev_t, dev) |
| 668 | __field(xfs_ino_t, ino) |
| 669 | __field(void *, leaf) |
| 670 | __field(int, pos) |
| 671 | __field(xfs_fileoff_t, startoff) |
| 672 | __field(xfs_fsblock_t, startblock) |
| 673 | __field(xfs_filblks_t, blockcount) |
| 674 | __field(xfs_exntst_t, state) |
| 675 | __field(int, bmap_state) |
| 676 | __field(unsigned long, caller_ip) |
| 677 | ), |
| 678 | TP_fast_assign( |
| 679 | struct xfs_ifork *ifp; |
| 680 | struct xfs_bmbt_irec r; |
| 681 | |
| 682 | ifp = xfs_iext_state_to_fork(ip, state); |
| 683 | xfs_iext_get_extent(ifp, cur, &r); |
| 684 | __entry->dev = VFS_I(ip)->i_sb->s_dev; |
| 685 | __entry->ino = ip->i_ino; |
| 686 | __entry->leaf = cur->leaf; |
| 687 | __entry->pos = cur->pos; |
| 688 | __entry->startoff = r.br_startoff; |
| 689 | __entry->startblock = r.br_startblock; |
| 690 | __entry->blockcount = r.br_blockcount; |
| 691 | __entry->state = r.br_state; |
| 692 | __entry->bmap_state = state; |
| 693 | __entry->caller_ip = caller_ip; |
| 694 | ), |
| 695 | TP_printk("dev %d:%d ino 0x%llx state %s cur %p/%d " |
| 696 | "fileoff 0x%llx startblock 0x%llx fsbcount 0x%llx flag %d caller %pS" , |
| 697 | MAJOR(__entry->dev), MINOR(__entry->dev), |
| 698 | __entry->ino, |
| 699 | __print_flags(__entry->bmap_state, "|" , XFS_BMAP_EXT_FLAGS), |
| 700 | __entry->leaf, |
| 701 | __entry->pos, |
| 702 | __entry->startoff, |
| 703 | (int64_t)__entry->startblock, |
| 704 | __entry->blockcount, |
| 705 | __entry->state, |
| 706 | (char *)__entry->caller_ip) |
| 707 | ) |
| 708 | |
| 709 | #define DEFINE_BMAP_EVENT(name) \ |
| 710 | DEFINE_EVENT(xfs_bmap_class, name, \ |
| 711 | TP_PROTO(struct xfs_inode *ip, struct xfs_iext_cursor *cur, int state, \ |
| 712 | unsigned long caller_ip), \ |
| 713 | TP_ARGS(ip, cur, state, caller_ip)) |
| 714 | DEFINE_BMAP_EVENT(xfs_iext_insert); |
| 715 | DEFINE_BMAP_EVENT(xfs_iext_remove); |
| 716 | DEFINE_BMAP_EVENT(xfs_bmap_pre_update); |
| 717 | DEFINE_BMAP_EVENT(xfs_bmap_post_update); |
| 718 | DEFINE_BMAP_EVENT(xfs_read_extent); |
| 719 | DEFINE_BMAP_EVENT(xfs_write_extent); |
| 720 | |
| 721 | DECLARE_EVENT_CLASS(xfs_buf_class, |
| 722 | TP_PROTO(struct xfs_buf *bp, unsigned long caller_ip), |
| 723 | TP_ARGS(bp, caller_ip), |
| 724 | TP_STRUCT__entry( |
| 725 | __field(dev_t, dev) |
| 726 | __field(xfs_daddr_t, bno) |
| 727 | __field(int, nblks) |
| 728 | __field(int, hold) |
| 729 | __field(int, pincount) |
| 730 | __field(unsigned, lockval) |
| 731 | __field(unsigned, flags) |
| 732 | __field(unsigned long, caller_ip) |
| 733 | __field(const void *, buf_ops) |
| 734 | ), |
| 735 | TP_fast_assign( |
| 736 | __entry->dev = bp->b_target->bt_dev; |
| 737 | __entry->bno = xfs_buf_daddr(bp); |
| 738 | __entry->nblks = bp->b_length; |
| 739 | __entry->hold = bp->b_hold; |
| 740 | __entry->pincount = atomic_read(&bp->b_pin_count); |
| 741 | __entry->lockval = bp->b_sema.count; |
| 742 | __entry->flags = bp->b_flags; |
| 743 | __entry->caller_ip = caller_ip; |
| 744 | __entry->buf_ops = bp->b_ops; |
| 745 | ), |
| 746 | TP_printk("dev %d:%d daddr 0x%llx bbcount 0x%x hold %d pincount %d " |
| 747 | "lock %d flags %s bufops %pS caller %pS" , |
| 748 | MAJOR(__entry->dev), MINOR(__entry->dev), |
| 749 | (unsigned long long)__entry->bno, |
| 750 | __entry->nblks, |
| 751 | __entry->hold, |
| 752 | __entry->pincount, |
| 753 | __entry->lockval, |
| 754 | __print_flags(__entry->flags, "|" , XFS_BUF_FLAGS), |
| 755 | __entry->buf_ops, |
| 756 | (void *)__entry->caller_ip) |
| 757 | ) |
| 758 | |
| 759 | #define DEFINE_BUF_EVENT(name) \ |
| 760 | DEFINE_EVENT(xfs_buf_class, name, \ |
| 761 | TP_PROTO(struct xfs_buf *bp, unsigned long caller_ip), \ |
| 762 | TP_ARGS(bp, caller_ip)) |
| 763 | DEFINE_BUF_EVENT(xfs_buf_init); |
| 764 | DEFINE_BUF_EVENT(xfs_buf_free); |
| 765 | DEFINE_BUF_EVENT(xfs_buf_hold); |
| 766 | DEFINE_BUF_EVENT(xfs_buf_rele); |
| 767 | DEFINE_BUF_EVENT(xfs_buf_iodone); |
| 768 | DEFINE_BUF_EVENT(xfs_buf_submit); |
| 769 | DEFINE_BUF_EVENT(xfs_buf_lock); |
| 770 | DEFINE_BUF_EVENT(xfs_buf_lock_done); |
| 771 | DEFINE_BUF_EVENT(xfs_buf_trylock_fail); |
| 772 | DEFINE_BUF_EVENT(xfs_buf_trylock); |
| 773 | DEFINE_BUF_EVENT(xfs_buf_unlock); |
| 774 | DEFINE_BUF_EVENT(xfs_buf_iowait); |
| 775 | DEFINE_BUF_EVENT(xfs_buf_iowait_done); |
| 776 | DEFINE_BUF_EVENT(xfs_buf_delwri_queue); |
| 777 | DEFINE_BUF_EVENT(xfs_buf_delwri_queued); |
| 778 | DEFINE_BUF_EVENT(xfs_buf_delwri_split); |
| 779 | DEFINE_BUF_EVENT(xfs_buf_get_uncached); |
| 780 | DEFINE_BUF_EVENT(xfs_buf_item_relse); |
| 781 | DEFINE_BUF_EVENT(xfs_buf_iodone_async); |
| 782 | DEFINE_BUF_EVENT(xfs_buf_error_relse); |
| 783 | DEFINE_BUF_EVENT(xfs_buf_drain_buftarg); |
| 784 | DEFINE_BUF_EVENT(xfs_trans_read_buf_shut); |
| 785 | DEFINE_BUF_EVENT(xfs_buf_backing_folio); |
| 786 | DEFINE_BUF_EVENT(xfs_buf_backing_kmem); |
| 787 | DEFINE_BUF_EVENT(xfs_buf_backing_vmalloc); |
| 788 | DEFINE_BUF_EVENT(xfs_buf_backing_fallback); |
| 789 | |
| 790 | /* not really buffer traces, but the buf provides useful information */ |
| 791 | DEFINE_BUF_EVENT(xfs_btree_corrupt); |
| 792 | DEFINE_BUF_EVENT(xfs_reset_dqcounts); |
| 793 | |
| 794 | /* pass flags explicitly */ |
| 795 | DECLARE_EVENT_CLASS(xfs_buf_flags_class, |
| 796 | TP_PROTO(struct xfs_buf *bp, unsigned flags, unsigned long caller_ip), |
| 797 | TP_ARGS(bp, flags, caller_ip), |
| 798 | TP_STRUCT__entry( |
| 799 | __field(dev_t, dev) |
| 800 | __field(xfs_daddr_t, bno) |
| 801 | __field(unsigned int, length) |
| 802 | __field(int, hold) |
| 803 | __field(int, pincount) |
| 804 | __field(unsigned, lockval) |
| 805 | __field(unsigned, flags) |
| 806 | __field(unsigned long, caller_ip) |
| 807 | ), |
| 808 | TP_fast_assign( |
| 809 | __entry->dev = bp->b_target->bt_dev; |
| 810 | __entry->bno = xfs_buf_daddr(bp); |
| 811 | __entry->length = bp->b_length; |
| 812 | __entry->flags = flags; |
| 813 | __entry->hold = bp->b_hold; |
| 814 | __entry->pincount = atomic_read(&bp->b_pin_count); |
| 815 | __entry->lockval = bp->b_sema.count; |
| 816 | __entry->caller_ip = caller_ip; |
| 817 | ), |
| 818 | TP_printk("dev %d:%d daddr 0x%llx bbcount 0x%x hold %d pincount %d " |
| 819 | "lock %d flags %s caller %pS" , |
| 820 | MAJOR(__entry->dev), MINOR(__entry->dev), |
| 821 | (unsigned long long)__entry->bno, |
| 822 | __entry->length, |
| 823 | __entry->hold, |
| 824 | __entry->pincount, |
| 825 | __entry->lockval, |
| 826 | __print_flags(__entry->flags, "|" , XFS_BUF_FLAGS), |
| 827 | (void *)__entry->caller_ip) |
| 828 | ) |
| 829 | |
| 830 | #define DEFINE_BUF_FLAGS_EVENT(name) \ |
| 831 | DEFINE_EVENT(xfs_buf_flags_class, name, \ |
| 832 | TP_PROTO(struct xfs_buf *bp, unsigned flags, unsigned long caller_ip), \ |
| 833 | TP_ARGS(bp, flags, caller_ip)) |
| 834 | DEFINE_BUF_FLAGS_EVENT(xfs_buf_find); |
| 835 | DEFINE_BUF_FLAGS_EVENT(xfs_buf_get); |
| 836 | DEFINE_BUF_FLAGS_EVENT(xfs_buf_read); |
| 837 | DEFINE_BUF_FLAGS_EVENT(xfs_buf_readahead); |
| 838 | |
| 839 | TRACE_EVENT(xfs_buf_ioerror, |
| 840 | TP_PROTO(struct xfs_buf *bp, int error, xfs_failaddr_t caller_ip), |
| 841 | TP_ARGS(bp, error, caller_ip), |
| 842 | TP_STRUCT__entry( |
| 843 | __field(dev_t, dev) |
| 844 | __field(xfs_daddr_t, bno) |
| 845 | __field(unsigned int, length) |
| 846 | __field(unsigned, flags) |
| 847 | __field(int, hold) |
| 848 | __field(int, pincount) |
| 849 | __field(unsigned, lockval) |
| 850 | __field(int, error) |
| 851 | __field(xfs_failaddr_t, caller_ip) |
| 852 | ), |
| 853 | TP_fast_assign( |
| 854 | __entry->dev = bp->b_target->bt_dev; |
| 855 | __entry->bno = xfs_buf_daddr(bp); |
| 856 | __entry->length = bp->b_length; |
| 857 | __entry->hold = bp->b_hold; |
| 858 | __entry->pincount = atomic_read(&bp->b_pin_count); |
| 859 | __entry->lockval = bp->b_sema.count; |
| 860 | __entry->error = error; |
| 861 | __entry->flags = bp->b_flags; |
| 862 | __entry->caller_ip = caller_ip; |
| 863 | ), |
| 864 | TP_printk("dev %d:%d daddr 0x%llx bbcount 0x%x hold %d pincount %d " |
| 865 | "lock %d error %d flags %s caller %pS" , |
| 866 | MAJOR(__entry->dev), MINOR(__entry->dev), |
| 867 | (unsigned long long)__entry->bno, |
| 868 | __entry->length, |
| 869 | __entry->hold, |
| 870 | __entry->pincount, |
| 871 | __entry->lockval, |
| 872 | __entry->error, |
| 873 | __print_flags(__entry->flags, "|" , XFS_BUF_FLAGS), |
| 874 | (void *)__entry->caller_ip) |
| 875 | ); |
| 876 | |
| 877 | DECLARE_EVENT_CLASS(xfs_buf_item_class, |
| 878 | TP_PROTO(struct xfs_buf_log_item *bip), |
| 879 | TP_ARGS(bip), |
| 880 | TP_STRUCT__entry( |
| 881 | __field(dev_t, dev) |
| 882 | __field(xfs_daddr_t, buf_bno) |
| 883 | __field(unsigned int, buf_len) |
| 884 | __field(int, buf_hold) |
| 885 | __field(int, buf_pincount) |
| 886 | __field(int, buf_lockval) |
| 887 | __field(unsigned, buf_flags) |
| 888 | __field(unsigned, bli_recur) |
| 889 | __field(int, bli_refcount) |
| 890 | __field(unsigned, bli_flags) |
| 891 | __field(unsigned long, li_flags) |
| 892 | ), |
| 893 | TP_fast_assign( |
| 894 | __entry->dev = bip->bli_buf->b_target->bt_dev; |
| 895 | __entry->bli_flags = bip->bli_flags; |
| 896 | __entry->bli_recur = bip->bli_recur; |
| 897 | __entry->bli_refcount = atomic_read(&bip->bli_refcount); |
| 898 | __entry->buf_bno = xfs_buf_daddr(bip->bli_buf); |
| 899 | __entry->buf_len = bip->bli_buf->b_length; |
| 900 | __entry->buf_flags = bip->bli_buf->b_flags; |
| 901 | __entry->buf_hold = bip->bli_buf->b_hold; |
| 902 | __entry->buf_pincount = atomic_read(&bip->bli_buf->b_pin_count); |
| 903 | __entry->buf_lockval = bip->bli_buf->b_sema.count; |
| 904 | __entry->li_flags = bip->bli_item.li_flags; |
| 905 | ), |
| 906 | TP_printk("dev %d:%d daddr 0x%llx bbcount 0x%x hold %d pincount %d " |
| 907 | "lock %d flags %s recur %d refcount %d bliflags %s " |
| 908 | "liflags %s" , |
| 909 | MAJOR(__entry->dev), MINOR(__entry->dev), |
| 910 | (unsigned long long)__entry->buf_bno, |
| 911 | __entry->buf_len, |
| 912 | __entry->buf_hold, |
| 913 | __entry->buf_pincount, |
| 914 | __entry->buf_lockval, |
| 915 | __print_flags(__entry->buf_flags, "|" , XFS_BUF_FLAGS), |
| 916 | __entry->bli_recur, |
| 917 | __entry->bli_refcount, |
| 918 | __print_flags(__entry->bli_flags, "|" , XFS_BLI_FLAGS), |
| 919 | __print_flags(__entry->li_flags, "|" , XFS_LI_FLAGS)) |
| 920 | ) |
| 921 | |
| 922 | #define DEFINE_BUF_ITEM_EVENT(name) \ |
| 923 | DEFINE_EVENT(xfs_buf_item_class, name, \ |
| 924 | TP_PROTO(struct xfs_buf_log_item *bip), \ |
| 925 | TP_ARGS(bip)) |
| 926 | DEFINE_BUF_ITEM_EVENT(xfs_buf_item_size); |
| 927 | DEFINE_BUF_ITEM_EVENT(xfs_buf_item_size_ordered); |
| 928 | DEFINE_BUF_ITEM_EVENT(xfs_buf_item_size_stale); |
| 929 | DEFINE_BUF_ITEM_EVENT(xfs_buf_item_format); |
| 930 | DEFINE_BUF_ITEM_EVENT(xfs_buf_item_format_stale); |
| 931 | DEFINE_BUF_ITEM_EVENT(xfs_buf_item_ordered); |
| 932 | DEFINE_BUF_ITEM_EVENT(xfs_buf_item_pin); |
| 933 | DEFINE_BUF_ITEM_EVENT(xfs_buf_item_unpin); |
| 934 | DEFINE_BUF_ITEM_EVENT(xfs_buf_item_unpin_stale); |
| 935 | DEFINE_BUF_ITEM_EVENT(xfs_buf_item_release); |
| 936 | DEFINE_BUF_ITEM_EVENT(xfs_buf_item_committed); |
| 937 | DEFINE_BUF_ITEM_EVENT(xfs_buf_item_push); |
| 938 | DEFINE_BUF_ITEM_EVENT(xfs_trans_get_buf); |
| 939 | DEFINE_BUF_ITEM_EVENT(xfs_trans_get_buf_recur); |
| 940 | DEFINE_BUF_ITEM_EVENT(xfs_trans_getsb); |
| 941 | DEFINE_BUF_ITEM_EVENT(xfs_trans_getsb_recur); |
| 942 | DEFINE_BUF_ITEM_EVENT(xfs_trans_read_buf); |
| 943 | DEFINE_BUF_ITEM_EVENT(xfs_trans_read_buf_recur); |
| 944 | DEFINE_BUF_ITEM_EVENT(xfs_trans_log_buf); |
| 945 | DEFINE_BUF_ITEM_EVENT(xfs_trans_brelse); |
| 946 | DEFINE_BUF_ITEM_EVENT(xfs_trans_bdetach); |
| 947 | DEFINE_BUF_ITEM_EVENT(xfs_trans_bjoin); |
| 948 | DEFINE_BUF_ITEM_EVENT(xfs_trans_bhold); |
| 949 | DEFINE_BUF_ITEM_EVENT(xfs_trans_bhold_release); |
| 950 | DEFINE_BUF_ITEM_EVENT(xfs_trans_binval); |
| 951 | |
| 952 | DECLARE_EVENT_CLASS(xfs_filestream_class, |
| 953 | TP_PROTO(const struct xfs_perag *pag, xfs_ino_t ino), |
| 954 | TP_ARGS(pag, ino), |
| 955 | TP_STRUCT__entry( |
| 956 | __field(dev_t, dev) |
| 957 | __field(xfs_ino_t, ino) |
| 958 | __field(xfs_agnumber_t, agno) |
| 959 | __field(int, streams) |
| 960 | ), |
| 961 | TP_fast_assign( |
| 962 | __entry->dev = pag_mount(pag)->m_super->s_dev; |
| 963 | __entry->ino = ino; |
| 964 | __entry->agno = pag_agno(pag); |
| 965 | __entry->streams = atomic_read(&pag->pagf_fstrms); |
| 966 | ), |
| 967 | TP_printk("dev %d:%d ino 0x%llx agno 0x%x streams %d" , |
| 968 | MAJOR(__entry->dev), MINOR(__entry->dev), |
| 969 | __entry->ino, |
| 970 | __entry->agno, |
| 971 | __entry->streams) |
| 972 | ) |
| 973 | #define DEFINE_FILESTREAM_EVENT(name) \ |
| 974 | DEFINE_EVENT(xfs_filestream_class, name, \ |
| 975 | TP_PROTO(const struct xfs_perag *pag, xfs_ino_t ino), \ |
| 976 | TP_ARGS(pag, ino)) |
| 977 | DEFINE_FILESTREAM_EVENT(xfs_filestream_free); |
| 978 | DEFINE_FILESTREAM_EVENT(xfs_filestream_lookup); |
| 979 | DEFINE_FILESTREAM_EVENT(xfs_filestream_scan); |
| 980 | |
| 981 | TRACE_EVENT(xfs_filestream_pick, |
| 982 | TP_PROTO(const struct xfs_perag *pag, xfs_ino_t ino), |
| 983 | TP_ARGS(pag, ino), |
| 984 | TP_STRUCT__entry( |
| 985 | __field(dev_t, dev) |
| 986 | __field(xfs_ino_t, ino) |
| 987 | __field(xfs_agnumber_t, agno) |
| 988 | __field(int, streams) |
| 989 | __field(xfs_extlen_t, free) |
| 990 | ), |
| 991 | TP_fast_assign( |
| 992 | __entry->dev = pag_mount(pag)->m_super->s_dev; |
| 993 | __entry->ino = ino; |
| 994 | __entry->agno = pag_agno(pag); |
| 995 | __entry->streams = atomic_read(&pag->pagf_fstrms); |
| 996 | __entry->free = pag->pagf_freeblks; |
| 997 | ), |
| 998 | TP_printk("dev %d:%d ino 0x%llx agno 0x%x streams %d free %d" , |
| 999 | MAJOR(__entry->dev), MINOR(__entry->dev), |
| 1000 | __entry->ino, |
| 1001 | __entry->agno, |
| 1002 | __entry->streams, |
| 1003 | __entry->free) |
| 1004 | ); |
| 1005 | |
| 1006 | DECLARE_EVENT_CLASS(xfs_lock_class, |
| 1007 | TP_PROTO(struct xfs_inode *ip, unsigned lock_flags, |
| 1008 | unsigned long caller_ip), |
| 1009 | TP_ARGS(ip, lock_flags, caller_ip), |
| 1010 | TP_STRUCT__entry( |
| 1011 | __field(dev_t, dev) |
| 1012 | __field(xfs_ino_t, ino) |
| 1013 | __field(int, lock_flags) |
| 1014 | __field(unsigned long, caller_ip) |
| 1015 | ), |
| 1016 | TP_fast_assign( |
| 1017 | __entry->dev = VFS_I(ip)->i_sb->s_dev; |
| 1018 | __entry->ino = ip->i_ino; |
| 1019 | __entry->lock_flags = lock_flags; |
| 1020 | __entry->caller_ip = caller_ip; |
| 1021 | ), |
| 1022 | TP_printk("dev %d:%d ino 0x%llx flags %s caller %pS" , |
| 1023 | MAJOR(__entry->dev), MINOR(__entry->dev), |
| 1024 | __entry->ino, |
| 1025 | __print_flags(__entry->lock_flags, "|" , XFS_LOCK_FLAGS), |
| 1026 | (void *)__entry->caller_ip) |
| 1027 | ) |
| 1028 | |
| 1029 | #define DEFINE_LOCK_EVENT(name) \ |
| 1030 | DEFINE_EVENT(xfs_lock_class, name, \ |
| 1031 | TP_PROTO(struct xfs_inode *ip, unsigned lock_flags, \ |
| 1032 | unsigned long caller_ip), \ |
| 1033 | TP_ARGS(ip, lock_flags, caller_ip)) |
| 1034 | DEFINE_LOCK_EVENT(xfs_ilock); |
| 1035 | DEFINE_LOCK_EVENT(xfs_ilock_nowait); |
| 1036 | DEFINE_LOCK_EVENT(xfs_ilock_demote); |
| 1037 | DEFINE_LOCK_EVENT(xfs_iunlock); |
| 1038 | |
| 1039 | DECLARE_EVENT_CLASS(xfs_inode_class, |
| 1040 | TP_PROTO(struct xfs_inode *ip), |
| 1041 | TP_ARGS(ip), |
| 1042 | TP_STRUCT__entry( |
| 1043 | __field(dev_t, dev) |
| 1044 | __field(xfs_ino_t, ino) |
| 1045 | __field(unsigned long, iflags) |
| 1046 | ), |
| 1047 | TP_fast_assign( |
| 1048 | __entry->dev = VFS_I(ip)->i_sb->s_dev; |
| 1049 | __entry->ino = ip->i_ino; |
| 1050 | __entry->iflags = ip->i_flags; |
| 1051 | ), |
| 1052 | TP_printk("dev %d:%d ino 0x%llx iflags 0x%lx" , |
| 1053 | MAJOR(__entry->dev), MINOR(__entry->dev), |
| 1054 | __entry->ino, |
| 1055 | __entry->iflags) |
| 1056 | ) |
| 1057 | |
| 1058 | #define DEFINE_INODE_EVENT(name) \ |
| 1059 | DEFINE_EVENT(xfs_inode_class, name, \ |
| 1060 | TP_PROTO(struct xfs_inode * |
|---|