1 /* SPDX-License-Identifier: GPL-2.0 */ 2 #undef TRACE_SYSTEM 3 #define TRACE_SYSTEM gfs2 4 5 #if !defined(_TRACE_GFS2_H) || defined(TRACE_HEADER_MULTI_READ) 6 #define _TRACE_GFS2_H 7 8 #include <linux/tracepoint.h> 9 10 #include <linux/fs.h> 11 #include <linux/buffer_head.h> 12 #include <linux/dlmconstants.h> 13 #include <linux/gfs2_ondisk.h> 14 #include <linux/writeback.h> 15 #include <linux/ktime.h> 16 #include <linux/iomap.h> 17 #include "incore.h" 18 #include "glock.h" 19 #include "rgrp.h" 20 21 #define dlm_state_name(nn) { DLM_LOCK_##nn, #nn } 22 #define glock_trace_name(x) __print_symbolic(x, \ 23 dlm_state_name(IV), \ 24 dlm_state_name(NL), \ 25 dlm_state_name(CR), \ 26 dlm_state_name(CW), \ 27 dlm_state_name(PR), \ 28 dlm_state_name(PW), \ 29 dlm_state_name(EX)) 30 31 #define block_state_name(x) __print_symbolic(x, \ 32 { GFS2_BLKST_FREE, "free" }, \ 33 { GFS2_BLKST_USED, "used" }, \ 34 { GFS2_BLKST_DINODE, "dinode" }, \ 35 { GFS2_BLKST_UNLINKED, "unlinked" }) 36 37 #define TRACE_RS_DELETE 0 38 #define TRACE_RS_TREEDEL 1 39 #define TRACE_RS_INSERT 2 40 #define TRACE_RS_CLAIM 3 41 42 #define rs_func_name(x) __print_symbolic(x, \ 43 { 0, "del " }, \ 44 { 1, "tdel" }, \ 45 { 2, "ins " }, \ 46 { 3, "clm " }) 47 48 #define show_glock_flags(flags) __print_flags(flags, "", \ 49 {(1UL << GLF_LOCK), "l" }, \ 50 {(1UL << GLF_DEMOTE), "D" }, \ 51 {(1UL << GLF_PENDING_DEMOTE), "d" }, \ 52 {(1UL << GLF_DEMOTE_IN_PROGRESS), "p" }, \ 53 {(1UL << GLF_DIRTY), "y" }, \ 54 {(1UL << GLF_LFLUSH), "f" }, \ 55 {(1UL << GLF_PENDING_REPLY), "R" }, \ 56 {(1UL << GLF_HAVE_REPLY), "r" }, \ 57 {(1UL << GLF_INITIAL), "a" }, \ 58 {(1UL << GLF_HAVE_FROZEN_REPLY), "F" }, \ 59 {(1UL << GLF_LRU), "L" }, \ 60 {(1UL << GLF_OBJECT), "o" }, \ 61 {(1UL << GLF_BLOCKING), "b" }, \ 62 {(1UL << GLF_UNLOCKED), "x" }, \ 63 {(1UL << GLF_INSTANTIATE_NEEDED), "n" }, \ 64 {(1UL << GLF_INSTANTIATE_IN_PROG), "N" }, \ 65 {(1UL << GLF_TRY_TO_EVICT), "e" }, \ 66 {(1UL << GLF_VERIFY_DELETE), "E" }, \ 67 {(1UL << GLF_DEFER_DELETE), "s" }, \ 68 {(1UL << GLF_CANCELING), "C" }) 69 70 #ifndef NUMPTY 71 #define NUMPTY 72 static inline u8 glock_trace_state(unsigned int state) 73 { 74 switch(state) { 75 case LM_ST_SHARED: 76 return DLM_LOCK_PR; 77 case LM_ST_DEFERRED: 78 return DLM_LOCK_CW; 79 case LM_ST_EXCLUSIVE: 80 return DLM_LOCK_EX; 81 } 82 return DLM_LOCK_NL; 83 } 84 #endif 85 86 /* Section 1 - Locking 87 * 88 * Objectives: 89 * Latency: Remote demote request to state change 90 * Latency: Local lock request to state change 91 * Latency: State change to lock grant 92 * Correctness: Ordering of local lock state vs. I/O requests 93 * Correctness: Responses to remote demote requests 94 */ 95 96 /* General glock state change (DLM lock request completes) */ 97 TRACE_EVENT(gfs2_glock_state_change, 98 99 TP_PROTO(const struct gfs2_glock *gl, unsigned int new_state), 100 101 TP_ARGS(gl, new_state), 102 103 TP_STRUCT__entry( 104 __field( dev_t, dev ) 105 __field( u64, glnum ) 106 __field( u32, gltype ) 107 __field( u8, cur_state ) 108 __field( u8, new_state ) 109 __field( u8, dmt_state ) 110 __field( u8, tgt_state ) 111 __field( unsigned long, flags ) 112 ), 113 114 TP_fast_assign( 115 __entry->dev = gl->gl_name.ln_sbd->sd_vfs->s_dev; 116 __entry->glnum = gl->gl_name.ln_number; 117 __entry->gltype = gl->gl_name.ln_type; 118 __entry->cur_state = glock_trace_state(gl->gl_state); 119 __entry->new_state = glock_trace_state(new_state); 120 __entry->tgt_state = glock_trace_state(gl->gl_target); 121 __entry->dmt_state = glock_trace_state(gl->gl_demote_state); 122 __entry->flags = gl->gl_flags | (gl->gl_object ? (1UL<<GLF_OBJECT) : 0); 123 ), 124 125 TP_printk("%u,%u glock %d:%lld state %s to %s tgt:%s dmt:%s flags:%s", 126 MAJOR(__entry->dev), MINOR(__entry->dev), __entry->gltype, 127 (unsigned long long)__entry->glnum, 128 glock_trace_name(__entry->cur_state), 129 glock_trace_name(__entry->new_state), 130 glock_trace_name(__entry->tgt_state), 131 glock_trace_name(__entry->dmt_state), 132 show_glock_flags(__entry->flags)) 133 ); 134 135 /* State change -> unlocked, glock is being deallocated */ 136 TRACE_EVENT(gfs2_glock_put, 137 138 TP_PROTO(const struct gfs2_glock *gl), 139 140 TP_ARGS(gl), 141 142 TP_STRUCT__entry( 143 __field( dev_t, dev ) 144 __field( u64, glnum ) 145 __field( u32, gltype ) 146 __field( u8, cur_state ) 147 __field( unsigned long, flags ) 148 ), 149 150 TP_fast_assign( 151 __entry->dev = gl->gl_name.ln_sbd->sd_vfs->s_dev; 152 __entry->gltype = gl->gl_name.ln_type; 153 __entry->glnum = gl->gl_name.ln_number; 154 __entry->cur_state = glock_trace_state(gl->gl_state); 155 __entry->flags = gl->gl_flags | (gl->gl_object ? (1UL<<GLF_OBJECT) : 0); 156 ), 157 158 TP_printk("%u,%u glock %d:%lld state %s => %s flags:%s", 159 MAJOR(__entry->dev), MINOR(__entry->dev), 160 __entry->gltype, (unsigned long long)__entry->glnum, 161 glock_trace_name(__entry->cur_state), 162 glock_trace_name(DLM_LOCK_IV), 163 show_glock_flags(__entry->flags)) 164 165 ); 166 167 /* Callback (local or remote) requesting lock demotion */ 168 TRACE_EVENT(gfs2_demote_rq, 169 170 TP_PROTO(const struct gfs2_glock *gl, bool remote), 171 172 TP_ARGS(gl, remote), 173 174 TP_STRUCT__entry( 175 __field( dev_t, dev ) 176 __field( u64, glnum ) 177 __field( u32, gltype ) 178 __field( u8, cur_state ) 179 __field( u8, dmt_state ) 180 __field( unsigned long, flags ) 181 __field( bool, remote ) 182 ), 183 184 TP_fast_assign( 185 __entry->dev = gl->gl_name.ln_sbd->sd_vfs->s_dev; 186 __entry->gltype = gl->gl_name.ln_type; 187 __entry->glnum = gl->gl_name.ln_number; 188 __entry->cur_state = glock_trace_state(gl->gl_state); 189 __entry->dmt_state = glock_trace_state(gl->gl_demote_state); 190 __entry->flags = gl->gl_flags | (gl->gl_object ? (1UL<<GLF_OBJECT) : 0); 191 __entry->remote = remote; 192 ), 193 194 TP_printk("%u,%u glock %d:%lld demote %s to %s flags:%s %s", 195 MAJOR(__entry->dev), MINOR(__entry->dev), __entry->gltype, 196 (unsigned long long)__entry->glnum, 197 glock_trace_name(__entry->cur_state), 198 glock_trace_name(__entry->dmt_state), 199 show_glock_flags(__entry->flags), 200 __entry->remote ? "remote" : "local") 201 202 ); 203 204 /* Promotion/grant of a glock */ 205 TRACE_EVENT(gfs2_promote, 206 207 TP_PROTO(const struct gfs2_holder *gh), 208 209 TP_ARGS(gh), 210 211 TP_STRUCT__entry( 212 __field( dev_t, dev ) 213 __field( u64, glnum ) 214 __field( u32, gltype ) 215 __field( u8, state ) 216 ), 217 218 TP_fast_assign( 219 __entry->dev = gh->gh_gl->gl_name.ln_sbd->sd_vfs->s_dev; 220 __entry->glnum = gh->gh_gl->gl_name.ln_number; 221 __entry->gltype = gh->gh_gl->gl_name.ln_type; 222 __entry->state = glock_trace_state(gh->gh_state); 223 ), 224 225 TP_printk("%u,%u glock %u:%llu promote %s", 226 MAJOR(__entry->dev), MINOR(__entry->dev), __entry->gltype, 227 (unsigned long long)__entry->glnum, 228 glock_trace_name(__entry->state)) 229 ); 230 231 /* Queue/dequeue a lock request */ 232 TRACE_EVENT(gfs2_glock_queue, 233 234 TP_PROTO(const struct gfs2_holder *gh, int queue), 235 236 TP_ARGS(gh, queue), 237 238 TP_STRUCT__entry( 239 __field( dev_t, dev ) 240 __field( u64, glnum ) 241 __field( u32, gltype ) 242 __field( int, queue ) 243 __field( u8, state ) 244 ), 245 246 TP_fast_assign( 247 __entry->dev = gh->gh_gl->gl_name.ln_sbd->sd_vfs->s_dev; 248 __entry->glnum = gh->gh_gl->gl_name.ln_number; 249 __entry->gltype = gh->gh_gl->gl_name.ln_type; 250 __entry->queue = queue; 251 __entry->state = glock_trace_state(gh->gh_state); 252 ), 253 254 TP_printk("%u,%u glock %u:%llu %squeue %s", 255 MAJOR(__entry->dev), MINOR(__entry->dev), __entry->gltype, 256 (unsigned long long)__entry->glnum, 257 __entry->queue ? "" : "de", 258 glock_trace_name(__entry->state)) 259 ); 260 261 /* DLM sends a reply to GFS2 */ 262 TRACE_EVENT(gfs2_glock_lock_time, 263 264 TP_PROTO(const struct gfs2_glock *gl, s64 tdiff), 265 266 TP_ARGS(gl, tdiff), 267 268 TP_STRUCT__entry( 269 __field( dev_t, dev ) 270 __field( u64, glnum ) 271 __field( u32, gltype ) 272 __field( int, status ) 273 __field( char, flags ) 274 __field( s64, tdiff ) 275 __field( u64, srtt ) 276 __field( u64, srttvar ) 277 __field( u64, srttb ) 278 __field( u64, srttvarb ) 279 __field( u64, sirt ) 280 __field( u64, sirtvar ) 281 __field( u64, dcount ) 282 __field( u64, qcount ) 283 ), 284 285 TP_fast_assign( 286 __entry->dev = gl->gl_name.ln_sbd->sd_vfs->s_dev; 287 __entry->glnum = gl->gl_name.ln_number; 288 __entry->gltype = gl->gl_name.ln_type; 289 __entry->status = gl->gl_lksb.sb_status; 290 __entry->flags = gl->gl_lksb.sb_flags; 291 __entry->tdiff = tdiff; 292 __entry->srtt = gl->gl_stats.stats[GFS2_LKS_SRTT]; 293 __entry->srttvar = gl->gl_stats.stats[GFS2_LKS_SRTTVAR]; 294 __entry->srttb = gl->gl_stats.stats[GFS2_LKS_SRTTB]; 295 __entry->srttvarb = gl->gl_stats.stats[GFS2_LKS_SRTTVARB]; 296 __entry->sirt = gl->gl_stats.stats[GFS2_LKS_SIRT]; 297 __entry->sirtvar = gl->gl_stats.stats[GFS2_LKS_SIRTVAR]; 298 __entry->dcount = gl->gl_stats.stats[GFS2_LKS_DCOUNT]; 299 __entry->qcount = gl->gl_stats.stats[GFS2_LKS_QCOUNT]; 300 ), 301 302 TP_printk("%u,%u glock %d:%lld status:%d flags:%02x tdiff:%lld srtt:%lld/%lld srttb:%lld/%lld sirt:%lld/%lld dcnt:%lld qcnt:%lld", 303 MAJOR(__entry->dev), MINOR(__entry->dev), __entry->gltype, 304 (unsigned long long)__entry->glnum, 305 __entry->status, __entry->flags, 306 (long long)__entry->tdiff, 307 (long long)__entry->srtt, 308 (long long)__entry->srttvar, 309 (long long)__entry->srttb, 310 (long long)__entry->srttvarb, 311 (long long)__entry->sirt, 312 (long long)__entry->sirtvar, 313 (long long)__entry->dcount, 314 (long long)__entry->qcount) 315 ); 316 317 /* Section 2 - Log/journal 318 * 319 * Objectives: 320 * Latency: Log flush time 321 * Correctness: pin/unpin vs. disk I/O ordering 322 * Performance: Log usage stats 323 */ 324 325 /* Pin/unpin a block in the log */ 326 TRACE_EVENT(gfs2_pin, 327 328 TP_PROTO(const struct gfs2_bufdata *bd, int pin), 329 330 TP_ARGS(bd, pin), 331 332 TP_STRUCT__entry( 333 __field( dev_t, dev ) 334 __field( int, pin ) 335 __field( u32, len ) 336 __field( sector_t, block ) 337 __field( u64, ino ) 338 ), 339 340 TP_fast_assign( 341 __entry->dev = bd->bd_gl->gl_name.ln_sbd->sd_vfs->s_dev; 342 __entry->pin = pin; 343 __entry->len = bd->bd_bh->b_size; 344 __entry->block = bd->bd_bh->b_blocknr; 345 __entry->ino = bd->bd_gl->gl_name.ln_number; 346 ), 347 348 TP_printk("%u,%u log %s %llu/%lu inode %llu", 349 MAJOR(__entry->dev), MINOR(__entry->dev), 350 __entry->pin ? "pin" : "unpin", 351 (unsigned long long)__entry->block, 352 (unsigned long)__entry->len, 353 (unsigned long long)__entry->ino) 354 ); 355 356 /* Flushing the log */ 357 TRACE_EVENT(gfs2_log_flush, 358 359 TP_PROTO(const struct gfs2_sbd *sdp, int start, u32 flags), 360 361 TP_ARGS(sdp, start, flags), 362 363 TP_STRUCT__entry( 364 __field( dev_t, dev ) 365 __field( int, start ) 366 __field( u64, log_seq ) 367 __field( u32, flags ) 368 ), 369 370 TP_fast_assign( 371 __entry->dev = sdp->sd_vfs->s_dev; 372 __entry->start = start; 373 __entry->log_seq = sdp->sd_log_sequence; 374 __entry->flags = flags; 375 ), 376 377 TP_printk("%u,%u log flush %s %llu %llx", 378 MAJOR(__entry->dev), MINOR(__entry->dev), 379 __entry->start ? "start" : "end", 380 (unsigned long long)__entry->log_seq, 381 (unsigned long long)__entry->flags) 382 ); 383 384 /* Reserving/releasing blocks in the log */ 385 TRACE_EVENT(gfs2_log_blocks, 386 387 TP_PROTO(const struct gfs2_sbd *sdp, int blocks), 388 389 TP_ARGS(sdp, blocks), 390 391 TP_STRUCT__entry( 392 __field( dev_t, dev ) 393 __field( int, blocks ) 394 __field( int, blks_free ) 395 ), 396 397 TP_fast_assign( 398 __entry->dev = sdp->sd_vfs->s_dev; 399 __entry->blocks = blocks; 400 __entry->blks_free = atomic_read(&sdp->sd_log_blks_free); 401 ), 402 403 TP_printk("%u,%u log reserve %d %d", MAJOR(__entry->dev), 404 MINOR(__entry->dev), __entry->blocks, __entry->blks_free) 405 ); 406 407 /* Writing back the AIL */ 408 TRACE_EVENT(gfs2_ail_flush, 409 410 TP_PROTO(const struct gfs2_sbd *sdp, const struct writeback_control *wbc, int start), 411 412 TP_ARGS(sdp, wbc, start), 413 414 TP_STRUCT__entry( 415 __field( dev_t, dev ) 416 __field( int, start ) 417 __field( int, sync_mode ) 418 __field( long, nr_to_write ) 419 ), 420 421 TP_fast_assign( 422 __entry->dev = sdp->sd_vfs->s_dev; 423 __entry->start = start; 424 __entry->sync_mode = wbc->sync_mode; 425 __entry->nr_to_write = wbc->nr_to_write; 426 ), 427 428 TP_printk("%u,%u ail flush %s %s %ld", MAJOR(__entry->dev), 429 MINOR(__entry->dev), __entry->start ? "start" : "end", 430 __entry->sync_mode == WB_SYNC_ALL ? "all" : "none", 431 __entry->nr_to_write) 432 ); 433 434 /* Section 3 - bmap 435 * 436 * Objectives: 437 * Latency: Bmap request time 438 * Performance: Block allocator tracing 439 * Correctness: Test of disard generation vs. blocks allocated 440 */ 441 442 /* Map an extent of blocks, possibly a new allocation */ 443 TRACE_EVENT(gfs2_bmap, 444 445 TP_PROTO(const struct gfs2_inode *ip, const struct buffer_head *bh, 446 sector_t lblock, int create, int errno), 447 448 TP_ARGS(ip, bh, lblock, create, errno), 449 450 TP_STRUCT__entry( 451 __field( dev_t, dev ) 452 __field( sector_t, lblock ) 453 __field( sector_t, pblock ) 454 __field( u64, inum ) 455 __field( unsigned long, state ) 456 __field( u32, len ) 457 __field( int, create ) 458 __field( int, errno ) 459 ), 460 461 TP_fast_assign( 462 __entry->dev = ip->i_gl->gl_name.ln_sbd->sd_vfs->s_dev; 463 __entry->lblock = lblock; 464 __entry->pblock = buffer_mapped(bh) ? bh->b_blocknr : 0; 465 __entry->inum = ip->i_no_addr; 466 __entry->state = bh->b_state; 467 __entry->len = bh->b_size; 468 __entry->create = create; 469 __entry->errno = errno; 470 ), 471 472 TP_printk("%u,%u bmap %llu map %llu/%lu to %llu flags:%08lx %s %d", 473 MAJOR(__entry->dev), MINOR(__entry->dev), 474 (unsigned long long)__entry->inum, 475 (unsigned long long)__entry->lblock, 476 (unsigned long)__entry->len, 477 (unsigned long long)__entry->pblock, 478 __entry->state, __entry->create ? "create " : "nocreate", 479 __entry->errno) 480 ); 481 482 TRACE_EVENT(gfs2_iomap_start, 483 484 TP_PROTO(const struct gfs2_inode *ip, loff_t pos, ssize_t length, 485 u16 flags), 486 487 TP_ARGS(ip, pos, length, flags), 488 489 TP_STRUCT__entry( 490 __field( dev_t, dev ) 491 __field( u64, inum ) 492 __field( loff_t, pos ) 493 __field( ssize_t, length ) 494 __field( u16, flags ) 495 ), 496 497 TP_fast_assign( 498 __entry->dev = ip->i_gl->gl_name.ln_sbd->sd_vfs->s_dev; 499 __entry->inum = ip->i_no_addr; 500 __entry->pos = pos; 501 __entry->length = length; 502 __entry->flags = flags; 503 ), 504 505 TP_printk("%u,%u bmap %llu iomap start %llu/%lu flags:%08x", 506 MAJOR(__entry->dev), MINOR(__entry->dev), 507 (unsigned long long)__entry->inum, 508 (unsigned long long)__entry->pos, 509 (unsigned long)__entry->length, (u16)__entry->flags) 510 ); 511 512 TRACE_EVENT(gfs2_iomap_end, 513 514 TP_PROTO(const struct gfs2_inode *ip, struct iomap *iomap, int ret), 515 516 TP_ARGS(ip, iomap, ret), 517 518 TP_STRUCT__entry( 519 __field( dev_t, dev ) 520 __field( u64, inum ) 521 __field( loff_t, offset ) 522 __field( ssize_t, length ) 523 __field( sector_t, pblock ) 524 __field( u16, flags ) 525 __field( u16, type ) 526 __field( int, ret ) 527 ), 528 529 TP_fast_assign( 530 __entry->dev = ip->i_gl->gl_name.ln_sbd->sd_vfs->s_dev; 531 __entry->inum = ip->i_no_addr; 532 __entry->offset = iomap->offset; 533 __entry->length = iomap->length; 534 __entry->pblock = iomap->addr == IOMAP_NULL_ADDR ? 0 : 535 (iomap->addr >> ip->i_inode.i_blkbits); 536 __entry->flags = iomap->flags; 537 __entry->type = iomap->type; 538 __entry->ret = ret; 539 ), 540 541 TP_printk("%u,%u bmap %llu iomap end %llu/%lu to %llu ty:%d flags:%08x rc:%d", 542 MAJOR(__entry->dev), MINOR(__entry->dev), 543 (unsigned long long)__entry->inum, 544 (unsigned long long)__entry->offset, 545 (unsigned long)__entry->length, 546 (long long)__entry->pblock, 547 (u16)__entry->type, 548 (u16)__entry->flags, __entry->ret) 549 ); 550 551 /* Keep track of blocks as they are allocated/freed */ 552 TRACE_EVENT(gfs2_block_alloc, 553 554 TP_PROTO(const struct gfs2_inode *ip, struct gfs2_rgrpd *rgd, 555 u64 block, unsigned len, u8 block_state), 556 557 TP_ARGS(ip, rgd, block, len, block_state), 558 559 TP_STRUCT__entry( 560 __field( dev_t, dev ) 561 __field( u64, start ) 562 __field( u64, inum ) 563 __field( u32, len ) 564 __field( u8, block_state ) 565 __field( u64, rd_addr ) 566 __field( u32, rd_free_clone ) 567 __field( u32, rd_requested ) 568 __field( u32, rd_reserved ) 569 ), 570 571 TP_fast_assign( 572 __entry->dev = rgd->rd_gl->gl_name.ln_sbd->sd_vfs->s_dev; 573 __entry->start = block; 574 __entry->inum = ip->i_no_addr; 575 __entry->len = len; 576 __entry->block_state = block_state; 577 __entry->rd_addr = rgd->rd_addr; 578 __entry->rd_free_clone = rgd->rd_free_clone; 579 __entry->rd_requested = rgd->rd_requested; 580 __entry->rd_reserved = rgd->rd_reserved; 581 ), 582 583 TP_printk("%u,%u bmap %llu alloc %llu/%lu %s rg:%llu rf:%u rq:%u rr:%u", 584 MAJOR(__entry->dev), MINOR(__entry->dev), 585 (unsigned long long)__entry->inum, 586 (unsigned long long)__entry->start, 587 (unsigned long)__entry->len, 588 block_state_name(__entry->block_state), 589 (unsigned long long)__entry->rd_addr, 590 __entry->rd_free_clone, 591 __entry->rd_requested, 592 __entry->rd_reserved) 593 ); 594 595 /* Keep track of multi-block reservations as they are allocated/freed */ 596 TRACE_EVENT(gfs2_rs, 597 598 TP_PROTO(const struct gfs2_blkreserv *rs, u8 func), 599 600 TP_ARGS(rs, func), 601 602 TP_STRUCT__entry( 603 __field( dev_t, dev ) 604 __field( u64, rd_addr ) 605 __field( u32, rd_free_clone ) 606 __field( u32, rd_requested ) 607 __field( u32, rd_reserved ) 608 __field( u64, inum ) 609 __field( u64, start ) 610 __field( u32, requested ) 611 __field( u32, reserved ) 612 __field( u8, func ) 613 ), 614 615 TP_fast_assign( 616 __entry->dev = rs->rs_rgd->rd_sbd->sd_vfs->s_dev; 617 __entry->rd_addr = rs->rs_rgd->rd_addr; 618 __entry->rd_free_clone = rs->rs_rgd->rd_free_clone; 619 __entry->rd_requested = rs->rs_rgd->rd_requested; 620 __entry->rd_reserved = rs->rs_rgd->rd_reserved; 621 __entry->inum = container_of(rs, struct gfs2_inode, 622 i_res)->i_no_addr; 623 __entry->start = rs->rs_start; 624 __entry->requested = rs->rs_requested; 625 __entry->reserved = rs->rs_reserved; 626 __entry->func = func; 627 ), 628 629 TP_printk("%u,%u bmap %llu resrv %llu rg:%llu rf:%u rq:%u rr:%u %s q:%u r:%u", 630 MAJOR(__entry->dev), MINOR(__entry->dev), 631 (unsigned long long)__entry->inum, 632 (unsigned long long)__entry->start, 633 (unsigned long long)__entry->rd_addr, 634 __entry->rd_free_clone, 635 __entry->rd_requested, 636 __entry->rd_reserved, 637 rs_func_name(__entry->func), 638 __entry->requested, 639 __entry->reserved) 640 ); 641 642 #endif /* _TRACE_GFS2_H */ 643 644 /* This part must be outside protection */ 645 #undef TRACE_INCLUDE_PATH 646 #define TRACE_INCLUDE_PATH . 647 #define TRACE_INCLUDE_FILE trace_gfs2 648 #include <trace/define_trace.h> 649 650