1 /* SPDX-License-Identifier: GPL-2.0 */
3 #define TRACE_SYSTEM block
5 #if !defined(_TRACE_BLOCK_H) || defined(TRACE_HEADER_MULTI_READ)
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>
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"}
23 #ifdef CONFIG_BUFFER_HEAD
24 DECLARE_EVENT_CLASS(block_buffer
,
26 TP_PROTO(struct buffer_head
*bh
),
32 __field( sector_t
, sector
)
33 __field( size_t, size
)
37 __entry
->dev
= bh
->b_bdev
->bd_dev
;
38 __entry
->sector
= bh
->b_blocknr
;
39 __entry
->size
= bh
->b_size
;
42 TP_printk("%d,%d sector=%llu size=%zu",
43 MAJOR(__entry
->dev
), MINOR(__entry
->dev
),
44 (unsigned long long)__entry
->sector
, __entry
->size
49 * block_touch_buffer - mark a buffer accessed
50 * @bh: buffer_head being touched
52 * Called from touch_buffer().
54 DEFINE_EVENT(block_buffer
, block_touch_buffer
,
56 TP_PROTO(struct buffer_head
*bh
),
62 * block_dirty_buffer - mark a buffer dirty
63 * @bh: buffer_head being dirtied
65 * Called from mark_buffer_dirty().
67 DEFINE_EVENT(block_buffer
, block_dirty_buffer
,
69 TP_PROTO(struct buffer_head
*bh
),
73 #endif /* CONFIG_BUFFER_HEAD */
76 * block_rq_requeue - place block IO request back on a queue
77 * @rq: block IO operation request
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.
83 TRACE_EVENT(block_rq_requeue
,
85 TP_PROTO(struct request
*rq
),
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 )
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
);
104 blk_fill_rwbs(__entry
->rwbs
, rq
->cmd_flags
);
105 __get_str(cmd
)[0] = '\0';
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)
118 DECLARE_EVENT_CLASS(block_rq_completion
,
120 TP_PROTO(struct request
*rq
, blk_status_t error
, unsigned int nr_bytes
),
122 TP_ARGS(rq
, error
, nr_bytes
),
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 )
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
);
141 blk_fill_rwbs(__entry
->rwbs
, rq
->cmd_flags
);
142 __get_str(cmd
)[0] = '\0';
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
)
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
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.
167 DEFINE_EVENT(block_rq_completion
, block_rq_complete
,
169 TP_PROTO(struct request
*rq
, blk_status_t error
, unsigned int nr_bytes
),
171 TP_ARGS(rq
, error
, nr_bytes
)
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
180 * The block_rq_error tracepoint event indicates that some portion
181 * of operation request has failed as reported by the device driver.
183 DEFINE_EVENT(block_rq_completion
, block_rq_error
,
185 TP_PROTO(struct request
*rq
, blk_status_t error
, unsigned int nr_bytes
),
187 TP_ARGS(rq
, error
, nr_bytes
)
190 DECLARE_EVENT_CLASS(block_rq
,
192 TP_PROTO(struct request
*rq
),
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 )
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
);
214 blk_fill_rwbs(__entry
->rwbs
, rq
->cmd_flags
);
215 __get_str(cmd
)[0] = '\0';
216 memcpy(__entry
->comm
, current
->comm
, TASK_COMM_LEN
);
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
)
230 * block_rq_insert - insert block operation request into queue
231 * @rq: block IO operation request
233 * Called immediately before block operation request @rq is inserted
234 * into queue @q. The fields in the operation request @rq struct can
235 * be examined to determine which device and sectors the pending
236 * operation would access.
238 DEFINE_EVENT(block_rq
, block_rq_insert
,
240 TP_PROTO(struct request
*rq
),
246 * block_rq_issue - issue pending block IO request operation to device driver
247 * @rq: block IO operation request
249 * Called when block operation request @rq from queue @q is sent to a
250 * device driver for processing.
252 DEFINE_EVENT(block_rq
, block_rq_issue
,
254 TP_PROTO(struct request
*rq
),
260 * block_rq_merge - merge request with another one in the elevator
261 * @rq: block IO operation request
263 * Called when block operation request @rq from queue @q is merged to another
264 * request queued in the elevator.
266 DEFINE_EVENT(block_rq
, block_rq_merge
,
268 TP_PROTO(struct request
*rq
),
274 * block_io_start - insert a request for execution
275 * @rq: block IO operation request
277 * Called when block operation request @rq is queued for execution
279 DEFINE_EVENT(block_rq
, block_io_start
,
281 TP_PROTO(struct request
*rq
),
287 * block_io_done - block IO operation request completed
288 * @rq: block IO operation request
290 * Called when block operation request @rq is completed
292 DEFINE_EVENT(block_rq
, block_io_done
,
294 TP_PROTO(struct request
*rq
),
300 * block_bio_complete - completed all work on the block operation
301 * @q: queue holding the block operation
302 * @bio: block operation completed
304 * This tracepoint indicates there is no further work to do on this
305 * block IO operation @bio.
307 TRACE_EVENT(block_bio_complete
,
309 TP_PROTO(struct request_queue
*q
, struct bio
*bio
),
314 __field( dev_t
, dev
)
315 __field( sector_t
, sector
)
316 __field( unsigned, nr_sector
)
317 __field( int, error
)
318 __array( char, rwbs
, RWBS_LEN
)
322 __entry
->dev
= bio_dev(bio
);
323 __entry
->sector
= bio
->bi_iter
.bi_sector
;
324 __entry
->nr_sector
= bio_sectors(bio
);
325 __entry
->error
= blk_status_to_errno(bio
->bi_status
);
326 blk_fill_rwbs(__entry
->rwbs
, bio
->bi_opf
);
329 TP_printk("%d,%d %s %llu + %u [%d]",
330 MAJOR(__entry
->dev
), MINOR(__entry
->dev
), __entry
->rwbs
,
331 (unsigned long long)__entry
->sector
,
332 __entry
->nr_sector
, __entry
->error
)
335 DECLARE_EVENT_CLASS(block_bio
,
337 TP_PROTO(struct bio
*bio
),
342 __field( dev_t
, dev
)
343 __field( sector_t
, sector
)
344 __field( unsigned int, nr_sector
)
345 __array( char, rwbs
, RWBS_LEN
)
346 __array( char, comm
, TASK_COMM_LEN
)
350 __entry
->dev
= bio_dev(bio
);
351 __entry
->sector
= bio
->bi_iter
.bi_sector
;
352 __entry
->nr_sector
= bio_sectors(bio
);
353 blk_fill_rwbs(__entry
->rwbs
, bio
->bi_opf
);
354 memcpy(__entry
->comm
, current
->comm
, TASK_COMM_LEN
);
357 TP_printk("%d,%d %s %llu + %u [%s]",
358 MAJOR(__entry
->dev
), MINOR(__entry
->dev
), __entry
->rwbs
,
359 (unsigned long long)__entry
->sector
,
360 __entry
->nr_sector
, __entry
->comm
)
364 * block_bio_bounce - used bounce buffer when processing block operation
365 * @bio: block operation
367 * A bounce buffer was used to handle the block operation @bio in @q.
368 * This occurs when hardware limitations prevent a direct transfer of
369 * data between the @bio data memory area and the IO device. Use of a
370 * bounce buffer requires extra copying of data and decreases
373 DEFINE_EVENT(block_bio
, block_bio_bounce
,
374 TP_PROTO(struct bio
*bio
),
379 * block_bio_backmerge - merging block operation to the end of an existing operation
380 * @bio: new block operation to merge
382 * Merging block request @bio to the end of an existing block request.
384 DEFINE_EVENT(block_bio
, block_bio_backmerge
,
385 TP_PROTO(struct bio
*bio
),
390 * block_bio_frontmerge - merging block operation to the beginning of an existing operation
391 * @bio: new block operation to merge
393 * Merging block IO operation @bio to the beginning of an existing block request.
395 DEFINE_EVENT(block_bio
, block_bio_frontmerge
,
396 TP_PROTO(struct bio
*bio
),
401 * block_bio_queue - putting new block IO operation in queue
402 * @bio: new block operation
404 * About to place the block IO operation @bio into queue @q.
406 DEFINE_EVENT(block_bio
, block_bio_queue
,
407 TP_PROTO(struct bio
*bio
),
412 * block_getrq - get a free request entry in queue for block IO operations
413 * @bio: pending block IO operation (can be %NULL)
415 * A request struct has been allocated to handle the block IO operation @bio.
417 DEFINE_EVENT(block_bio
, block_getrq
,
418 TP_PROTO(struct bio
*bio
),
423 * block_plug - keep operations requests in request queue
424 * @q: request queue to plug
426 * Plug the request queue @q. Do not allow block operation requests
427 * to be sent to the device driver. Instead, accumulate requests in
428 * the queue to improve throughput performance of the block device.
430 TRACE_EVENT(block_plug
,
432 TP_PROTO(struct request_queue
*q
),
437 __array( char, comm
, TASK_COMM_LEN
)
441 memcpy(__entry
->comm
, current
->comm
, TASK_COMM_LEN
);
444 TP_printk("[%s]", __entry
->comm
)
447 DECLARE_EVENT_CLASS(block_unplug
,
449 TP_PROTO(struct request_queue
*q
, unsigned int depth
, bool explicit),
451 TP_ARGS(q
, depth
, explicit),
454 __field( int, nr_rq
)
455 __array( char, comm
, TASK_COMM_LEN
)
459 __entry
->nr_rq
= depth
;
460 memcpy(__entry
->comm
, current
->comm
, TASK_COMM_LEN
);
463 TP_printk("[%s] %d", __entry
->comm
, __entry
->nr_rq
)
467 * block_unplug - release of operations requests in request queue
468 * @q: request queue to unplug
469 * @depth: number of requests just added to the queue
470 * @explicit: whether this was an explicit unplug, or one from schedule()
472 * Unplug request queue @q because device driver is scheduled to work
473 * on elements in the request queue.
475 DEFINE_EVENT(block_unplug
, block_unplug
,
477 TP_PROTO(struct request_queue
*q
, unsigned int depth
, bool explicit),
479 TP_ARGS(q
, depth
, explicit)
483 * block_split - split a single bio struct into two bio structs
484 * @bio: block operation being split
485 * @new_sector: The starting sector for the new bio
487 * The bio request @bio needs to be split into two bio requests. The newly
488 * created @bio request starts at @new_sector. This split may be required due to
489 * hardware limitations such as operation crossing device boundaries in a RAID
492 TRACE_EVENT(block_split
,
494 TP_PROTO(struct bio
*bio
, unsigned int new_sector
),
496 TP_ARGS(bio
, new_sector
),
499 __field( dev_t
, dev
)
500 __field( sector_t
, sector
)
501 __field( sector_t
, new_sector
)
502 __array( char, rwbs
, RWBS_LEN
)
503 __array( char, comm
, TASK_COMM_LEN
)
507 __entry
->dev
= bio_dev(bio
);
508 __entry
->sector
= bio
->bi_iter
.bi_sector
;
509 __entry
->new_sector
= new_sector
;
510 blk_fill_rwbs(__entry
->rwbs
, bio
->bi_opf
);
511 memcpy(__entry
->comm
, current
->comm
, TASK_COMM_LEN
);
514 TP_printk("%d,%d %s %llu / %llu [%s]",
515 MAJOR(__entry
->dev
), MINOR(__entry
->dev
), __entry
->rwbs
,
516 (unsigned long long)__entry
->sector
,
517 (unsigned long long)__entry
->new_sector
,
522 * block_bio_remap - map request for a logical device to the raw device
523 * @bio: revised operation
524 * @dev: original device for the operation
525 * @from: original sector for the operation
527 * An operation for a logical device has been mapped to the
530 TRACE_EVENT(block_bio_remap
,
532 TP_PROTO(struct bio
*bio
, dev_t dev
, sector_t from
),
534 TP_ARGS(bio
, dev
, from
),
537 __field( dev_t
, dev
)
538 __field( sector_t
, sector
)
539 __field( unsigned int, nr_sector
)
540 __field( dev_t
, old_dev
)
541 __field( sector_t
, old_sector
)
542 __array( char, rwbs
, RWBS_LEN
)
546 __entry
->dev
= bio_dev(bio
);
547 __entry
->sector
= bio
->bi_iter
.bi_sector
;
548 __entry
->nr_sector
= bio_sectors(bio
);
549 __entry
->old_dev
= dev
;
550 __entry
->old_sector
= from
;
551 blk_fill_rwbs(__entry
->rwbs
, bio
->bi_opf
);
554 TP_printk("%d,%d %s %llu + %u <- (%d,%d) %llu",
555 MAJOR(__entry
->dev
), MINOR(__entry
->dev
), __entry
->rwbs
,
556 (unsigned long long)__entry
->sector
,
558 MAJOR(__entry
->old_dev
), MINOR(__entry
->old_dev
),
559 (unsigned long long)__entry
->old_sector
)
563 * block_rq_remap - map request for a block operation request
564 * @rq: block IO operation request
565 * @dev: device for the operation
566 * @from: original sector for the operation
568 * The block operation request @rq in @q has been remapped. The block
569 * operation request @rq holds the current information and @from hold
570 * the original sector.
572 TRACE_EVENT(block_rq_remap
,
574 TP_PROTO(struct request
*rq
, dev_t dev
, sector_t from
),
576 TP_ARGS(rq
, dev
, from
),
579 __field( dev_t
, dev
)
580 __field( sector_t
, sector
)
581 __field( unsigned int, nr_sector
)
582 __field( dev_t
, old_dev
)
583 __field( sector_t
, old_sector
)
584 __field( unsigned int, nr_bios
)
585 __array( char, rwbs
, RWBS_LEN
)
589 __entry
->dev
= disk_devt(rq
->q
->disk
);
590 __entry
->sector
= blk_rq_pos(rq
);
591 __entry
->nr_sector
= blk_rq_sectors(rq
);
592 __entry
->old_dev
= dev
;
593 __entry
->old_sector
= from
;
594 __entry
->nr_bios
= blk_rq_count_bios(rq
);
595 blk_fill_rwbs(__entry
->rwbs
, rq
->cmd_flags
);
598 TP_printk("%d,%d %s %llu + %u <- (%d,%d) %llu %u",
599 MAJOR(__entry
->dev
), MINOR(__entry
->dev
), __entry
->rwbs
,
600 (unsigned long long)__entry
->sector
,
602 MAJOR(__entry
->old_dev
), MINOR(__entry
->old_dev
),
603 (unsigned long long)__entry
->old_sector
, __entry
->nr_bios
)
606 #endif /* _TRACE_BLOCK_H */
608 /* This part must be outside protection */
609 #include <trace/define_trace.h>