xref: /openbmc/linux/include/trace/events/block.h (revision 78c99ba1)
1 #if !defined(_TRACE_BLOCK_H) || defined(TRACE_HEADER_MULTI_READ)
2 #define _TRACE_BLOCK_H
3 
4 #include <linux/blktrace_api.h>
5 #include <linux/blkdev.h>
6 #include <linux/tracepoint.h>
7 
8 #undef TRACE_SYSTEM
9 #define TRACE_SYSTEM block
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 TRACE_EVENT(block_bio_bounce,
175 
176 	TP_PROTO(struct request_queue *q, struct bio *bio),
177 
178 	TP_ARGS(q, bio),
179 
180 	TP_STRUCT__entry(
181 		__field( dev_t,		dev			)
182 		__field( sector_t,	sector			)
183 		__field( unsigned int,	nr_sector		)
184 		__array( char,		rwbs,	6		)
185 		__array( char,		comm,	TASK_COMM_LEN	)
186 	),
187 
188 	TP_fast_assign(
189 		__entry->dev		= bio->bi_bdev->bd_dev;
190 		__entry->sector		= bio->bi_sector;
191 		__entry->nr_sector	= bio->bi_size >> 9;
192 		blk_fill_rwbs(__entry->rwbs, bio->bi_rw, bio->bi_size);
193 		memcpy(__entry->comm, current->comm, TASK_COMM_LEN);
194 	),
195 
196 	TP_printk("%d,%d %s %llu + %u [%s]",
197 		  MAJOR(__entry->dev), MINOR(__entry->dev), __entry->rwbs,
198 		  (unsigned long long)__entry->sector,
199 		  __entry->nr_sector, __entry->comm)
200 );
201 
202 TRACE_EVENT(block_bio_complete,
203 
204 	TP_PROTO(struct request_queue *q, struct bio *bio),
205 
206 	TP_ARGS(q, bio),
207 
208 	TP_STRUCT__entry(
209 		__field( dev_t,		dev		)
210 		__field( sector_t,	sector		)
211 		__field( unsigned,	nr_sector	)
212 		__field( int,		error		)
213 		__array( char,		rwbs,	6	)
214 	),
215 
216 	TP_fast_assign(
217 		__entry->dev		= bio->bi_bdev->bd_dev;
218 		__entry->sector		= bio->bi_sector;
219 		__entry->nr_sector	= bio->bi_size >> 9;
220 		blk_fill_rwbs(__entry->rwbs, bio->bi_rw, bio->bi_size);
221 	),
222 
223 	TP_printk("%d,%d %s %llu + %u [%d]",
224 		  MAJOR(__entry->dev), MINOR(__entry->dev), __entry->rwbs,
225 		  (unsigned long long)__entry->sector,
226 		  __entry->nr_sector, __entry->error)
227 );
228 
229 TRACE_EVENT(block_bio_backmerge,
230 
231 	TP_PROTO(struct request_queue *q, struct bio *bio),
232 
233 	TP_ARGS(q, bio),
234 
235 	TP_STRUCT__entry(
236 		__field( dev_t,		dev			)
237 		__field( sector_t,	sector			)
238 		__field( unsigned int,	nr_sector		)
239 		__array( char,		rwbs,	6		)
240 		__array( char,		comm,	TASK_COMM_LEN	)
241 	),
242 
243 	TP_fast_assign(
244 		__entry->dev		= bio->bi_bdev->bd_dev;
245 		__entry->sector		= bio->bi_sector;
246 		__entry->nr_sector	= bio->bi_size >> 9;
247 		blk_fill_rwbs(__entry->rwbs, bio->bi_rw, bio->bi_size);
248 		memcpy(__entry->comm, current->comm, TASK_COMM_LEN);
249 	),
250 
251 	TP_printk("%d,%d %s %llu + %u [%s]",
252 		  MAJOR(__entry->dev), MINOR(__entry->dev), __entry->rwbs,
253 		  (unsigned long long)__entry->sector,
254 		  __entry->nr_sector, __entry->comm)
255 );
256 
257 TRACE_EVENT(block_bio_frontmerge,
258 
259 	TP_PROTO(struct request_queue *q, struct bio *bio),
260 
261 	TP_ARGS(q, bio),
262 
263 	TP_STRUCT__entry(
264 		__field( dev_t,		dev			)
265 		__field( sector_t,	sector			)
266 		__field( unsigned,	nr_sector		)
267 		__array( char,		rwbs,	6		)
268 		__array( char,		comm,	TASK_COMM_LEN	)
269 	),
270 
271 	TP_fast_assign(
272 		__entry->dev		= bio->bi_bdev->bd_dev;
273 		__entry->sector		= bio->bi_sector;
274 		__entry->nr_sector	= bio->bi_size >> 9;
275 		blk_fill_rwbs(__entry->rwbs, bio->bi_rw, bio->bi_size);
276 		memcpy(__entry->comm, current->comm, TASK_COMM_LEN);
277 	),
278 
279 	TP_printk("%d,%d %s %llu + %u [%s]",
280 		  MAJOR(__entry->dev), MINOR(__entry->dev), __entry->rwbs,
281 		  (unsigned long long)__entry->sector,
282 		  __entry->nr_sector, __entry->comm)
283 );
284 
285 TRACE_EVENT(block_bio_queue,
286 
287 	TP_PROTO(struct request_queue *q, struct bio *bio),
288 
289 	TP_ARGS(q, bio),
290 
291 	TP_STRUCT__entry(
292 		__field( dev_t,		dev			)
293 		__field( sector_t,	sector			)
294 		__field( unsigned int,	nr_sector		)
295 		__array( char,		rwbs,	6		)
296 		__array( char,		comm,	TASK_COMM_LEN	)
297 	),
298 
299 	TP_fast_assign(
300 		__entry->dev		= bio->bi_bdev->bd_dev;
301 		__entry->sector		= bio->bi_sector;
302 		__entry->nr_sector	= bio->bi_size >> 9;
303 		blk_fill_rwbs(__entry->rwbs, bio->bi_rw, bio->bi_size);
304 		memcpy(__entry->comm, current->comm, TASK_COMM_LEN);
305 	),
306 
307 	TP_printk("%d,%d %s %llu + %u [%s]",
308 		  MAJOR(__entry->dev), MINOR(__entry->dev), __entry->rwbs,
309 		  (unsigned long long)__entry->sector,
310 		  __entry->nr_sector, __entry->comm)
311 );
312 
313 TRACE_EVENT(block_getrq,
314 
315 	TP_PROTO(struct request_queue *q, struct bio *bio, int rw),
316 
317 	TP_ARGS(q, bio, rw),
318 
319 	TP_STRUCT__entry(
320 		__field( dev_t,		dev			)
321 		__field( sector_t,	sector			)
322 		__field( unsigned int,	nr_sector		)
323 		__array( char,		rwbs,	6		)
324 		__array( char,		comm,	TASK_COMM_LEN	)
325         ),
326 
327 	TP_fast_assign(
328 		__entry->dev		= bio ? bio->bi_bdev->bd_dev : 0;
329 		__entry->sector		= bio ? bio->bi_sector : 0;
330 		__entry->nr_sector	= bio ? bio->bi_size >> 9 : 0;
331 		blk_fill_rwbs(__entry->rwbs,
332 			      bio ? bio->bi_rw : 0, __entry->nr_sector);
333 		memcpy(__entry->comm, current->comm, TASK_COMM_LEN);
334         ),
335 
336 	TP_printk("%d,%d %s %llu + %u [%s]",
337 		  MAJOR(__entry->dev), MINOR(__entry->dev), __entry->rwbs,
338 		  (unsigned long long)__entry->sector,
339 		  __entry->nr_sector, __entry->comm)
340 );
341 
342 TRACE_EVENT(block_sleeprq,
343 
344 	TP_PROTO(struct request_queue *q, struct bio *bio, int rw),
345 
346 	TP_ARGS(q, bio, rw),
347 
348 	TP_STRUCT__entry(
349 		__field( dev_t,		dev			)
350 		__field( sector_t,	sector			)
351 		__field( unsigned int,	nr_sector		)
352 		__array( char,		rwbs,	6		)
353 		__array( char,		comm,	TASK_COMM_LEN	)
354 	),
355 
356 	TP_fast_assign(
357 		__entry->dev		= bio ? bio->bi_bdev->bd_dev : 0;
358 		__entry->sector		= bio ? bio->bi_sector : 0;
359 		__entry->nr_sector	= bio ? bio->bi_size >> 9 : 0;
360 		blk_fill_rwbs(__entry->rwbs,
361 			    bio ? bio->bi_rw : 0, __entry->nr_sector);
362 		memcpy(__entry->comm, current->comm, TASK_COMM_LEN);
363 	),
364 
365 	TP_printk("%d,%d %s %llu + %u [%s]",
366 		  MAJOR(__entry->dev), MINOR(__entry->dev), __entry->rwbs,
367 		  (unsigned long long)__entry->sector,
368 		  __entry->nr_sector, __entry->comm)
369 );
370 
371 TRACE_EVENT(block_plug,
372 
373 	TP_PROTO(struct request_queue *q),
374 
375 	TP_ARGS(q),
376 
377 	TP_STRUCT__entry(
378 		__array( char,		comm,	TASK_COMM_LEN	)
379 	),
380 
381 	TP_fast_assign(
382 		memcpy(__entry->comm, current->comm, TASK_COMM_LEN);
383 	),
384 
385 	TP_printk("[%s]", __entry->comm)
386 );
387 
388 TRACE_EVENT(block_unplug_timer,
389 
390 	TP_PROTO(struct request_queue *q),
391 
392 	TP_ARGS(q),
393 
394 	TP_STRUCT__entry(
395 		__field( int,		nr_rq			)
396 		__array( char,		comm,	TASK_COMM_LEN	)
397 	),
398 
399 	TP_fast_assign(
400 		__entry->nr_rq	= q->rq.count[READ] + q->rq.count[WRITE];
401 		memcpy(__entry->comm, current->comm, TASK_COMM_LEN);
402 	),
403 
404 	TP_printk("[%s] %d", __entry->comm, __entry->nr_rq)
405 );
406 
407 TRACE_EVENT(block_unplug_io,
408 
409 	TP_PROTO(struct request_queue *q),
410 
411 	TP_ARGS(q),
412 
413 	TP_STRUCT__entry(
414 		__field( int,		nr_rq			)
415 		__array( char,		comm,	TASK_COMM_LEN	)
416 	),
417 
418 	TP_fast_assign(
419 		__entry->nr_rq	= q->rq.count[READ] + q->rq.count[WRITE];
420 		memcpy(__entry->comm, current->comm, TASK_COMM_LEN);
421 	),
422 
423 	TP_printk("[%s] %d", __entry->comm, __entry->nr_rq)
424 );
425 
426 TRACE_EVENT(block_split,
427 
428 	TP_PROTO(struct request_queue *q, struct bio *bio,
429 		 unsigned int new_sector),
430 
431 	TP_ARGS(q, bio, new_sector),
432 
433 	TP_STRUCT__entry(
434 		__field( dev_t,		dev				)
435 		__field( sector_t,	sector				)
436 		__field( sector_t,	new_sector			)
437 		__array( char,		rwbs,		6		)
438 		__array( char,		comm,		TASK_COMM_LEN	)
439 	),
440 
441 	TP_fast_assign(
442 		__entry->dev		= bio->bi_bdev->bd_dev;
443 		__entry->sector		= bio->bi_sector;
444 		__entry->new_sector	= new_sector;
445 		blk_fill_rwbs(__entry->rwbs, bio->bi_rw, bio->bi_size);
446 		memcpy(__entry->comm, current->comm, TASK_COMM_LEN);
447 	),
448 
449 	TP_printk("%d,%d %s %llu / %llu [%s]",
450 		  MAJOR(__entry->dev), MINOR(__entry->dev), __entry->rwbs,
451 		  (unsigned long long)__entry->sector,
452 		  (unsigned long long)__entry->new_sector,
453 		  __entry->comm)
454 );
455 
456 TRACE_EVENT(block_remap,
457 
458 	TP_PROTO(struct request_queue *q, struct bio *bio, dev_t dev,
459 		 sector_t from),
460 
461 	TP_ARGS(q, bio, dev, from),
462 
463 	TP_STRUCT__entry(
464 		__field( dev_t,		dev		)
465 		__field( sector_t,	sector		)
466 		__field( unsigned int,	nr_sector	)
467 		__field( dev_t,		old_dev		)
468 		__field( sector_t,	old_sector	)
469 		__array( char,		rwbs,	6	)
470 	),
471 
472 	TP_fast_assign(
473 		__entry->dev		= bio->bi_bdev->bd_dev;
474 		__entry->sector		= bio->bi_sector;
475 		__entry->nr_sector	= bio->bi_size >> 9;
476 		__entry->old_dev	= dev;
477 		__entry->old_sector	= from;
478 		blk_fill_rwbs(__entry->rwbs, bio->bi_rw, bio->bi_size);
479 	),
480 
481 	TP_printk("%d,%d %s %llu + %u <- (%d,%d) %llu",
482 		  MAJOR(__entry->dev), MINOR(__entry->dev), __entry->rwbs,
483 		  (unsigned long long)__entry->sector,
484 		  __entry->nr_sector,
485 		  MAJOR(__entry->old_dev), MINOR(__entry->old_dev),
486 		  (unsigned long long)__entry->old_sector)
487 );
488 
489 #endif /* _TRACE_BLOCK_H */
490 
491 /* This part must be outside protection */
492 #include <trace/define_trace.h>
493 
494