1 /* SPDX-License-Identifier: GPL-2.0 */ 2 #undef TRACE_SYSTEM 3 #define TRACE_SYSTEM block 4 5 #if !defined(_TRACE_BLOCK_H) || defined(TRACE_HEADER_MULTI_READ) 6 #define _TRACE_BLOCK_H 7 8 #include <linux/blktrace_api.h> 9 #include <linux/blkdev.h> 10 #include <linux/buffer_head.h> 11 #include <linux/tracepoint.h> 12 #include <uapi/linux/ioprio.h> 13 14 #define RWBS_LEN 10 15 16 #define IOPRIO_CLASS_STRINGS \ 17 { IOPRIO_CLASS_NONE, "none" }, \ 18 { IOPRIO_CLASS_RT, "rt" }, \ 19 { IOPRIO_CLASS_BE, "be" }, \ 20 { IOPRIO_CLASS_IDLE, "idle" }, \ 21 { IOPRIO_CLASS_INVALID, "invalid"} 22 23 #ifdef CONFIG_BUFFER_HEAD 24 DECLARE_EVENT_CLASS(block_buffer, 25 26 TP_PROTO(struct buffer_head *bh), 27 28 TP_ARGS(bh), 29 30 TP_STRUCT__entry ( 31 __field( dev_t, dev ) 32 __field( sector_t, sector ) 33 __field( size_t, size ) 34 ), 35 36 TP_fast_assign( 37 __entry->dev = bh->b_bdev->bd_dev; 38 __entry->sector = bh->b_blocknr; 39 __entry->size = bh->b_size; 40 ), 41 42 TP_printk("%d,%d sector=%llu size=%zu", 43 MAJOR(__entry->dev), MINOR(__entry->dev), 44 (unsigned long long)__entry->sector, __entry->size 45 ) 46 ); 47 48 /** 49 * block_touch_buffer - mark a buffer accessed 50 * @bh: buffer_head being touched 51 * 52 * Called from touch_buffer(). 53 */ 54 DEFINE_EVENT(block_buffer, block_touch_buffer, 55 56 TP_PROTO(struct buffer_head *bh), 57 58 TP_ARGS(bh) 59 ); 60 61 /** 62 * block_dirty_buffer - mark a buffer dirty 63 * @bh: buffer_head being dirtied 64 * 65 * Called from mark_buffer_dirty(). 66 */ 67 DEFINE_EVENT(block_buffer, block_dirty_buffer, 68 69 TP_PROTO(struct buffer_head *bh), 70 71 TP_ARGS(bh) 72 ); 73 #endif /* CONFIG_BUFFER_HEAD */ 74 75 /** 76 * block_rq_requeue - place block IO request back on a queue 77 * @rq: block IO operation request 78 * 79 * The block operation request @rq is being placed back into queue 80 * @q. For some reason the request was not completed and needs to be 81 * put back in the queue. 82 */ 83 TRACE_EVENT(block_rq_requeue, 84 85 TP_PROTO(struct request *rq), 86 87 TP_ARGS(rq), 88 89 TP_STRUCT__entry( 90 __field( dev_t, dev ) 91 __field( sector_t, sector ) 92 __field( unsigned int, nr_sector ) 93 __field( unsigned short, ioprio ) 94 __array( char, rwbs, RWBS_LEN ) 95 __dynamic_array( char, cmd, 1 ) 96 ), 97 98 TP_fast_assign( 99 __entry->dev = rq->q->disk ? disk_devt(rq->q->disk) : 0; 100 __entry->sector = blk_rq_trace_sector(rq); 101 __entry->nr_sector = blk_rq_trace_nr_sectors(rq); 102 __entry->ioprio = req_get_ioprio(rq); 103 104 blk_fill_rwbs(__entry->rwbs, rq->cmd_flags); 105 __get_str(cmd)[0] = '\0'; 106 ), 107 108 TP_printk("%d,%d %s (%s) %llu + %u %s,%u,%u [%d]", 109 MAJOR(__entry->dev), MINOR(__entry->dev), 110 __entry->rwbs, __get_str(cmd), 111 (unsigned long long)__entry->sector, __entry->nr_sector, 112 __print_symbolic(IOPRIO_PRIO_CLASS(__entry->ioprio), 113 IOPRIO_CLASS_STRINGS), 114 IOPRIO_PRIO_HINT(__entry->ioprio), 115 IOPRIO_PRIO_LEVEL(__entry->ioprio), 0) 116 ); 117 118 DECLARE_EVENT_CLASS(block_rq_completion, 119 120 TP_PROTO(struct request *rq, blk_status_t error, unsigned int nr_bytes), 121 122 TP_ARGS(rq, error, nr_bytes), 123 124 TP_STRUCT__entry( 125 __field( dev_t, dev ) 126 __field( sector_t, sector ) 127 __field( unsigned int, nr_sector ) 128 __field( int , error ) 129 __field( unsigned short, ioprio ) 130 __array( char, rwbs, RWBS_LEN ) 131 __dynamic_array( char, cmd, 1 ) 132 ), 133 134 TP_fast_assign( 135 __entry->dev = rq->q->disk ? disk_devt(rq->q->disk) : 0; 136 __entry->sector = blk_rq_pos(rq); 137 __entry->nr_sector = nr_bytes >> 9; 138 __entry->error = blk_status_to_errno(error); 139 __entry->ioprio = req_get_ioprio(rq); 140 141 blk_fill_rwbs(__entry->rwbs, rq->cmd_flags); 142 __get_str(cmd)[0] = '\0'; 143 ), 144 145 TP_printk("%d,%d %s (%s) %llu + %u %s,%u,%u [%d]", 146 MAJOR(__entry->dev), MINOR(__entry->dev), 147 __entry->rwbs, __get_str(cmd), 148 (unsigned long long)__entry->sector, __entry->nr_sector, 149 __print_symbolic(IOPRIO_PRIO_CLASS(__entry->ioprio), 150 IOPRIO_CLASS_STRINGS), 151 IOPRIO_PRIO_HINT(__entry->ioprio), 152 IOPRIO_PRIO_LEVEL(__entry->ioprio), __entry->error) 153 ); 154 155 /** 156 * block_rq_complete - block IO operation completed by device driver 157 * @rq: block operations request 158 * @error: status code 159 * @nr_bytes: number of completed bytes 160 * 161 * The block_rq_complete tracepoint event indicates that some portion 162 * of operation request has been completed by the device driver. If 163 * the @rq->bio is %NULL, then there is absolutely no additional work to 164 * do for the request. If @rq->bio is non-NULL then there is 165 * additional work required to complete the request. 166 */ 167 DEFINE_EVENT(block_rq_completion, block_rq_complete, 168 169 TP_PROTO(struct request *rq, blk_status_t error, unsigned int nr_bytes), 170 171 TP_ARGS(rq, error, nr_bytes) 172 ); 173 174 /** 175 * block_rq_error - block IO operation error reported by device driver 176 * @rq: block operations request 177 * @error: status code 178 * @nr_bytes: number of completed bytes 179 * 180 * The block_rq_error tracepoint event indicates that some portion 181 * of operation request has failed as reported by the device driver. 182 */ 183 DEFINE_EVENT(block_rq_completion, block_rq_error, 184 185 TP_PROTO(struct request *rq, blk_status_t error, unsigned int nr_bytes), 186 187 TP_ARGS(rq, error, nr_bytes) 188 ); 189 190 DECLARE_EVENT_CLASS(block_rq, 191 192 TP_PROTO(struct request *rq), 193 194 TP_ARGS(rq), 195 196 TP_STRUCT__entry( 197 __field( dev_t, dev ) 198 __field( sector_t, sector ) 199 __field( unsigned int, nr_sector ) 200 __field( unsigned int, bytes ) 201 __field( unsigned short, ioprio ) 202 __array( char, rwbs, RWBS_LEN ) 203 __array( char, comm, TASK_COMM_LEN ) 204 __dynamic_array( char, cmd, 1 ) 205 ), 206 207 TP_fast_assign( 208 __entry->dev = rq->q->disk ? disk_devt(rq->q->disk) : 0; 209 __entry->sector = blk_rq_trace_sector(rq); 210 __entry->nr_sector = blk_rq_trace_nr_sectors(rq); 211 __entry->bytes = blk_rq_bytes(rq); 212 __entry->ioprio = req_get_ioprio(rq); 213 214 blk_fill_rwbs(__entry->rwbs, rq->cmd_flags); 215 __get_str(cmd)[0] = '\0'; 216 memcpy(__entry->comm, current->comm, TASK_COMM_LEN); 217 ), 218 219 TP_printk("%d,%d %s %u (%s) %llu + %u %s,%u,%u [%s]", 220 MAJOR(__entry->dev), MINOR(__entry->dev), 221 __entry->rwbs, __entry->bytes, __get_str(cmd), 222 (unsigned long long)__entry->sector, __entry->nr_sector, 223 __print_symbolic(IOPRIO_PRIO_CLASS(__entry->ioprio), 224 IOPRIO_CLASS_STRINGS), 225 IOPRIO_PRIO_HINT(__entry->ioprio), 226 IOPRIO_PRIO_LEVEL(__entry->ioprio), __entry->comm) 227 ); 228 229 /** 230 * block_rq_tag_wait - triggered when a request is starved of a tag 231 * @q: request queue of the target device 232 * @hctx: hardware context of the request experiencing starvation 233 * @is_sched_tag: indicates whether the starved pool is the software scheduler 234 * @alloc_flags: allocation flags dictating the specific tag pool 235 * 236 * Called immediately before the submitting context is forced to block due 237 * to the exhaustion of available tags (i.e., physical hardware driver 238 * tags, software scheduler tags, or reserved tags). This trace point 239 * indicates that the context will be placed into an uninterruptible state 240 * via sbitmap_prepare_to_wait(). If a tag is not acquired in the final 241 * lockless retry, the context will yield the CPU via io_schedule() until 242 * an active request completes and relinquishes its assigned tag. 243 */ 244 TRACE_EVENT(block_rq_tag_wait, 245 246 TP_PROTO(struct request_queue *q, struct blk_mq_hw_ctx *hctx, 247 bool is_sched_tag, unsigned int alloc_flags), 248 249 TP_ARGS(q, hctx, is_sched_tag, alloc_flags), 250 251 TP_STRUCT__entry( 252 __field( dev_t, dev ) 253 __field( u32, hctx_id ) 254 __field( u32, nr_tags ) 255 __field( bool, is_sched_tag ) 256 __field( bool, is_reserved ) 257 ), 258 259 TP_fast_assign( 260 __entry->dev = q->disk ? disk_devt(q->disk) : 0; 261 __entry->hctx_id = hctx->queue_num; 262 __entry->is_sched_tag = is_sched_tag; 263 __entry->is_reserved = alloc_flags & BLK_MQ_REQ_RESERVED; 264 265 if (__entry->is_reserved) { 266 __entry->nr_tags = is_sched_tag ? 267 hctx->sched_tags->nr_reserved_tags : 268 hctx->tags->nr_reserved_tags; 269 } else { 270 if (is_sched_tag) 271 __entry->nr_tags = hctx->sched_tags->nr_tags - 272 hctx->sched_tags->nr_reserved_tags; 273 else 274 __entry->nr_tags = hctx->tags->nr_tags - 275 hctx->tags->nr_reserved_tags; 276 } 277 278 ), 279 280 TP_printk("%d,%d hctx=%u starved on %s%s tags (depth=%u)", 281 MAJOR(__entry->dev), MINOR(__entry->dev), 282 __entry->hctx_id, 283 __entry->is_sched_tag ? "scheduler" : "hardware", 284 __entry->is_reserved ? " reserved" : "", 285 __entry->nr_tags) 286 ); 287 288 /** 289 * block_rq_insert - insert block operation request into queue 290 * @rq: block IO operation request 291 * 292 * Called immediately before block operation request @rq is inserted 293 * into queue @q. The fields in the operation request @rq struct can 294 * be examined to determine which device and sectors the pending 295 * operation would access. 296 */ 297 DEFINE_EVENT(block_rq, block_rq_insert, 298 299 TP_PROTO(struct request *rq), 300 301 TP_ARGS(rq) 302 ); 303 304 /** 305 * block_rq_issue - issue pending block IO request operation to device driver 306 * @rq: block IO operation request 307 * 308 * Called when block operation request @rq from queue @q is sent to a 309 * device driver for processing. 310 */ 311 DEFINE_EVENT(block_rq, block_rq_issue, 312 313 TP_PROTO(struct request *rq), 314 315 TP_ARGS(rq) 316 ); 317 318 /** 319 * block_rq_merge - merge request with another one in the elevator 320 * @rq: block IO operation request 321 * 322 * Called when block operation request @rq from queue @q is merged to another 323 * request queued in the elevator. 324 */ 325 DEFINE_EVENT(block_rq, block_rq_merge, 326 327 TP_PROTO(struct request *rq), 328 329 TP_ARGS(rq) 330 ); 331 332 /** 333 * block_io_start - insert a request for execution 334 * @rq: block IO operation request 335 * 336 * Called when block operation request @rq is queued for execution 337 */ 338 DEFINE_EVENT(block_rq, block_io_start, 339 340 TP_PROTO(struct request *rq), 341 342 TP_ARGS(rq) 343 ); 344 345 /** 346 * block_io_done - block IO operation request completed 347 * @rq: block IO operation request 348 * 349 * Called when block operation request @rq is completed 350 */ 351 DEFINE_EVENT(block_rq, block_io_done, 352 353 TP_PROTO(struct request *rq), 354 355 TP_ARGS(rq) 356 ); 357 358 /** 359 * block_bio_complete - completed all work on the block operation 360 * @q: queue holding the block operation 361 * @bio: block operation completed 362 * 363 * This tracepoint indicates there is no further work to do on this 364 * block IO operation @bio. 365 */ 366 TRACE_EVENT(block_bio_complete, 367 368 TP_PROTO(struct request_queue *q, struct bio *bio), 369 370 TP_ARGS(q, bio), 371 372 TP_STRUCT__entry( 373 __field( dev_t, dev ) 374 __field( sector_t, sector ) 375 __field( unsigned, nr_sector ) 376 __field( int, error ) 377 __array( char, rwbs, RWBS_LEN) 378 ), 379 380 TP_fast_assign( 381 __entry->dev = bio_dev(bio); 382 __entry->sector = bio->bi_iter.bi_sector; 383 __entry->nr_sector = bio_sectors(bio); 384 __entry->error = blk_status_to_errno(bio->bi_status); 385 blk_fill_rwbs(__entry->rwbs, bio->bi_opf); 386 ), 387 388 TP_printk("%d,%d %s %llu + %u [%d]", 389 MAJOR(__entry->dev), MINOR(__entry->dev), __entry->rwbs, 390 (unsigned long long)__entry->sector, 391 __entry->nr_sector, __entry->error) 392 ); 393 394 DECLARE_EVENT_CLASS(block_bio, 395 396 TP_PROTO(struct bio *bio), 397 398 TP_ARGS(bio), 399 400 TP_STRUCT__entry( 401 __field( dev_t, dev ) 402 __field( sector_t, sector ) 403 __field( unsigned int, nr_sector ) 404 __array( char, rwbs, RWBS_LEN ) 405 __array( char, comm, TASK_COMM_LEN ) 406 ), 407 408 TP_fast_assign( 409 __entry->dev = bio_dev(bio); 410 __entry->sector = bio->bi_iter.bi_sector; 411 __entry->nr_sector = bio_sectors(bio); 412 blk_fill_rwbs(__entry->rwbs, bio->bi_opf); 413 memcpy(__entry->comm, current->comm, TASK_COMM_LEN); 414 ), 415 416 TP_printk("%d,%d %s %llu + %u [%s]", 417 MAJOR(__entry->dev), MINOR(__entry->dev), __entry->rwbs, 418 (unsigned long long)__entry->sector, 419 __entry->nr_sector, __entry->comm) 420 ); 421 422 /** 423 * block_bio_backmerge - merging block operation to the end of an existing operation 424 * @bio: new block operation to merge 425 * 426 * Merging block request @bio to the end of an existing block request. 427 */ 428 DEFINE_EVENT(block_bio, block_bio_backmerge, 429 TP_PROTO(struct bio *bio), 430 TP_ARGS(bio) 431 ); 432 433 /** 434 * block_bio_frontmerge - merging block operation to the beginning of an existing operation 435 * @bio: new block operation to merge 436 * 437 * Merging block IO operation @bio to the beginning of an existing block request. 438 */ 439 DEFINE_EVENT(block_bio, block_bio_frontmerge, 440 TP_PROTO(struct bio *bio), 441 TP_ARGS(bio) 442 ); 443 444 /** 445 * block_bio_queue - putting new block IO operation in queue 446 * @bio: new block operation 447 * 448 * About to place the block IO operation @bio into queue @q. 449 */ 450 DEFINE_EVENT(block_bio, block_bio_queue, 451 TP_PROTO(struct bio *bio), 452 TP_ARGS(bio) 453 ); 454 455 /** 456 * block_getrq - get a free request entry in queue for block IO operations 457 * @bio: pending block IO operation (can be %NULL) 458 * 459 * A request struct has been allocated to handle the block IO operation @bio. 460 */ 461 DEFINE_EVENT(block_bio, block_getrq, 462 TP_PROTO(struct bio *bio), 463 TP_ARGS(bio) 464 ); 465 466 /** 467 * blk_zone_append_update_request_bio - update bio sector after zone append 468 * @rq: the completed request that sets the bio sector 469 * 470 * Update the bio's bi_sector after a zone append command has been completed. 471 */ 472 DEFINE_EVENT(block_rq, blk_zone_append_update_request_bio, 473 TP_PROTO(struct request *rq), 474 TP_ARGS(rq) 475 ); 476 477 /** 478 * block_plug - keep operations requests in request queue 479 * @q: request queue to plug 480 * 481 * Plug the request queue @q. Do not allow block operation requests 482 * to be sent to the device driver. Instead, accumulate requests in 483 * the queue to improve throughput performance of the block device. 484 */ 485 TRACE_EVENT(block_plug, 486 487 TP_PROTO(struct request_queue *q), 488 489 TP_ARGS(q), 490 491 TP_STRUCT__entry( 492 __array( char, comm, TASK_COMM_LEN ) 493 ), 494 495 TP_fast_assign( 496 memcpy(__entry->comm, current->comm, TASK_COMM_LEN); 497 ), 498 499 TP_printk("[%s]", __entry->comm) 500 ); 501 502 DECLARE_EVENT_CLASS(block_unplug, 503 504 TP_PROTO(struct request_queue *q, unsigned int depth, bool explicit), 505 506 TP_ARGS(q, depth, explicit), 507 508 TP_STRUCT__entry( 509 __field( int, nr_rq ) 510 __array( char, comm, TASK_COMM_LEN ) 511 ), 512 513 TP_fast_assign( 514 __entry->nr_rq = depth; 515 memcpy(__entry->comm, current->comm, TASK_COMM_LEN); 516 ), 517 518 TP_printk("[%s] %d", __entry->comm, __entry->nr_rq) 519 ); 520 521 /** 522 * block_unplug - release of operations requests in request queue 523 * @q: request queue to unplug 524 * @depth: number of requests just added to the queue 525 * @explicit: whether this was an explicit unplug, or one from schedule() 526 * 527 * Unplug request queue @q because device driver is scheduled to work 528 * on elements in the request queue. 529 */ 530 DEFINE_EVENT(block_unplug, block_unplug, 531 532 TP_PROTO(struct request_queue *q, unsigned int depth, bool explicit), 533 534 TP_ARGS(q, depth, explicit) 535 ); 536 537 /** 538 * block_split - split a single bio struct into two bio structs 539 * @bio: block operation being split 540 * @new_sector: The starting sector for the new bio 541 * 542 * The bio request @bio needs to be split into two bio requests. The newly 543 * created @bio request starts at @new_sector. This split may be required due to 544 * hardware limitations such as operation crossing device boundaries in a RAID 545 * system. 546 */ 547 TRACE_EVENT(block_split, 548 549 TP_PROTO(struct bio *bio, unsigned int new_sector), 550 551 TP_ARGS(bio, new_sector), 552 553 TP_STRUCT__entry( 554 __field( dev_t, dev ) 555 __field( sector_t, sector ) 556 __field( sector_t, new_sector ) 557 __array( char, rwbs, RWBS_LEN ) 558 __array( char, comm, TASK_COMM_LEN ) 559 ), 560 561 TP_fast_assign( 562 __entry->dev = bio_dev(bio); 563 __entry->sector = bio->bi_iter.bi_sector; 564 __entry->new_sector = new_sector; 565 blk_fill_rwbs(__entry->rwbs, bio->bi_opf); 566 memcpy(__entry->comm, current->comm, TASK_COMM_LEN); 567 ), 568 569 TP_printk("%d,%d %s %llu / %llu [%s]", 570 MAJOR(__entry->dev), MINOR(__entry->dev), __entry->rwbs, 571 (unsigned long long)__entry->sector, 572 (unsigned long long)__entry->new_sector, 573 __entry->comm) 574 ); 575 576 /** 577 * block_bio_remap - map request for a logical device to the raw device 578 * @bio: revised operation 579 * @dev: original device for the operation 580 * @from: original sector for the operation 581 * 582 * An operation for a logical device has been mapped to the 583 * raw block device. 584 */ 585 TRACE_EVENT(block_bio_remap, 586 587 TP_PROTO(struct bio *bio, dev_t dev, sector_t from), 588 589 TP_ARGS(bio, dev, from), 590 591 TP_STRUCT__entry( 592 __field( dev_t, dev ) 593 __field( sector_t, sector ) 594 __field( unsigned int, nr_sector ) 595 __field( dev_t, old_dev ) 596 __field( sector_t, old_sector ) 597 __array( char, rwbs, RWBS_LEN) 598 ), 599 600 TP_fast_assign( 601 __entry->dev = bio_dev(bio); 602 __entry->sector = bio->bi_iter.bi_sector; 603 __entry->nr_sector = bio_sectors(bio); 604 __entry->old_dev = dev; 605 __entry->old_sector = from; 606 blk_fill_rwbs(__entry->rwbs, bio->bi_opf); 607 ), 608 609 TP_printk("%d,%d %s %llu + %u <- (%d,%d) %llu", 610 MAJOR(__entry->dev), MINOR(__entry->dev), __entry->rwbs, 611 (unsigned long long)__entry->sector, 612 __entry->nr_sector, 613 MAJOR(__entry->old_dev), MINOR(__entry->old_dev), 614 (unsigned long long)__entry->old_sector) 615 ); 616 617 /** 618 * block_rq_remap - map request for a block operation request 619 * @rq: block IO operation request 620 * @dev: device for the operation 621 * @from: original sector for the operation 622 * 623 * The block operation request @rq in @q has been remapped. The block 624 * operation request @rq holds the current information and @from hold 625 * the original sector. 626 */ 627 TRACE_EVENT(block_rq_remap, 628 629 TP_PROTO(struct request *rq, dev_t dev, sector_t from), 630 631 TP_ARGS(rq, dev, from), 632 633 TP_STRUCT__entry( 634 __field( dev_t, dev ) 635 __field( sector_t, sector ) 636 __field( unsigned int, nr_sector ) 637 __field( dev_t, old_dev ) 638 __field( sector_t, old_sector ) 639 __field( unsigned int, nr_bios ) 640 __array( char, rwbs, RWBS_LEN) 641 ), 642 643 TP_fast_assign( 644 __entry->dev = disk_devt(rq->q->disk); 645 __entry->sector = blk_rq_pos(rq); 646 __entry->nr_sector = blk_rq_sectors(rq); 647 __entry->old_dev = dev; 648 __entry->old_sector = from; 649 __entry->nr_bios = blk_rq_count_bios(rq); 650 blk_fill_rwbs(__entry->rwbs, rq->cmd_flags); 651 ), 652 653 TP_printk("%d,%d %s %llu + %u <- (%d,%d) %llu %u", 654 MAJOR(__entry->dev), MINOR(__entry->dev), __entry->rwbs, 655 (unsigned long long)__entry->sector, 656 __entry->nr_sector, 657 MAJOR(__entry->old_dev), MINOR(__entry->old_dev), 658 (unsigned long long)__entry->old_sector, __entry->nr_bios) 659 ); 660 661 /** 662 * blkdev_zone_mgmt - Execute a zone management operation on a range of zones 663 * @bio: The block IO operation sent down to the device 664 * @nr_sectors: The number of sectors affected by this operation 665 * 666 * Execute a zone management operation on a specified range of zones. This 667 * range is encoded in %nr_sectors, which has to be a multiple of the zone 668 * size. 669 */ 670 TRACE_EVENT(blkdev_zone_mgmt, 671 672 TP_PROTO(struct bio *bio, sector_t nr_sectors), 673 674 TP_ARGS(bio, nr_sectors), 675 676 TP_STRUCT__entry( 677 __field( dev_t, dev ) 678 __field( sector_t, sector ) 679 __field( sector_t, nr_sectors ) 680 __array( char, rwbs, RWBS_LEN) 681 ), 682 683 TP_fast_assign( 684 __entry->dev = bio_dev(bio); 685 __entry->sector = bio->bi_iter.bi_sector; 686 __entry->nr_sectors = bio_sectors(bio); 687 blk_fill_rwbs(__entry->rwbs, bio->bi_opf); 688 ), 689 690 TP_printk("%d,%d %s %llu + %llu", 691 MAJOR(__entry->dev), MINOR(__entry->dev), __entry->rwbs, 692 (unsigned long long)__entry->sector, 693 __entry->nr_sectors) 694 ); 695 696 DECLARE_EVENT_CLASS(block_zwplug, 697 698 TP_PROTO(struct request_queue *q, unsigned int zno, sector_t sector, 699 unsigned int nr_sectors), 700 701 TP_ARGS(q, zno, sector, nr_sectors), 702 703 TP_STRUCT__entry( 704 __field( dev_t, dev ) 705 __field( unsigned int, zno ) 706 __field( sector_t, sector ) 707 __field( unsigned int, nr_sectors ) 708 ), 709 710 TP_fast_assign( 711 __entry->dev = disk_devt(q->disk); 712 __entry->zno = zno; 713 __entry->sector = sector; 714 __entry->nr_sectors = nr_sectors; 715 ), 716 717 TP_printk("%d,%d zone %u, BIO %llu + %u", 718 MAJOR(__entry->dev), MINOR(__entry->dev), __entry->zno, 719 (unsigned long long)__entry->sector, 720 __entry->nr_sectors) 721 ); 722 723 DEFINE_EVENT(block_zwplug, disk_zone_wplug_add_bio, 724 725 TP_PROTO(struct request_queue *q, unsigned int zno, sector_t sector, 726 unsigned int nr_sectors), 727 728 TP_ARGS(q, zno, sector, nr_sectors) 729 ); 730 731 DEFINE_EVENT(block_zwplug, blk_zone_wplug_bio, 732 733 TP_PROTO(struct request_queue *q, unsigned int zno, sector_t sector, 734 unsigned int nr_sectors), 735 736 TP_ARGS(q, zno, sector, nr_sectors) 737 ); 738 739 #endif /* _TRACE_BLOCK_H */ 740 741 /* This part must be outside protection */ 742 #include <trace/define_trace.h> 743 744