xref: /linux/include/trace/events/block.h (revision 913df4453f85f1fe79b35ecf3c9a0c0b707d22a2)
1 #undef TRACE_SYSTEM
2 #define TRACE_SYSTEM block
3 
4 #if !defined(_TRACE_BLOCK_H) || defined(TRACE_HEADER_MULTI_READ)
5 #define _TRACE_BLOCK_H
6 
7 #include <linux/blktrace_api.h>
8 #include <linux/blkdev.h>
9 #include <linux/tracepoint.h>
10 
11 TRACE_EVENT(block_rq_abort,
12 
13 	TP_PROTO(struct request_queue *q, struct request *rq),
14 
15 	TP_ARGS(q, rq),
16 
17 	TP_STRUCT__entry(
18 		__field(  dev_t,	dev			)
19 		__field(  sector_t,	sector			)
20 		__field(  unsigned int,	nr_sector		)
21 		__field(  int,		errors			)
22 		__array(  char,		rwbs,	6		)
23 		__dynamic_array( char,	cmd,	blk_cmd_buf_len(rq)	)
24 	),
25 
26 	TP_fast_assign(
27 		__entry->dev	   = rq->rq_disk ? disk_devt(rq->rq_disk) : 0;
28 		__entry->sector    = blk_pc_request(rq) ? 0 : blk_rq_pos(rq);
29 		__entry->nr_sector = blk_pc_request(rq) ? 0 : blk_rq_sectors(rq);
30 		__entry->errors    = rq->errors;
31 
32 		blk_fill_rwbs_rq(__entry->rwbs, rq);
33 		blk_dump_cmd(__get_str(cmd), rq);
34 	),
35 
36 	TP_printk("%d,%d %s (%s) %llu + %u [%d]",
37 		  MAJOR(__entry->dev), MINOR(__entry->dev),
38 		  __entry->rwbs, __get_str(cmd),
39 		  (unsigned long long)__entry->sector,
40 		  __entry->nr_sector, __entry->errors)
41 );
42 
43 TRACE_EVENT(block_rq_insert,
44 
45 	TP_PROTO(struct request_queue *q, struct request *rq),
46 
47 	TP_ARGS(q, rq),
48 
49 	TP_STRUCT__entry(
50 		__field(  dev_t,	dev			)
51 		__field(  sector_t,	sector			)
52 		__field(  unsigned int,	nr_sector		)
53 		__field(  unsigned int,	bytes			)
54 		__array(  char,		rwbs,	6		)
55 		__array(  char,         comm,   TASK_COMM_LEN   )
56 		__dynamic_array( char,	cmd,	blk_cmd_buf_len(rq)	)
57 	),
58 
59 	TP_fast_assign(
60 		__entry->dev	   = rq->rq_disk ? disk_devt(rq->rq_disk) : 0;
61 		__entry->sector    = blk_pc_request(rq) ? 0 : blk_rq_pos(rq);
62 		__entry->nr_sector = blk_pc_request(rq) ? 0 : blk_rq_sectors(rq);
63 		__entry->bytes     = blk_pc_request(rq) ? blk_rq_bytes(rq) : 0;
64 
65 		blk_fill_rwbs_rq(__entry->rwbs, rq);
66 		blk_dump_cmd(__get_str(cmd), rq);
67 		memcpy(__entry->comm, current->comm, TASK_COMM_LEN);
68 	),
69 
70 	TP_printk("%d,%d %s %u (%s) %llu + %u [%s]",
71 		  MAJOR(__entry->dev), MINOR(__entry->dev),
72 		  __entry->rwbs, __entry->bytes, __get_str(cmd),
73 		  (unsigned long long)__entry->sector,
74 		  __entry->nr_sector, __entry->comm)
75 );
76 
77 TRACE_EVENT(block_rq_issue,
78 
79 	TP_PROTO(struct request_queue *q, struct request *rq),
80 
81 	TP_ARGS(q, rq),
82 
83 	TP_STRUCT__entry(
84 		__field(  dev_t,	dev			)
85 		__field(  sector_t,	sector			)
86 		__field(  unsigned int,	nr_sector		)
87 		__field(  unsigned int,	bytes			)
88 		__array(  char,		rwbs,	6		)
89 		__array(  char,		comm,   TASK_COMM_LEN   )
90 		__dynamic_array( char,	cmd,	blk_cmd_buf_len(rq)	)
91 	),
92 
93 	TP_fast_assign(
94 		__entry->dev	   = rq->rq_disk ? disk_devt(rq->rq_disk) : 0;
95 		__entry->sector    = blk_pc_request(rq) ? 0 : blk_rq_pos(rq);
96 		__entry->nr_sector = blk_pc_request(rq) ? 0 : blk_rq_sectors(rq);
97 		__entry->bytes     = blk_pc_request(rq) ? blk_rq_bytes(rq) : 0;
98 
99 		blk_fill_rwbs_rq(__entry->rwbs, rq);
100 		blk_dump_cmd(__get_str(cmd), rq);
101 		memcpy(__entry->comm, current->comm, TASK_COMM_LEN);
102 	),
103 
104 	TP_printk("%d,%d %s %u (%s) %llu + %u [%s]",
105 		  MAJOR(__entry->dev), MINOR(__entry->dev),
106 		  __entry->rwbs, __entry->bytes, __get_str(cmd),
107 		  (unsigned long long)__entry->sector,
108 		  __entry->nr_sector, __entry->comm)
109 );
110 
111 TRACE_EVENT(block_rq_requeue,
112 
113 	TP_PROTO(struct request_queue *q, struct request *rq),
114 
115 	TP_ARGS(q, rq),
116 
117 	TP_STRUCT__entry(
118 		__field(  dev_t,	dev			)
119 		__field(  sector_t,	sector			)
120 		__field(  unsigned int,	nr_sector		)
121 		__field(  int,		errors			)
122 		__array(  char,		rwbs,	6		)
123 		__dynamic_array( char,	cmd,	blk_cmd_buf_len(rq)	)
124 	),
125 
126 	TP_fast_assign(
127 		__entry->dev	   = rq->rq_disk ? disk_devt(rq->rq_disk) : 0;
128 		__entry->sector    = blk_pc_request(rq) ? 0 : blk_rq_pos(rq);
129 		__entry->nr_sector = blk_pc_request(rq) ? 0 : blk_rq_sectors(rq);
130 		__entry->errors	   = rq->errors;
131 
132 		blk_fill_rwbs_rq(__entry->rwbs, rq);
133 		blk_dump_cmd(__get_str(cmd), rq);
134 	),
135 
136 	TP_printk("%d,%d %s (%s) %llu + %u [%d]",
137 		  MAJOR(__entry->dev), MINOR(__entry->dev),
138 		  __entry->rwbs, __get_str(cmd),
139 		  (unsigned long long)__entry->sector,
140 		  __entry->nr_sector, __entry->errors)
141 );
142 
143 TRACE_EVENT(block_rq_complete,
144 
145 	TP_PROTO(struct request_queue *q, struct request *rq),
146 
147 	TP_ARGS(q, rq),
148 
149 	TP_STRUCT__entry(
150 		__field(  dev_t,	dev			)
151 		__field(  sector_t,	sector			)
152 		__field(  unsigned int,	nr_sector		)
153 		__field(  int,		errors			)
154 		__array(  char,		rwbs,	6		)
155 		__dynamic_array( char,	cmd,	blk_cmd_buf_len(rq)	)
156 	),
157 
158 	TP_fast_assign(
159 		__entry->dev	   = rq->rq_disk ? disk_devt(rq->rq_disk) : 0;
160 		__entry->sector    = blk_pc_request(rq) ? 0 : blk_rq_pos(rq);
161 		__entry->nr_sector = blk_pc_request(rq) ? 0 : blk_rq_sectors(rq);
162 		__entry->errors    = rq->errors;
163 
164 		blk_fill_rwbs_rq(__entry->rwbs, rq);
165 		blk_dump_cmd(__get_str(cmd), rq);
166 	),
167 
168 	TP_printk("%d,%d %s (%s) %llu + %u [%d]",
169 		  MAJOR(__entry->dev), MINOR(__entry->dev),
170 		  __entry->rwbs, __get_str(cmd),
171 		  (unsigned long long)__entry->sector,
172 		  __entry->nr_sector, __entry->errors)
173 );
174 
175 TRACE_EVENT(block_bio_bounce,
176 
177 	TP_PROTO(struct request_queue *q, struct bio *bio),
178 
179 	TP_ARGS(q, bio),
180 
181 	TP_STRUCT__entry(
182 		__field( dev_t,		dev			)
183 		__field( sector_t,	sector			)
184 		__field( unsigned int,	nr_sector		)
185 		__array( char,		rwbs,	6		)
186 		__array( char,		comm,	TASK_COMM_LEN	)
187 	),
188 
189 	TP_fast_assign(
190 		__entry->dev		= bio->bi_bdev ?
191 					  bio->bi_bdev->bd_dev : 0;
192 		__entry->sector		= bio->bi_sector;
193 		__entry->nr_sector	= bio->bi_size >> 9;
194 		blk_fill_rwbs(__entry->rwbs, bio->bi_rw, bio->bi_size);
195 		memcpy(__entry->comm, current->comm, TASK_COMM_LEN);
196 	),
197 
198 	TP_printk("%d,%d %s %llu + %u [%s]",
199 		  MAJOR(__entry->dev), MINOR(__entry->dev), __entry->rwbs,
200 		  (unsigned long long)__entry->sector,
201 		  __entry->nr_sector, __entry->comm)
202 );
203 
204 TRACE_EVENT(block_bio_complete,
205 
206 	TP_PROTO(struct request_queue *q, struct bio *bio),
207 
208 	TP_ARGS(q, bio),
209 
210 	TP_STRUCT__entry(
211 		__field( dev_t,		dev		)
212 		__field( sector_t,	sector		)
213 		__field( unsigned,	nr_sector	)
214 		__field( int,		error		)
215 		__array( char,		rwbs,	6	)
216 	),
217 
218 	TP_fast_assign(
219 		__entry->dev		= bio->bi_bdev->bd_dev;
220 		__entry->sector		= bio->bi_sector;
221 		__entry->nr_sector	= bio->bi_size >> 9;
222 		blk_fill_rwbs(__entry->rwbs, bio->bi_rw, bio->bi_size);
223 	),
224 
225 	TP_printk("%d,%d %s %llu + %u [%d]",
226 		  MAJOR(__entry->dev), MINOR(__entry->dev), __entry->rwbs,
227 		  (unsigned long long)__entry->sector,
228 		  __entry->nr_sector, __entry->error)
229 );
230 
231 TRACE_EVENT(block_bio_backmerge,
232 
233 	TP_PROTO(struct request_queue *q, struct bio *bio),
234 
235 	TP_ARGS(q, bio),
236 
237 	TP_STRUCT__entry(
238 		__field( dev_t,		dev			)
239 		__field( sector_t,	sector			)
240 		__field( unsigned int,	nr_sector		)
241 		__array( char,		rwbs,	6		)
242 		__array( char,		comm,	TASK_COMM_LEN	)
243 	),
244 
245 	TP_fast_assign(
246 		__entry->dev		= bio->bi_bdev->bd_dev;
247 		__entry->sector		= bio->bi_sector;
248 		__entry->nr_sector	= bio->bi_size >> 9;
249 		blk_fill_rwbs(__entry->rwbs, bio->bi_rw, bio->bi_size);
250 		memcpy(__entry->comm, current->comm, TASK_COMM_LEN);
251 	),
252 
253 	TP_printk("%d,%d %s %llu + %u [%s]",
254 		  MAJOR(__entry->dev), MINOR(__entry->dev), __entry->rwbs,
255 		  (unsigned long long)__entry->sector,
256 		  __entry->nr_sector, __entry->comm)
257 );
258 
259 TRACE_EVENT(block_bio_frontmerge,
260 
261 	TP_PROTO(struct request_queue *q, struct bio *bio),
262 
263 	TP_ARGS(q, bio),
264 
265 	TP_STRUCT__entry(
266 		__field( dev_t,		dev			)
267 		__field( sector_t,	sector			)
268 		__field( unsigned,	nr_sector		)
269 		__array( char,		rwbs,	6		)
270 		__array( char,		comm,	TASK_COMM_LEN	)
271 	),
272 
273 	TP_fast_assign(
274 		__entry->dev		= bio->bi_bdev->bd_dev;
275 		__entry->sector		= bio->bi_sector;
276 		__entry->nr_sector	= bio->bi_size >> 9;
277 		blk_fill_rwbs(__entry->rwbs, bio->bi_rw, bio->bi_size);
278 		memcpy(__entry->comm, current->comm, TASK_COMM_LEN);
279 	),
280 
281 	TP_printk("%d,%d %s %llu + %u [%s]",
282 		  MAJOR(__entry->dev), MINOR(__entry->dev), __entry->rwbs,
283 		  (unsigned long long)__entry->sector,
284 		  __entry->nr_sector, __entry->comm)
285 );
286 
287 TRACE_EVENT(block_bio_queue,
288 
289 	TP_PROTO(struct request_queue *q, struct bio *bio),
290 
291 	TP_ARGS(q, bio),
292 
293 	TP_STRUCT__entry(
294 		__field( dev_t,		dev			)
295 		__field( sector_t,	sector			)
296 		__field( unsigned int,	nr_sector		)
297 		__array( char,		rwbs,	6		)
298 		__array( char,		comm,	TASK_COMM_LEN	)
299 	),
300 
301 	TP_fast_assign(
302 		__entry->dev		= bio->bi_bdev->bd_dev;
303 		__entry->sector		= bio->bi_sector;
304 		__entry->nr_sector	= bio->bi_size >> 9;
305 		blk_fill_rwbs(__entry->rwbs, bio->bi_rw, bio->bi_size);
306 		memcpy(__entry->comm, current->comm, TASK_COMM_LEN);
307 	),
308 
309 	TP_printk("%d,%d %s %llu + %u [%s]",
310 		  MAJOR(__entry->dev), MINOR(__entry->dev), __entry->rwbs,
311 		  (unsigned long long)__entry->sector,
312 		  __entry->nr_sector, __entry->comm)
313 );
314 
315 TRACE_EVENT(block_getrq,
316 
317 	TP_PROTO(struct request_queue *q, struct bio *bio, int rw),
318 
319 	TP_ARGS(q, bio, rw),
320 
321 	TP_STRUCT__entry(
322 		__field( dev_t,		dev			)
323 		__field( sector_t,	sector			)
324 		__field( unsigned int,	nr_sector		)
325 		__array( char,		rwbs,	6		)
326 		__array( char,		comm,	TASK_COMM_LEN	)
327         ),
328 
329 	TP_fast_assign(
330 		__entry->dev		= bio ? bio->bi_bdev->bd_dev : 0;
331 		__entry->sector		= bio ? bio->bi_sector : 0;
332 		__entry->nr_sector	= bio ? bio->bi_size >> 9 : 0;
333 		blk_fill_rwbs(__entry->rwbs,
334 			      bio ? bio->bi_rw : 0, __entry->nr_sector);
335 		memcpy(__entry->comm, current->comm, TASK_COMM_LEN);
336         ),
337 
338 	TP_printk("%d,%d %s %llu + %u [%s]",
339 		  MAJOR(__entry->dev), MINOR(__entry->dev), __entry->rwbs,
340 		  (unsigned long long)__entry->sector,
341 		  __entry->nr_sector, __entry->comm)
342 );
343 
344 TRACE_EVENT(block_sleeprq,
345 
346 	TP_PROTO(struct request_queue *q, struct bio *bio, int rw),
347 
348 	TP_ARGS(q, bio, rw),
349 
350 	TP_STRUCT__entry(
351 		__field( dev_t,		dev			)
352 		__field( sector_t,	sector			)
353 		__field( unsigned int,	nr_sector		)
354 		__array( char,		rwbs,	6		)
355 		__array( char,		comm,	TASK_COMM_LEN	)
356 	),
357 
358 	TP_fast_assign(
359 		__entry->dev		= bio ? bio->bi_bdev->bd_dev : 0;
360 		__entry->sector		= bio ? bio->bi_sector : 0;
361 		__entry->nr_sector	= bio ? bio->bi_size >> 9 : 0;
362 		blk_fill_rwbs(__entry->rwbs,
363 			    bio ? bio->bi_rw : 0, __entry->nr_sector);
364 		memcpy(__entry->comm, current->comm, TASK_COMM_LEN);
365 	),
366 
367 	TP_printk("%d,%d %s %llu + %u [%s]",
368 		  MAJOR(__entry->dev), MINOR(__entry->dev), __entry->rwbs,
369 		  (unsigned long long)__entry->sector,
370 		  __entry->nr_sector, __entry->comm)
371 );
372 
373 TRACE_EVENT(block_plug,
374 
375 	TP_PROTO(struct request_queue *q),
376 
377 	TP_ARGS(q),
378 
379 	TP_STRUCT__entry(
380 		__array( char,		comm,	TASK_COMM_LEN	)
381 	),
382 
383 	TP_fast_assign(
384 		memcpy(__entry->comm, current->comm, TASK_COMM_LEN);
385 	),
386 
387 	TP_printk("[%s]", __entry->comm)
388 );
389 
390 TRACE_EVENT(block_unplug_timer,
391 
392 	TP_PROTO(struct request_queue *q),
393 
394 	TP_ARGS(q),
395 
396 	TP_STRUCT__entry(
397 		__field( int,		nr_rq			)
398 		__array( char,		comm,	TASK_COMM_LEN	)
399 	),
400 
401 	TP_fast_assign(
402 		__entry->nr_rq	= q->rq.count[READ] + q->rq.count[WRITE];
403 		memcpy(__entry->comm, current->comm, TASK_COMM_LEN);
404 	),
405 
406 	TP_printk("[%s] %d", __entry->comm, __entry->nr_rq)
407 );
408 
409 TRACE_EVENT(block_unplug_io,
410 
411 	TP_PROTO(struct request_queue *q),
412 
413 	TP_ARGS(q),
414 
415 	TP_STRUCT__entry(
416 		__field( int,		nr_rq			)
417 		__array( char,		comm,	TASK_COMM_LEN	)
418 	),
419 
420 	TP_fast_assign(
421 		__entry->nr_rq	= q->rq.count[READ] + q->rq.count[WRITE];
422 		memcpy(__entry->comm, current->comm, TASK_COMM_LEN);
423 	),
424 
425 	TP_printk("[%s] %d", __entry->comm, __entry->nr_rq)
426 );
427 
428 TRACE_EVENT(block_split,
429 
430 	TP_PROTO(struct request_queue *q, struct bio *bio,
431 		 unsigned int new_sector),
432 
433 	TP_ARGS(q, bio, new_sector),
434 
435 	TP_STRUCT__entry(
436 		__field( dev_t,		dev				)
437 		__field( sector_t,	sector				)
438 		__field( sector_t,	new_sector			)
439 		__array( char,		rwbs,		6		)
440 		__array( char,		comm,		TASK_COMM_LEN	)
441 	),
442 
443 	TP_fast_assign(
444 		__entry->dev		= bio->bi_bdev->bd_dev;
445 		__entry->sector		= bio->bi_sector;
446 		__entry->new_sector	= new_sector;
447 		blk_fill_rwbs(__entry->rwbs, bio->bi_rw, bio->bi_size);
448 		memcpy(__entry->comm, current->comm, TASK_COMM_LEN);
449 	),
450 
451 	TP_printk("%d,%d %s %llu / %llu [%s]",
452 		  MAJOR(__entry->dev), MINOR(__entry->dev), __entry->rwbs,
453 		  (unsigned long long)__entry->sector,
454 		  (unsigned long long)__entry->new_sector,
455 		  __entry->comm)
456 );
457 
458 TRACE_EVENT(block_remap,
459 
460 	TP_PROTO(struct request_queue *q, struct bio *bio, dev_t dev,
461 		 sector_t from),
462 
463 	TP_ARGS(q, bio, dev, from),
464 
465 	TP_STRUCT__entry(
466 		__field( dev_t,		dev		)
467 		__field( sector_t,	sector		)
468 		__field( unsigned int,	nr_sector	)
469 		__field( dev_t,		old_dev		)
470 		__field( sector_t,	old_sector	)
471 		__array( char,		rwbs,	6	)
472 	),
473 
474 	TP_fast_assign(
475 		__entry->dev		= bio->bi_bdev->bd_dev;
476 		__entry->sector		= bio->bi_sector;
477 		__entry->nr_sector	= bio->bi_size >> 9;
478 		__entry->old_dev	= dev;
479 		__entry->old_sector	= from;
480 		blk_fill_rwbs(__entry->rwbs, bio->bi_rw, bio->bi_size);
481 	),
482 
483 	TP_printk("%d,%d %s %llu + %u <- (%d,%d) %llu",
484 		  MAJOR(__entry->dev), MINOR(__entry->dev), __entry->rwbs,
485 		  (unsigned long long)__entry->sector,
486 		  __entry->nr_sector,
487 		  MAJOR(__entry->old_dev), MINOR(__entry->old_dev),
488 		  (unsigned long long)__entry->old_sector)
489 );
490 
491 TRACE_EVENT(block_rq_remap,
492 
493 	TP_PROTO(struct request_queue *q, struct request *rq, dev_t dev,
494 		 sector_t from),
495 
496 	TP_ARGS(q, rq, dev, from),
497 
498 	TP_STRUCT__entry(
499 		__field( dev_t,		dev		)
500 		__field( sector_t,	sector		)
501 		__field( unsigned int,	nr_sector	)
502 		__field( dev_t,		old_dev		)
503 		__field( sector_t,	old_sector	)
504 		__array( char,		rwbs,	6	)
505 	),
506 
507 	TP_fast_assign(
508 		__entry->dev		= disk_devt(rq->rq_disk);
509 		__entry->sector		= blk_rq_pos(rq);
510 		__entry->nr_sector	= blk_rq_sectors(rq);
511 		__entry->old_dev	= dev;
512 		__entry->old_sector	= from;
513 		blk_fill_rwbs_rq(__entry->rwbs, rq);
514 	),
515 
516 	TP_printk("%d,%d %s %llu + %u <- (%d,%d) %llu",
517 		  MAJOR(__entry->dev), MINOR(__entry->dev), __entry->rwbs,
518 		  (unsigned long long)__entry->sector,
519 		  __entry->nr_sector,
520 		  MAJOR(__entry->old_dev), MINOR(__entry->old_dev),
521 		  (unsigned long long)__entry->old_sector)
522 );
523 
524 #endif /* _TRACE_BLOCK_H */
525 
526 /* This part must be outside protection */
527 #include <trace/define_trace.h>
528 
529