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