OSDN Git Service

2f23b10cdc71813c9e26411d9a19e19754b68865
[uclinux-h8/linux.git] / fs / xfs / scrub / trace.h
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 /*
16  * ftrace's __print_symbolic requires that all enum values be wrapped in the
17  * TRACE_DEFINE_ENUM macro so that the enum value can be encoded in the ftrace
18  * ring buffer.  Somehow this was only worth mentioning in the ftrace sample
19  * code.
20  */
21 TRACE_DEFINE_ENUM(XFS_BTNUM_BNOi);
22 TRACE_DEFINE_ENUM(XFS_BTNUM_CNTi);
23 TRACE_DEFINE_ENUM(XFS_BTNUM_BMAPi);
24 TRACE_DEFINE_ENUM(XFS_BTNUM_INOi);
25 TRACE_DEFINE_ENUM(XFS_BTNUM_FINOi);
26 TRACE_DEFINE_ENUM(XFS_BTNUM_RMAPi);
27 TRACE_DEFINE_ENUM(XFS_BTNUM_REFCi);
28
29 DECLARE_EVENT_CLASS(xchk_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(xchk_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(xchk_start);
70 DEFINE_SCRUB_EVENT(xchk_done);
71 DEFINE_SCRUB_EVENT(xchk_deadlock_retry);
72 DEFINE_SCRUB_EVENT(xrep_attempt);
73 DEFINE_SCRUB_EVENT(xrep_done);
74
75 TRACE_EVENT(xchk_op_error,
76         TP_PROTO(struct xfs_scrub *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(xchk_file_op_error,
105         TP_PROTO(struct xfs_scrub *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(xchk_block_error_class,
137         TP_PROTO(struct xfs_scrub *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(xchk_block_error_class, name, \
171         TP_PROTO(struct xfs_scrub *sc, xfs_daddr_t daddr, \
172                  void *ret_ip), \
173         TP_ARGS(sc, daddr, ret_ip))
174
175 DEFINE_SCRUB_BLOCK_ERROR_EVENT(xchk_block_error);
176 DEFINE_SCRUB_BLOCK_ERROR_EVENT(xchk_block_preen);
177
178 DECLARE_EVENT_CLASS(xchk_ino_error_class,
179         TP_PROTO(struct xfs_scrub *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(xchk_ino_error_class, name, \
202         TP_PROTO(struct xfs_scrub *sc, xfs_ino_t ino, \
203                  void *ret_ip), \
204         TP_ARGS(sc, ino, ret_ip))
205
206 DEFINE_SCRUB_INO_ERROR_EVENT(xchk_ino_error);
207 DEFINE_SCRUB_INO_ERROR_EVENT(xchk_ino_preen);
208 DEFINE_SCRUB_INO_ERROR_EVENT(xchk_ino_warning);
209
210 DECLARE_EVENT_CLASS(xchk_fblock_error_class,
211         TP_PROTO(struct xfs_scrub *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(xchk_fblock_error_class, name, \
241         TP_PROTO(struct xfs_scrub *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(xchk_fblock_error);
246 DEFINE_SCRUB_FBLOCK_ERROR_EVENT(xchk_fblock_warning);
247
248 TRACE_EVENT(xchk_incomplete,
249         TP_PROTO(struct xfs_scrub *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(xchk_btree_op_error,
268         TP_PROTO(struct xfs_scrub *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 = xchk_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 btree %s level %d ptr %d agno %u agbno %u error %d ret_ip %pS",
296                   MAJOR(__entry->dev), MINOR(__entry->dev),
297                   __entry->type,
298                   __print_symbolic(__entry->btnum, XFS_BTNUM_STRINGS),
299                   __entry->level,
300                   __entry->ptr,
301                   __entry->agno,
302                   __entry->bno,
303                   __entry->error,
304                   __entry->ret_ip)
305 );
306
307 TRACE_EVENT(xchk_ifork_btree_op_error,
308         TP_PROTO(struct xfs_scrub *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 = xchk_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 btree %s 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                   __print_symbolic(__entry->btnum, XFS_BTNUM_STRINGS),
344                   __entry->level,
345                   __entry->ptr,
346                   __entry->agno,
347                   __entry->bno,
348                   __entry->error,
349                   __entry->ret_ip)
350 );
351
352 TRACE_EVENT(xchk_btree_error,
353         TP_PROTO(struct xfs_scrub *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 = xchk_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 btree %s level %d ptr %d agno %u agbno %u ret_ip %pS",
378                   MAJOR(__entry->dev), MINOR(__entry->dev),
379                   __entry->type,
380                   __print_symbolic(__entry->btnum, XFS_BTNUM_STRINGS),
381                   __entry->level,
382                   __entry->ptr,
383                   __entry->agno,
384                   __entry->bno,
385                   __entry->ret_ip)
386 );
387
388 TRACE_EVENT(xchk_ifork_btree_error,
389         TP_PROTO(struct xfs_scrub *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 = xchk_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 btree %s 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                   __print_symbolic(__entry->btnum, XFS_BTNUM_STRINGS),
423                   __entry->level,
424                   __entry->ptr,
425                   __entry->agno,
426                   __entry->bno,
427                   __entry->ret_ip)
428 );
429
430 DECLARE_EVENT_CLASS(xchk_sbtree_class,
431         TP_PROTO(struct xfs_scrub *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 = xchk_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 btree %s agno %u agbno %u level %d nlevels %d ptr %d",
457                   MAJOR(__entry->dev), MINOR(__entry->dev),
458                   __entry->type,
459                   __print_symbolic(__entry->btnum, XFS_BTNUM_STRINGS),
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(xchk_sbtree_class, name, \
468         TP_PROTO(struct xfs_scrub *sc, struct xfs_btree_cur *cur, \
469                  int level), \
470         TP_ARGS(sc, cur, level))
471
472 DEFINE_SCRUB_SBTREE_EVENT(xchk_btree_rec);
473 DEFINE_SCRUB_SBTREE_EVENT(xchk_btree_key);
474
475 TRACE_EVENT(xchk_xref_error,
476         TP_PROTO(struct xfs_scrub *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 %pS",
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(xrep_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(xrep_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(xrep_dispose_btree_extent);
528 DEFINE_REPAIR_EXTENT_EVENT(xrep_agfl_insert);
529
530 DECLARE_EVENT_CLASS(xrep_rmap_class,
531         TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,
532                  xfs_agblock_t agbno, xfs_extlen_t len,
533                  uint64_t owner, uint64_t offset, unsigned int flags),
534         TP_ARGS(mp, agno, agbno, len, owner, offset, flags),
535         TP_STRUCT__entry(
536                 __field(dev_t, dev)
537                 __field(xfs_agnumber_t, agno)
538                 __field(xfs_agblock_t, agbno)
539                 __field(xfs_extlen_t, len)
540                 __field(uint64_t, owner)
541                 __field(uint64_t, offset)
542                 __field(unsigned int, flags)
543         ),
544         TP_fast_assign(
545                 __entry->dev = mp->m_super->s_dev;
546                 __entry->agno = agno;
547                 __entry->agbno = agbno;
548                 __entry->len = len;
549                 __entry->owner = owner;
550                 __entry->offset = offset;
551                 __entry->flags = flags;
552         ),
553         TP_printk("dev %d:%d agno %u agbno %u len %u owner %lld offset %llu flags 0x%x",
554                   MAJOR(__entry->dev), MINOR(__entry->dev),
555                   __entry->agno,
556                   __entry->agbno,
557                   __entry->len,
558                   __entry->owner,
559                   __entry->offset,
560                   __entry->flags)
561 );
562 #define DEFINE_REPAIR_RMAP_EVENT(name) \
563 DEFINE_EVENT(xrep_rmap_class, name, \
564         TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \
565                  xfs_agblock_t agbno, xfs_extlen_t len, \
566                  uint64_t owner, uint64_t offset, unsigned int flags), \
567         TP_ARGS(mp, agno, agbno, len, owner, offset, flags))
568 DEFINE_REPAIR_RMAP_EVENT(xrep_alloc_extent_fn);
569 DEFINE_REPAIR_RMAP_EVENT(xrep_ialloc_extent_fn);
570 DEFINE_REPAIR_RMAP_EVENT(xrep_rmap_extent_fn);
571 DEFINE_REPAIR_RMAP_EVENT(xrep_bmap_extent_fn);
572
573 TRACE_EVENT(xrep_refcount_extent_fn,
574         TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,
575                  struct xfs_refcount_irec *irec),
576         TP_ARGS(mp, agno, irec),
577         TP_STRUCT__entry(
578                 __field(dev_t, dev)
579                 __field(xfs_agnumber_t, agno)
580                 __field(xfs_agblock_t, startblock)
581                 __field(xfs_extlen_t, blockcount)
582                 __field(xfs_nlink_t, refcount)
583         ),
584         TP_fast_assign(
585                 __entry->dev = mp->m_super->s_dev;
586                 __entry->agno = agno;
587                 __entry->startblock = irec->rc_startblock;
588                 __entry->blockcount = irec->rc_blockcount;
589                 __entry->refcount = irec->rc_refcount;
590         ),
591         TP_printk("dev %d:%d agno %u agbno %u len %u refcount %u",
592                   MAJOR(__entry->dev), MINOR(__entry->dev),
593                   __entry->agno,
594                   __entry->startblock,
595                   __entry->blockcount,
596                   __entry->refcount)
597 )
598
599 TRACE_EVENT(xrep_init_btblock,
600         TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, xfs_agblock_t agbno,
601                  xfs_btnum_t btnum),
602         TP_ARGS(mp, agno, agbno, btnum),
603         TP_STRUCT__entry(
604                 __field(dev_t, dev)
605                 __field(xfs_agnumber_t, agno)
606                 __field(xfs_agblock_t, agbno)
607                 __field(uint32_t, btnum)
608         ),
609         TP_fast_assign(
610                 __entry->dev = mp->m_super->s_dev;
611                 __entry->agno = agno;
612                 __entry->agbno = agbno;
613                 __entry->btnum = btnum;
614         ),
615         TP_printk("dev %d:%d agno %u agbno %u btree %s",
616                   MAJOR(__entry->dev), MINOR(__entry->dev),
617                   __entry->agno,
618                   __entry->agbno,
619                   __print_symbolic(__entry->btnum, XFS_BTNUM_STRINGS))
620 )
621 TRACE_EVENT(xrep_findroot_block,
622         TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, xfs_agblock_t agbno,
623                  uint32_t magic, uint16_t level),
624         TP_ARGS(mp, agno, agbno, magic, level),
625         TP_STRUCT__entry(
626                 __field(dev_t, dev)
627                 __field(xfs_agnumber_t, agno)
628                 __field(xfs_agblock_t, agbno)
629                 __field(uint32_t, magic)
630                 __field(uint16_t, level)
631         ),
632         TP_fast_assign(
633                 __entry->dev = mp->m_super->s_dev;
634                 __entry->agno = agno;
635                 __entry->agbno = agbno;
636                 __entry->magic = magic;
637                 __entry->level = level;
638         ),
639         TP_printk("dev %d:%d agno %u agbno %u magic 0x%x level %u",
640                   MAJOR(__entry->dev), MINOR(__entry->dev),
641                   __entry->agno,
642                   __entry->agbno,
643                   __entry->magic,
644                   __entry->level)
645 )
646 TRACE_EVENT(xrep_calc_ag_resblks,
647         TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,
648                  xfs_agino_t icount, xfs_agblock_t aglen, xfs_agblock_t freelen,
649                  xfs_agblock_t usedlen),
650         TP_ARGS(mp, agno, icount, aglen, freelen, usedlen),
651         TP_STRUCT__entry(
652                 __field(dev_t, dev)
653                 __field(xfs_agnumber_t, agno)
654                 __field(xfs_agino_t, icount)
655                 __field(xfs_agblock_t, aglen)
656                 __field(xfs_agblock_t, freelen)
657                 __field(xfs_agblock_t, usedlen)
658         ),
659         TP_fast_assign(
660                 __entry->dev = mp->m_super->s_dev;
661                 __entry->agno = agno;
662                 __entry->icount = icount;
663                 __entry->aglen = aglen;
664                 __entry->freelen = freelen;
665                 __entry->usedlen = usedlen;
666         ),
667         TP_printk("dev %d:%d agno %d icount %u aglen %u freelen %u usedlen %u",
668                   MAJOR(__entry->dev), MINOR(__entry->dev),
669                   __entry->agno,
670                   __entry->icount,
671                   __entry->aglen,
672                   __entry->freelen,
673                   __entry->usedlen)
674 )
675 TRACE_EVENT(xrep_calc_ag_resblks_btsize,
676         TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,
677                  xfs_agblock_t bnobt_sz, xfs_agblock_t inobt_sz,
678                  xfs_agblock_t rmapbt_sz, xfs_agblock_t refcbt_sz),
679         TP_ARGS(mp, agno, bnobt_sz, inobt_sz, rmapbt_sz, refcbt_sz),
680         TP_STRUCT__entry(
681                 __field(dev_t, dev)
682                 __field(xfs_agnumber_t, agno)
683                 __field(xfs_agblock_t, bnobt_sz)
684                 __field(xfs_agblock_t, inobt_sz)
685                 __field(xfs_agblock_t, rmapbt_sz)
686                 __field(xfs_agblock_t, refcbt_sz)
687         ),
688         TP_fast_assign(
689                 __entry->dev = mp->m_super->s_dev;
690                 __entry->agno = agno;
691                 __entry->bnobt_sz = bnobt_sz;
692                 __entry->inobt_sz = inobt_sz;
693                 __entry->rmapbt_sz = rmapbt_sz;
694                 __entry->refcbt_sz = refcbt_sz;
695         ),
696         TP_printk("dev %d:%d agno %d bno %u ino %u rmap %u refcount %u",
697                   MAJOR(__entry->dev), MINOR(__entry->dev),
698                   __entry->agno,
699                   __entry->bnobt_sz,
700                   __entry->inobt_sz,
701                   __entry->rmapbt_sz,
702                   __entry->refcbt_sz)
703 )
704 TRACE_EVENT(xrep_reset_counters,
705         TP_PROTO(struct xfs_mount *mp),
706         TP_ARGS(mp),
707         TP_STRUCT__entry(
708                 __field(dev_t, dev)
709         ),
710         TP_fast_assign(
711                 __entry->dev = mp->m_super->s_dev;
712         ),
713         TP_printk("dev %d:%d",
714                   MAJOR(__entry->dev), MINOR(__entry->dev))
715 )
716
717 TRACE_EVENT(xrep_ialloc_insert,
718         TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,
719                  xfs_agino_t startino, uint16_t holemask, uint8_t count,
720                  uint8_t freecount, uint64_t freemask),
721         TP_ARGS(mp, agno, startino, holemask, count, freecount, freemask),
722         TP_STRUCT__entry(
723                 __field(dev_t, dev)
724                 __field(xfs_agnumber_t, agno)
725                 __field(xfs_agino_t, startino)
726                 __field(uint16_t, holemask)
727                 __field(uint8_t, count)
728                 __field(uint8_t, freecount)
729                 __field(uint64_t, freemask)
730         ),
731         TP_fast_assign(
732                 __entry->dev = mp->m_super->s_dev;
733                 __entry->agno = agno;
734                 __entry->startino = startino;
735                 __entry->holemask = holemask;
736                 __entry->count = count;
737                 __entry->freecount = freecount;
738                 __entry->freemask = freemask;
739         ),
740         TP_printk("dev %d:%d agno %d startino %u holemask 0x%x count %u freecount %u freemask 0x%llx",
741                   MAJOR(__entry->dev), MINOR(__entry->dev),
742                   __entry->agno,
743                   __entry->startino,
744                   __entry->holemask,
745                   __entry->count,
746                   __entry->freecount,
747                   __entry->freemask)
748 )
749
750 #endif /* IS_ENABLED(CONFIG_XFS_ONLINE_REPAIR) */
751
752 #endif /* _TRACE_XFS_SCRUB_TRACE_H */
753
754 #undef TRACE_INCLUDE_PATH
755 #define TRACE_INCLUDE_PATH .
756 #define TRACE_INCLUDE_FILE scrub/trace
757 #include <trace/define_trace.h>