xref: /openbmc/linux/fs/xfs/scrub/trace.h (revision 98ddec80)
1 // SPDX-License-Identifier: GPL-2.0+
2 /*
3  * Copyright (C) 2017 Oracle.  All Rights Reserved.
4  * Author: Darrick J. Wong <darrick.wong@oracle.com>
5  */
6 #undef TRACE_SYSTEM
7 #define TRACE_SYSTEM xfs_scrub
8 
9 #if !defined(_TRACE_XFS_SCRUB_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
10 #define _TRACE_XFS_SCRUB_TRACE_H
11 
12 #include <linux/tracepoint.h>
13 #include "xfs_bit.h"
14 
15 DECLARE_EVENT_CLASS(xfs_scrub_class,
16 	TP_PROTO(struct xfs_inode *ip, struct xfs_scrub_metadata *sm,
17 		 int error),
18 	TP_ARGS(ip, sm, error),
19 	TP_STRUCT__entry(
20 		__field(dev_t, dev)
21 		__field(xfs_ino_t, ino)
22 		__field(unsigned int, type)
23 		__field(xfs_agnumber_t, agno)
24 		__field(xfs_ino_t, inum)
25 		__field(unsigned int, gen)
26 		__field(unsigned int, flags)
27 		__field(int, error)
28 	),
29 	TP_fast_assign(
30 		__entry->dev = ip->i_mount->m_super->s_dev;
31 		__entry->ino = ip->i_ino;
32 		__entry->type = sm->sm_type;
33 		__entry->agno = sm->sm_agno;
34 		__entry->inum = sm->sm_ino;
35 		__entry->gen = sm->sm_gen;
36 		__entry->flags = sm->sm_flags;
37 		__entry->error = error;
38 	),
39 	TP_printk("dev %d:%d ino 0x%llx type %u agno %u inum %llu gen %u flags 0x%x error %d",
40 		  MAJOR(__entry->dev), MINOR(__entry->dev),
41 		  __entry->ino,
42 		  __entry->type,
43 		  __entry->agno,
44 		  __entry->inum,
45 		  __entry->gen,
46 		  __entry->flags,
47 		  __entry->error)
48 )
49 #define DEFINE_SCRUB_EVENT(name) \
50 DEFINE_EVENT(xfs_scrub_class, name, \
51 	TP_PROTO(struct xfs_inode *ip, struct xfs_scrub_metadata *sm, \
52 		 int error), \
53 	TP_ARGS(ip, sm, error))
54 
55 DEFINE_SCRUB_EVENT(xfs_scrub_start);
56 DEFINE_SCRUB_EVENT(xfs_scrub_done);
57 DEFINE_SCRUB_EVENT(xfs_scrub_deadlock_retry);
58 DEFINE_SCRUB_EVENT(xfs_repair_attempt);
59 DEFINE_SCRUB_EVENT(xfs_repair_done);
60 
61 TRACE_EVENT(xfs_scrub_op_error,
62 	TP_PROTO(struct xfs_scrub_context *sc, xfs_agnumber_t agno,
63 		 xfs_agblock_t bno, int error, void *ret_ip),
64 	TP_ARGS(sc, agno, bno, error, ret_ip),
65 	TP_STRUCT__entry(
66 		__field(dev_t, dev)
67 		__field(unsigned int, type)
68 		__field(xfs_agnumber_t, agno)
69 		__field(xfs_agblock_t, bno)
70 		__field(int, error)
71 		__field(void *, ret_ip)
72 	),
73 	TP_fast_assign(
74 		__entry->dev = sc->mp->m_super->s_dev;
75 		__entry->type = sc->sm->sm_type;
76 		__entry->agno = agno;
77 		__entry->bno = bno;
78 		__entry->error = error;
79 		__entry->ret_ip = ret_ip;
80 	),
81 	TP_printk("dev %d:%d type %u agno %u agbno %u error %d ret_ip %pS",
82 		  MAJOR(__entry->dev), MINOR(__entry->dev),
83 		  __entry->type,
84 		  __entry->agno,
85 		  __entry->bno,
86 		  __entry->error,
87 		  __entry->ret_ip)
88 );
89 
90 TRACE_EVENT(xfs_scrub_file_op_error,
91 	TP_PROTO(struct xfs_scrub_context *sc, int whichfork,
92 		 xfs_fileoff_t offset, int error, void *ret_ip),
93 	TP_ARGS(sc, whichfork, offset, error, ret_ip),
94 	TP_STRUCT__entry(
95 		__field(dev_t, dev)
96 		__field(xfs_ino_t, ino)
97 		__field(int, whichfork)
98 		__field(unsigned int, type)
99 		__field(xfs_fileoff_t, offset)
100 		__field(int, error)
101 		__field(void *, ret_ip)
102 	),
103 	TP_fast_assign(
104 		__entry->dev = sc->ip->i_mount->m_super->s_dev;
105 		__entry->ino = sc->ip->i_ino;
106 		__entry->whichfork = whichfork;
107 		__entry->type = sc->sm->sm_type;
108 		__entry->offset = offset;
109 		__entry->error = error;
110 		__entry->ret_ip = ret_ip;
111 	),
112 	TP_printk("dev %d:%d ino 0x%llx fork %d type %u offset %llu error %d ret_ip %pS",
113 		  MAJOR(__entry->dev), MINOR(__entry->dev),
114 		  __entry->ino,
115 		  __entry->whichfork,
116 		  __entry->type,
117 		  __entry->offset,
118 		  __entry->error,
119 		  __entry->ret_ip)
120 );
121 
122 DECLARE_EVENT_CLASS(xfs_scrub_block_error_class,
123 	TP_PROTO(struct xfs_scrub_context *sc, xfs_daddr_t daddr, void *ret_ip),
124 	TP_ARGS(sc, daddr, ret_ip),
125 	TP_STRUCT__entry(
126 		__field(dev_t, dev)
127 		__field(unsigned int, type)
128 		__field(xfs_agnumber_t, agno)
129 		__field(xfs_agblock_t, bno)
130 		__field(void *, ret_ip)
131 	),
132 	TP_fast_assign(
133 		xfs_fsblock_t	fsbno;
134 		xfs_agnumber_t	agno;
135 		xfs_agblock_t	bno;
136 
137 		fsbno = XFS_DADDR_TO_FSB(sc->mp, daddr);
138 		agno = XFS_FSB_TO_AGNO(sc->mp, fsbno);
139 		bno = XFS_FSB_TO_AGBNO(sc->mp, fsbno);
140 
141 		__entry->dev = sc->mp->m_super->s_dev;
142 		__entry->type = sc->sm->sm_type;
143 		__entry->agno = agno;
144 		__entry->bno = bno;
145 		__entry->ret_ip = ret_ip;
146 	),
147 	TP_printk("dev %d:%d type %u agno %u agbno %u ret_ip %pS",
148 		  MAJOR(__entry->dev), MINOR(__entry->dev),
149 		  __entry->type,
150 		  __entry->agno,
151 		  __entry->bno,
152 		  __entry->ret_ip)
153 )
154 
155 #define DEFINE_SCRUB_BLOCK_ERROR_EVENT(name) \
156 DEFINE_EVENT(xfs_scrub_block_error_class, name, \
157 	TP_PROTO(struct xfs_scrub_context *sc, xfs_daddr_t daddr, \
158 		 void *ret_ip), \
159 	TP_ARGS(sc, daddr, ret_ip))
160 
161 DEFINE_SCRUB_BLOCK_ERROR_EVENT(xfs_scrub_block_error);
162 DEFINE_SCRUB_BLOCK_ERROR_EVENT(xfs_scrub_block_preen);
163 
164 DECLARE_EVENT_CLASS(xfs_scrub_ino_error_class,
165 	TP_PROTO(struct xfs_scrub_context *sc, xfs_ino_t ino, void *ret_ip),
166 	TP_ARGS(sc, ino, ret_ip),
167 	TP_STRUCT__entry(
168 		__field(dev_t, dev)
169 		__field(xfs_ino_t, ino)
170 		__field(unsigned int, type)
171 		__field(void *, ret_ip)
172 	),
173 	TP_fast_assign(
174 		__entry->dev = sc->mp->m_super->s_dev;
175 		__entry->ino = ino;
176 		__entry->type = sc->sm->sm_type;
177 		__entry->ret_ip = ret_ip;
178 	),
179 	TP_printk("dev %d:%d ino 0x%llx type %u ret_ip %pS",
180 		  MAJOR(__entry->dev), MINOR(__entry->dev),
181 		  __entry->ino,
182 		  __entry->type,
183 		  __entry->ret_ip)
184 )
185 
186 #define DEFINE_SCRUB_INO_ERROR_EVENT(name) \
187 DEFINE_EVENT(xfs_scrub_ino_error_class, name, \
188 	TP_PROTO(struct xfs_scrub_context *sc, xfs_ino_t ino, \
189 		 void *ret_ip), \
190 	TP_ARGS(sc, ino, ret_ip))
191 
192 DEFINE_SCRUB_INO_ERROR_EVENT(xfs_scrub_ino_error);
193 DEFINE_SCRUB_INO_ERROR_EVENT(xfs_scrub_ino_preen);
194 DEFINE_SCRUB_INO_ERROR_EVENT(xfs_scrub_ino_warning);
195 
196 DECLARE_EVENT_CLASS(xfs_scrub_fblock_error_class,
197 	TP_PROTO(struct xfs_scrub_context *sc, int whichfork,
198 		 xfs_fileoff_t offset, void *ret_ip),
199 	TP_ARGS(sc, whichfork, offset, ret_ip),
200 	TP_STRUCT__entry(
201 		__field(dev_t, dev)
202 		__field(xfs_ino_t, ino)
203 		__field(int, whichfork)
204 		__field(unsigned int, type)
205 		__field(xfs_fileoff_t, offset)
206 		__field(void *, ret_ip)
207 	),
208 	TP_fast_assign(
209 		__entry->dev = sc->ip->i_mount->m_super->s_dev;
210 		__entry->ino = sc->ip->i_ino;
211 		__entry->whichfork = whichfork;
212 		__entry->type = sc->sm->sm_type;
213 		__entry->offset = offset;
214 		__entry->ret_ip = ret_ip;
215 	),
216 	TP_printk("dev %d:%d ino 0x%llx fork %d type %u offset %llu ret_ip %pS",
217 		  MAJOR(__entry->dev), MINOR(__entry->dev),
218 		  __entry->ino,
219 		  __entry->whichfork,
220 		  __entry->type,
221 		  __entry->offset,
222 		  __entry->ret_ip)
223 );
224 
225 #define DEFINE_SCRUB_FBLOCK_ERROR_EVENT(name) \
226 DEFINE_EVENT(xfs_scrub_fblock_error_class, name, \
227 	TP_PROTO(struct xfs_scrub_context *sc, int whichfork, \
228 		 xfs_fileoff_t offset, void *ret_ip), \
229 	TP_ARGS(sc, whichfork, offset, ret_ip))
230 
231 DEFINE_SCRUB_FBLOCK_ERROR_EVENT(xfs_scrub_fblock_error);
232 DEFINE_SCRUB_FBLOCK_ERROR_EVENT(xfs_scrub_fblock_warning);
233 
234 TRACE_EVENT(xfs_scrub_incomplete,
235 	TP_PROTO(struct xfs_scrub_context *sc, void *ret_ip),
236 	TP_ARGS(sc, ret_ip),
237 	TP_STRUCT__entry(
238 		__field(dev_t, dev)
239 		__field(unsigned int, type)
240 		__field(void *, ret_ip)
241 	),
242 	TP_fast_assign(
243 		__entry->dev = sc->mp->m_super->s_dev;
244 		__entry->type = sc->sm->sm_type;
245 		__entry->ret_ip = ret_ip;
246 	),
247 	TP_printk("dev %d:%d type %u ret_ip %pS",
248 		  MAJOR(__entry->dev), MINOR(__entry->dev),
249 		  __entry->type,
250 		  __entry->ret_ip)
251 );
252 
253 TRACE_EVENT(xfs_scrub_btree_op_error,
254 	TP_PROTO(struct xfs_scrub_context *sc, struct xfs_btree_cur *cur,
255 		 int level, int error, void *ret_ip),
256 	TP_ARGS(sc, cur, level, error, ret_ip),
257 	TP_STRUCT__entry(
258 		__field(dev_t, dev)
259 		__field(unsigned int, type)
260 		__field(xfs_btnum_t, btnum)
261 		__field(int, level)
262 		__field(xfs_agnumber_t, agno)
263 		__field(xfs_agblock_t, bno)
264 		__field(int, ptr);
265 		__field(int, error)
266 		__field(void *, ret_ip)
267 	),
268 	TP_fast_assign(
269 		xfs_fsblock_t fsbno = xfs_scrub_btree_cur_fsbno(cur, level);
270 
271 		__entry->dev = sc->mp->m_super->s_dev;
272 		__entry->type = sc->sm->sm_type;
273 		__entry->btnum = cur->bc_btnum;
274 		__entry->level = level;
275 		__entry->agno = XFS_FSB_TO_AGNO(cur->bc_mp, fsbno);
276 		__entry->bno = XFS_FSB_TO_AGBNO(cur->bc_mp, fsbno);
277 		__entry->ptr = cur->bc_ptrs[level];
278 		__entry->error = error;
279 		__entry->ret_ip = ret_ip;
280 	),
281 	TP_printk("dev %d:%d type %u btnum %d level %d ptr %d agno %u agbno %u error %d ret_ip %pS",
282 		  MAJOR(__entry->dev), MINOR(__entry->dev),
283 		  __entry->type,
284 		  __entry->btnum,
285 		  __entry->level,
286 		  __entry->ptr,
287 		  __entry->agno,
288 		  __entry->bno,
289 		  __entry->error,
290 		  __entry->ret_ip)
291 );
292 
293 TRACE_EVENT(xfs_scrub_ifork_btree_op_error,
294 	TP_PROTO(struct xfs_scrub_context *sc, struct xfs_btree_cur *cur,
295 		 int level, int error, void *ret_ip),
296 	TP_ARGS(sc, cur, level, error, ret_ip),
297 	TP_STRUCT__entry(
298 		__field(dev_t, dev)
299 		__field(xfs_ino_t, ino)
300 		__field(int, whichfork)
301 		__field(unsigned int, type)
302 		__field(xfs_btnum_t, btnum)
303 		__field(int, level)
304 		__field(int, ptr)
305 		__field(xfs_agnumber_t, agno)
306 		__field(xfs_agblock_t, bno)
307 		__field(int, error)
308 		__field(void *, ret_ip)
309 	),
310 	TP_fast_assign(
311 		xfs_fsblock_t fsbno = xfs_scrub_btree_cur_fsbno(cur, level);
312 		__entry->dev = sc->mp->m_super->s_dev;
313 		__entry->ino = sc->ip->i_ino;
314 		__entry->whichfork = cur->bc_private.b.whichfork;
315 		__entry->type = sc->sm->sm_type;
316 		__entry->btnum = cur->bc_btnum;
317 		__entry->level = level;
318 		__entry->ptr = cur->bc_ptrs[level];
319 		__entry->agno = XFS_FSB_TO_AGNO(cur->bc_mp, fsbno);
320 		__entry->bno = XFS_FSB_TO_AGBNO(cur->bc_mp, fsbno);
321 		__entry->error = error;
322 		__entry->ret_ip = ret_ip;
323 	),
324 	TP_printk("dev %d:%d ino 0x%llx fork %d type %u btnum %d level %d ptr %d agno %u agbno %u error %d ret_ip %pS",
325 		  MAJOR(__entry->dev), MINOR(__entry->dev),
326 		  __entry->ino,
327 		  __entry->whichfork,
328 		  __entry->type,
329 		  __entry->btnum,
330 		  __entry->level,
331 		  __entry->ptr,
332 		  __entry->agno,
333 		  __entry->bno,
334 		  __entry->error,
335 		  __entry->ret_ip)
336 );
337 
338 TRACE_EVENT(xfs_scrub_btree_error,
339 	TP_PROTO(struct xfs_scrub_context *sc, struct xfs_btree_cur *cur,
340 		 int level, void *ret_ip),
341 	TP_ARGS(sc, cur, level, ret_ip),
342 	TP_STRUCT__entry(
343 		__field(dev_t, dev)
344 		__field(unsigned int, type)
345 		__field(xfs_btnum_t, btnum)
346 		__field(int, level)
347 		__field(xfs_agnumber_t, agno)
348 		__field(xfs_agblock_t, bno)
349 		__field(int, ptr);
350 		__field(void *, ret_ip)
351 	),
352 	TP_fast_assign(
353 		xfs_fsblock_t fsbno = xfs_scrub_btree_cur_fsbno(cur, level);
354 		__entry->dev = sc->mp->m_super->s_dev;
355 		__entry->type = sc->sm->sm_type;
356 		__entry->btnum = cur->bc_btnum;
357 		__entry->level = level;
358 		__entry->agno = XFS_FSB_TO_AGNO(cur->bc_mp, fsbno);
359 		__entry->bno = XFS_FSB_TO_AGBNO(cur->bc_mp, fsbno);
360 		__entry->ptr = cur->bc_ptrs[level];
361 		__entry->ret_ip = ret_ip;
362 	),
363 	TP_printk("dev %d:%d type %u btnum %d level %d ptr %d agno %u agbno %u ret_ip %pS",
364 		  MAJOR(__entry->dev), MINOR(__entry->dev),
365 		  __entry->type,
366 		  __entry->btnum,
367 		  __entry->level,
368 		  __entry->ptr,
369 		  __entry->agno,
370 		  __entry->bno,
371 		  __entry->ret_ip)
372 );
373 
374 TRACE_EVENT(xfs_scrub_ifork_btree_error,
375 	TP_PROTO(struct xfs_scrub_context *sc, struct xfs_btree_cur *cur,
376 		 int level, void *ret_ip),
377 	TP_ARGS(sc, cur, level, ret_ip),
378 	TP_STRUCT__entry(
379 		__field(dev_t, dev)
380 		__field(xfs_ino_t, ino)
381 		__field(int, whichfork)
382 		__field(unsigned int, type)
383 		__field(xfs_btnum_t, btnum)
384 		__field(int, level)
385 		__field(xfs_agnumber_t, agno)
386 		__field(xfs_agblock_t, bno)
387 		__field(int, ptr);
388 		__field(void *, ret_ip)
389 	),
390 	TP_fast_assign(
391 		xfs_fsblock_t fsbno = xfs_scrub_btree_cur_fsbno(cur, level);
392 		__entry->dev = sc->mp->m_super->s_dev;
393 		__entry->ino = sc->ip->i_ino;
394 		__entry->whichfork = cur->bc_private.b.whichfork;
395 		__entry->type = sc->sm->sm_type;
396 		__entry->btnum = cur->bc_btnum;
397 		__entry->level = level;
398 		__entry->agno = XFS_FSB_TO_AGNO(cur->bc_mp, fsbno);
399 		__entry->bno = XFS_FSB_TO_AGBNO(cur->bc_mp, fsbno);
400 		__entry->ptr = cur->bc_ptrs[level];
401 		__entry->ret_ip = ret_ip;
402 	),
403 	TP_printk("dev %d:%d ino 0x%llx fork %d type %u btnum %d level %d ptr %d agno %u agbno %u ret_ip %pS",
404 		  MAJOR(__entry->dev), MINOR(__entry->dev),
405 		  __entry->ino,
406 		  __entry->whichfork,
407 		  __entry->type,
408 		  __entry->btnum,
409 		  __entry->level,
410 		  __entry->ptr,
411 		  __entry->agno,
412 		  __entry->bno,
413 		  __entry->ret_ip)
414 );
415 
416 DECLARE_EVENT_CLASS(xfs_scrub_sbtree_class,
417 	TP_PROTO(struct xfs_scrub_context *sc, struct xfs_btree_cur *cur,
418 		 int level),
419 	TP_ARGS(sc, cur, level),
420 	TP_STRUCT__entry(
421 		__field(dev_t, dev)
422 		__field(int, type)
423 		__field(xfs_btnum_t, btnum)
424 		__field(xfs_agnumber_t, agno)
425 		__field(xfs_agblock_t, bno)
426 		__field(int, level)
427 		__field(int, nlevels)
428 		__field(int, ptr)
429 	),
430 	TP_fast_assign(
431 		xfs_fsblock_t fsbno = xfs_scrub_btree_cur_fsbno(cur, level);
432 
433 		__entry->dev = sc->mp->m_super->s_dev;
434 		__entry->type = sc->sm->sm_type;
435 		__entry->btnum = cur->bc_btnum;
436 		__entry->agno = XFS_FSB_TO_AGNO(cur->bc_mp, fsbno);
437 		__entry->bno = XFS_FSB_TO_AGBNO(cur->bc_mp, fsbno);
438 		__entry->level = level;
439 		__entry->nlevels = cur->bc_nlevels;
440 		__entry->ptr = cur->bc_ptrs[level];
441 	),
442 	TP_printk("dev %d:%d type %u btnum %d agno %u agbno %u level %d nlevels %d ptr %d",
443 		  MAJOR(__entry->dev), MINOR(__entry->dev),
444 		  __entry->type,
445 		  __entry->btnum,
446 		  __entry->agno,
447 		  __entry->bno,
448 		  __entry->level,
449 		  __entry->nlevels,
450 		  __entry->ptr)
451 )
452 #define DEFINE_SCRUB_SBTREE_EVENT(name) \
453 DEFINE_EVENT(xfs_scrub_sbtree_class, name, \
454 	TP_PROTO(struct xfs_scrub_context *sc, struct xfs_btree_cur *cur, \
455 		 int level), \
456 	TP_ARGS(sc, cur, level))
457 
458 DEFINE_SCRUB_SBTREE_EVENT(xfs_scrub_btree_rec);
459 DEFINE_SCRUB_SBTREE_EVENT(xfs_scrub_btree_key);
460 
461 TRACE_EVENT(xfs_scrub_xref_error,
462 	TP_PROTO(struct xfs_scrub_context *sc, int error, void *ret_ip),
463 	TP_ARGS(sc, error, ret_ip),
464 	TP_STRUCT__entry(
465 		__field(dev_t, dev)
466 		__field(int, type)
467 		__field(int, error)
468 		__field(void *, ret_ip)
469 	),
470 	TP_fast_assign(
471 		__entry->dev = sc->mp->m_super->s_dev;
472 		__entry->type = sc->sm->sm_type;
473 		__entry->error = error;
474 		__entry->ret_ip = ret_ip;
475 	),
476 	TP_printk("dev %d:%d type %u xref error %d ret_ip %pF",
477 		  MAJOR(__entry->dev), MINOR(__entry->dev),
478 		  __entry->type,
479 		  __entry->error,
480 		  __entry->ret_ip)
481 );
482 
483 /* repair tracepoints */
484 #if IS_ENABLED(CONFIG_XFS_ONLINE_REPAIR)
485 
486 DECLARE_EVENT_CLASS(xfs_repair_extent_class,
487 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,
488 		 xfs_agblock_t agbno, xfs_extlen_t len),
489 	TP_ARGS(mp, agno, agbno, len),
490 	TP_STRUCT__entry(
491 		__field(dev_t, dev)
492 		__field(xfs_agnumber_t, agno)
493 		__field(xfs_agblock_t, agbno)
494 		__field(xfs_extlen_t, len)
495 	),
496 	TP_fast_assign(
497 		__entry->dev = mp->m_super->s_dev;
498 		__entry->agno = agno;
499 		__entry->agbno = agbno;
500 		__entry->len = len;
501 	),
502 	TP_printk("dev %d:%d agno %u agbno %u len %u",
503 		  MAJOR(__entry->dev), MINOR(__entry->dev),
504 		  __entry->agno,
505 		  __entry->agbno,
506 		  __entry->len)
507 );
508 #define DEFINE_REPAIR_EXTENT_EVENT(name) \
509 DEFINE_EVENT(xfs_repair_extent_class, name, \
510 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \
511 		 xfs_agblock_t agbno, xfs_extlen_t len), \
512 	TP_ARGS(mp, agno, agbno, len))
513 DEFINE_REPAIR_EXTENT_EVENT(xfs_repair_dispose_btree_extent);
514 DEFINE_REPAIR_EXTENT_EVENT(xfs_repair_collect_btree_extent);
515 DEFINE_REPAIR_EXTENT_EVENT(xfs_repair_agfl_insert);
516 
517 DECLARE_EVENT_CLASS(xfs_repair_rmap_class,
518 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,
519 		 xfs_agblock_t agbno, xfs_extlen_t len,
520 		 uint64_t owner, uint64_t offset, unsigned int flags),
521 	TP_ARGS(mp, agno, agbno, len, owner, offset, flags),
522 	TP_STRUCT__entry(
523 		__field(dev_t, dev)
524 		__field(xfs_agnumber_t, agno)
525 		__field(xfs_agblock_t, agbno)
526 		__field(xfs_extlen_t, len)
527 		__field(uint64_t, owner)
528 		__field(uint64_t, offset)
529 		__field(unsigned int, flags)
530 	),
531 	TP_fast_assign(
532 		__entry->dev = mp->m_super->s_dev;
533 		__entry->agno = agno;
534 		__entry->agbno = agbno;
535 		__entry->len = len;
536 		__entry->owner = owner;
537 		__entry->offset = offset;
538 		__entry->flags = flags;
539 	),
540 	TP_printk("dev %d:%d agno %u agbno %u len %u owner %lld offset %llu flags 0x%x",
541 		  MAJOR(__entry->dev), MINOR(__entry->dev),
542 		  __entry->agno,
543 		  __entry->agbno,
544 		  __entry->len,
545 		  __entry->owner,
546 		  __entry->offset,
547 		  __entry->flags)
548 );
549 #define DEFINE_REPAIR_RMAP_EVENT(name) \
550 DEFINE_EVENT(xfs_repair_rmap_class, name, \
551 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \
552 		 xfs_agblock_t agbno, xfs_extlen_t len, \
553 		 uint64_t owner, uint64_t offset, unsigned int flags), \
554 	TP_ARGS(mp, agno, agbno, len, owner, offset, flags))
555 DEFINE_REPAIR_RMAP_EVENT(xfs_repair_alloc_extent_fn);
556 DEFINE_REPAIR_RMAP_EVENT(xfs_repair_ialloc_extent_fn);
557 DEFINE_REPAIR_RMAP_EVENT(xfs_repair_rmap_extent_fn);
558 DEFINE_REPAIR_RMAP_EVENT(xfs_repair_bmap_extent_fn);
559 
560 TRACE_EVENT(xfs_repair_refcount_extent_fn,
561 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,
562 		 struct xfs_refcount_irec *irec),
563 	TP_ARGS(mp, agno, irec),
564 	TP_STRUCT__entry(
565 		__field(dev_t, dev)
566 		__field(xfs_agnumber_t, agno)
567 		__field(xfs_agblock_t, startblock)
568 		__field(xfs_extlen_t, blockcount)
569 		__field(xfs_nlink_t, refcount)
570 	),
571 	TP_fast_assign(
572 		__entry->dev = mp->m_super->s_dev;
573 		__entry->agno = agno;
574 		__entry->startblock = irec->rc_startblock;
575 		__entry->blockcount = irec->rc_blockcount;
576 		__entry->refcount = irec->rc_refcount;
577 	),
578 	TP_printk("dev %d:%d agno %u agbno %u len %u refcount %u",
579 		  MAJOR(__entry->dev), MINOR(__entry->dev),
580 		  __entry->agno,
581 		  __entry->startblock,
582 		  __entry->blockcount,
583 		  __entry->refcount)
584 )
585 
586 TRACE_EVENT(xfs_repair_init_btblock,
587 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, xfs_agblock_t agbno,
588 		 xfs_btnum_t btnum),
589 	TP_ARGS(mp, agno, agbno, btnum),
590 	TP_STRUCT__entry(
591 		__field(dev_t, dev)
592 		__field(xfs_agnumber_t, agno)
593 		__field(xfs_agblock_t, agbno)
594 		__field(uint32_t, btnum)
595 	),
596 	TP_fast_assign(
597 		__entry->dev = mp->m_super->s_dev;
598 		__entry->agno = agno;
599 		__entry->agbno = agbno;
600 		__entry->btnum = btnum;
601 	),
602 	TP_printk("dev %d:%d agno %u agbno %u btnum %d",
603 		  MAJOR(__entry->dev), MINOR(__entry->dev),
604 		  __entry->agno,
605 		  __entry->agbno,
606 		  __entry->btnum)
607 )
608 TRACE_EVENT(xfs_repair_findroot_block,
609 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, xfs_agblock_t agbno,
610 		 uint32_t magic, uint16_t level),
611 	TP_ARGS(mp, agno, agbno, magic, level),
612 	TP_STRUCT__entry(
613 		__field(dev_t, dev)
614 		__field(xfs_agnumber_t, agno)
615 		__field(xfs_agblock_t, agbno)
616 		__field(uint32_t, magic)
617 		__field(uint16_t, level)
618 	),
619 	TP_fast_assign(
620 		__entry->dev = mp->m_super->s_dev;
621 		__entry->agno = agno;
622 		__entry->agbno = agbno;
623 		__entry->magic = magic;
624 		__entry->level = level;
625 	),
626 	TP_printk("dev %d:%d agno %u agbno %u magic 0x%x level %u",
627 		  MAJOR(__entry->dev), MINOR(__entry->dev),
628 		  __entry->agno,
629 		  __entry->agbno,
630 		  __entry->magic,
631 		  __entry->level)
632 )
633 TRACE_EVENT(xfs_repair_calc_ag_resblks,
634 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,
635 		 xfs_agino_t icount, xfs_agblock_t aglen, xfs_agblock_t freelen,
636 		 xfs_agblock_t usedlen),
637 	TP_ARGS(mp, agno, icount, aglen, freelen, usedlen),
638 	TP_STRUCT__entry(
639 		__field(dev_t, dev)
640 		__field(xfs_agnumber_t, agno)
641 		__field(xfs_agino_t, icount)
642 		__field(xfs_agblock_t, aglen)
643 		__field(xfs_agblock_t, freelen)
644 		__field(xfs_agblock_t, usedlen)
645 	),
646 	TP_fast_assign(
647 		__entry->dev = mp->m_super->s_dev;
648 		__entry->agno = agno;
649 		__entry->icount = icount;
650 		__entry->aglen = aglen;
651 		__entry->freelen = freelen;
652 		__entry->usedlen = usedlen;
653 	),
654 	TP_printk("dev %d:%d agno %d icount %u aglen %u freelen %u usedlen %u",
655 		  MAJOR(__entry->dev), MINOR(__entry->dev),
656 		  __entry->agno,
657 		  __entry->icount,
658 		  __entry->aglen,
659 		  __entry->freelen,
660 		  __entry->usedlen)
661 )
662 TRACE_EVENT(xfs_repair_calc_ag_resblks_btsize,
663 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,
664 		 xfs_agblock_t bnobt_sz, xfs_agblock_t inobt_sz,
665 		 xfs_agblock_t rmapbt_sz, xfs_agblock_t refcbt_sz),
666 	TP_ARGS(mp, agno, bnobt_sz, inobt_sz, rmapbt_sz, refcbt_sz),
667 	TP_STRUCT__entry(
668 		__field(dev_t, dev)
669 		__field(xfs_agnumber_t, agno)
670 		__field(xfs_agblock_t, bnobt_sz)
671 		__field(xfs_agblock_t, inobt_sz)
672 		__field(xfs_agblock_t, rmapbt_sz)
673 		__field(xfs_agblock_t, refcbt_sz)
674 	),
675 	TP_fast_assign(
676 		__entry->dev = mp->m_super->s_dev;
677 		__entry->agno = agno;
678 		__entry->bnobt_sz = bnobt_sz;
679 		__entry->inobt_sz = inobt_sz;
680 		__entry->rmapbt_sz = rmapbt_sz;
681 		__entry->refcbt_sz = refcbt_sz;
682 	),
683 	TP_printk("dev %d:%d agno %d bno %u ino %u rmap %u refcount %u",
684 		  MAJOR(__entry->dev), MINOR(__entry->dev),
685 		  __entry->agno,
686 		  __entry->bnobt_sz,
687 		  __entry->inobt_sz,
688 		  __entry->rmapbt_sz,
689 		  __entry->refcbt_sz)
690 )
691 TRACE_EVENT(xfs_repair_reset_counters,
692 	TP_PROTO(struct xfs_mount *mp),
693 	TP_ARGS(mp),
694 	TP_STRUCT__entry(
695 		__field(dev_t, dev)
696 	),
697 	TP_fast_assign(
698 		__entry->dev = mp->m_super->s_dev;
699 	),
700 	TP_printk("dev %d:%d",
701 		  MAJOR(__entry->dev), MINOR(__entry->dev))
702 )
703 
704 TRACE_EVENT(xfs_repair_ialloc_insert,
705 	TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,
706 		 xfs_agino_t startino, uint16_t holemask, uint8_t count,
707 		 uint8_t freecount, uint64_t freemask),
708 	TP_ARGS(mp, agno, startino, holemask, count, freecount, freemask),
709 	TP_STRUCT__entry(
710 		__field(dev_t, dev)
711 		__field(xfs_agnumber_t, agno)
712 		__field(xfs_agino_t, startino)
713 		__field(uint16_t, holemask)
714 		__field(uint8_t, count)
715 		__field(uint8_t, freecount)
716 		__field(uint64_t, freemask)
717 	),
718 	TP_fast_assign(
719 		__entry->dev = mp->m_super->s_dev;
720 		__entry->agno = agno;
721 		__entry->startino = startino;
722 		__entry->holemask = holemask;
723 		__entry->count = count;
724 		__entry->freecount = freecount;
725 		__entry->freemask = freemask;
726 	),
727 	TP_printk("dev %d:%d agno %d startino %u holemask 0x%x count %u freecount %u freemask 0x%llx",
728 		  MAJOR(__entry->dev), MINOR(__entry->dev),
729 		  __entry->agno,
730 		  __entry->startino,
731 		  __entry->holemask,
732 		  __entry->count,
733 		  __entry->freecount,
734 		  __entry->freemask)
735 )
736 
737 #endif /* IS_ENABLED(CONFIG_XFS_ONLINE_REPAIR) */
738 
739 #endif /* _TRACE_XFS_SCRUB_TRACE_H */
740 
741 #undef TRACE_INCLUDE_PATH
742 #define TRACE_INCLUDE_PATH .
743 #define TRACE_INCLUDE_FILE scrub/trace
744 #include <trace/define_trace.h>
745