Warning: This file is not a C or C++ file. It does not have highlighting.

1// SPDX-License-Identifier: GPL-2.0-or-later
2/*
3 * Copyright (C) 2017-2023 Oracle. All Rights Reserved.
4 * Author: Darrick J. Wong <djwong@kernel.org>
5 *
6 * NOTE: none of these tracepoints shall be considered a stable kernel ABI
7 * as they can change at any time. See xfs_trace.h for documentation of
8 * specific units found in tracepoint output.
9 */
10#undef TRACE_SYSTEM
11#define TRACE_SYSTEM xfs_scrub
12
13#if !defined(_TRACE_XFS_SCRUB_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
14#define _TRACE_XFS_SCRUB_TRACE_H
15
16#include <linux/tracepoint.h>
17#include "xfs_bit.h"
18#include "xfs_quota_defs.h"
19
20struct xfs_rtgroup;
21struct xfs_scrub;
22struct xfile;
23struct xfarray;
24struct xfarray_sortinfo;
25struct xchk_dqiter;
26struct xchk_iscan;
27struct xchk_nlink;
28struct xchk_fscounters;
29struct xfs_rmap_update_params;
30struct xfs_parent_rec;
31enum xchk_dirpath_outcome;
32struct xchk_dirtree;
33struct xchk_dirtree_outcomes;
34
35/*
36 * ftrace's __print_symbolic requires that all enum values be wrapped in the
37 * TRACE_DEFINE_ENUM macro so that the enum value can be encoded in the ftrace
38 * ring buffer. Somehow this was only worth mentioning in the ftrace sample
39 * code.
40 */
41TRACE_DEFINE_ENUM(XFS_REFC_DOMAIN_SHARED);
42TRACE_DEFINE_ENUM(XFS_REFC_DOMAIN_COW);
43
44TRACE_DEFINE_ENUM(XG_TYPE_AG);
45TRACE_DEFINE_ENUM(XG_TYPE_RTG);
46
47TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_PROBE);
48TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_SB);
49TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_AGF);
50TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_AGFL);
51TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_AGI);
52TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_BNOBT);
53TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_CNTBT);
54TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_INOBT);
55TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_FINOBT);
56TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_RMAPBT);
57TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_REFCNTBT);
58TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_INODE);
59TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_BMBTD);
60TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_BMBTA);
61TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_BMBTC);
62TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_DIR);
63TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_XATTR);
64TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_SYMLINK);
65TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_PARENT);
66TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_RTBITMAP);
67TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_RTSUM);
68TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_UQUOTA);
69TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_GQUOTA);
70TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_PQUOTA);
71TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_FSCOUNTERS);
72TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_QUOTACHECK);
73TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_NLINKS);
74TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_HEALTHY);
75TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_DIRTREE);
76TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_BARRIER);
77TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_METAPATH);
78TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_RGSUPER);
79TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_RTRMAPBT);
80TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_RTREFCBT);
81
82#define XFS_SCRUB_TYPE_STRINGS \
83 { XFS_SCRUB_TYPE_PROBE, "probe" }, \
84 { XFS_SCRUB_TYPE_SB, "sb" }, \
85 { XFS_SCRUB_TYPE_AGF, "agf" }, \
86 { XFS_SCRUB_TYPE_AGFL, "agfl" }, \
87 { XFS_SCRUB_TYPE_AGI, "agi" }, \
88 { XFS_SCRUB_TYPE_BNOBT, "bnobt" }, \
89 { XFS_SCRUB_TYPE_CNTBT, "cntbt" }, \
90 { XFS_SCRUB_TYPE_INOBT, "inobt" }, \
91 { XFS_SCRUB_TYPE_FINOBT, "finobt" }, \
92 { XFS_SCRUB_TYPE_RMAPBT, "rmapbt" }, \
93 { XFS_SCRUB_TYPE_REFCNTBT, "refcountbt" }, \
94 { XFS_SCRUB_TYPE_INODE, "inode" }, \
95 { XFS_SCRUB_TYPE_BMBTD, "bmapbtd" }, \
96 { XFS_SCRUB_TYPE_BMBTA, "bmapbta" }, \
97 { XFS_SCRUB_TYPE_BMBTC, "bmapbtc" }, \
98 { XFS_SCRUB_TYPE_DIR, "directory" }, \
99 { XFS_SCRUB_TYPE_XATTR, "xattr" }, \
100 { XFS_SCRUB_TYPE_SYMLINK, "symlink" }, \
101 { XFS_SCRUB_TYPE_PARENT, "parent" }, \
102 { XFS_SCRUB_TYPE_RTBITMAP, "rtbitmap" }, \
103 { XFS_SCRUB_TYPE_RTSUM, "rtsummary" }, \
104 { XFS_SCRUB_TYPE_UQUOTA, "usrquota" }, \
105 { XFS_SCRUB_TYPE_GQUOTA, "grpquota" }, \
106 { XFS_SCRUB_TYPE_PQUOTA, "prjquota" }, \
107 { XFS_SCRUB_TYPE_FSCOUNTERS, "fscounters" }, \
108 { XFS_SCRUB_TYPE_QUOTACHECK, "quotacheck" }, \
109 { XFS_SCRUB_TYPE_NLINKS, "nlinks" }, \
110 { XFS_SCRUB_TYPE_HEALTHY, "healthy" }, \
111 { XFS_SCRUB_TYPE_DIRTREE, "dirtree" }, \
112 { XFS_SCRUB_TYPE_BARRIER, "barrier" }, \
113 { XFS_SCRUB_TYPE_METAPATH, "metapath" }, \
114 { XFS_SCRUB_TYPE_RGSUPER, "rgsuper" }, \
115 { XFS_SCRUB_TYPE_RTRMAPBT, "rtrmapbt" }, \
116 { XFS_SCRUB_TYPE_RTREFCBT, "rtrefcountbt" }
117
118#define XFS_SCRUB_FLAG_STRINGS \
119 { XFS_SCRUB_IFLAG_REPAIR, "repair" }, \
120 { XFS_SCRUB_OFLAG_CORRUPT, "corrupt" }, \
121 { XFS_SCRUB_OFLAG_PREEN, "preen" }, \
122 { XFS_SCRUB_OFLAG_XFAIL, "xfail" }, \
123 { XFS_SCRUB_OFLAG_XCORRUPT, "xcorrupt" }, \
124 { XFS_SCRUB_OFLAG_INCOMPLETE, "incomplete" }, \
125 { XFS_SCRUB_OFLAG_WARNING, "warning" }, \
126 { XFS_SCRUB_OFLAG_NO_REPAIR_NEEDED, "norepair" }, \
127 { XFS_SCRUB_IFLAG_FORCE_REBUILD, "rebuild" }
128
129#define XFS_SCRUB_STATE_STRINGS \
130 { XCHK_TRY_HARDER, "try_harder" }, \
131 { XCHK_HAVE_FREEZE_PROT, "nofreeze" }, \
132 { XCHK_FSGATES_DRAIN, "fsgates_drain" }, \
133 { XCHK_NEED_DRAIN, "need_drain" }, \
134 { XCHK_FSGATES_QUOTA, "fsgates_quota" }, \
135 { XCHK_FSGATES_DIRENTS, "fsgates_dirents" }, \
136 { XCHK_FSGATES_RMAP, "fsgates_rmap" }, \
137 { XREP_RESET_PERAG_RESV, "reset_perag_resv" }, \
138 { XREP_ALREADY_FIXED, "already_fixed" }
139
140TRACE_DEFINE_ENUM(XFS_RMAP_MAP);
141TRACE_DEFINE_ENUM(XFS_RMAP_MAP_SHARED);
142TRACE_DEFINE_ENUM(XFS_RMAP_UNMAP);
143TRACE_DEFINE_ENUM(XFS_RMAP_UNMAP_SHARED);
144TRACE_DEFINE_ENUM(XFS_RMAP_CONVERT);
145TRACE_DEFINE_ENUM(XFS_RMAP_CONVERT_SHARED);
146TRACE_DEFINE_ENUM(XFS_RMAP_ALLOC);
147TRACE_DEFINE_ENUM(XFS_RMAP_FREE);
148
149DECLARE_EVENT_CLASS(xchk_class,
150 TP_PROTO(struct xfs_inode *ip, struct xfs_scrub_metadata *sm,
151 int error),
152 TP_ARGS(ip, sm, error),
153 TP_STRUCT__entry(
154 __field(dev_t, dev)
155 __field(xfs_ino_t, ino)
156 __field(unsigned int, type)
157 __field(xfs_agnumber_t, agno)
158 __field(xfs_ino_t, inum)
159 __field(unsigned int, gen)
160 __field(unsigned int, flags)
161 __field(int, error)
162 ),
163 TP_fast_assign(
164 __entry->dev = ip->i_mount->m_super->s_dev;
165 __entry->ino = ip->i_ino;
166 __entry->type = sm->sm_type;
167 __entry->agno = sm->sm_agno;
168 __entry->inum = sm->sm_ino;
169 __entry->gen = sm->sm_gen;
170 __entry->flags = sm->sm_flags;
171 __entry->error = error;
172 ),
173 TP_printk("dev %d:%d ino 0x%llx type %s agno 0x%x inum 0x%llx gen 0x%x flags (%s) error %d",
174 MAJOR(__entry->dev), MINOR(__entry->dev),
175 __entry->ino,
176 __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),
177 __entry->agno,
178 __entry->inum,
179 __entry->gen,
180 __print_flags(__entry->flags, "|", XFS_SCRUB_FLAG_STRINGS),
181 __entry->error)
182)
183#define DEFINE_SCRUB_EVENT(name) \
184DEFINE_EVENT(xchk_class, name, \
185 TP_PROTO(struct xfs_inode *ip, struct xfs_scrub_metadata *sm, \
186 int error), \
187 TP_ARGS(ip, sm, error))
188
189DEFINE_SCRUB_EVENT(xchk_start);
190DEFINE_SCRUB_EVENT(xchk_done);
191DEFINE_SCRUB_EVENT(xchk_deadlock_retry);
192DEFINE_SCRUB_EVENT(xchk_dirtree_start);
193DEFINE_SCRUB_EVENT(xchk_dirtree_done);
194DEFINE_SCRUB_EVENT(xrep_attempt);
195DEFINE_SCRUB_EVENT(xrep_done);
196
197DECLARE_EVENT_CLASS(xchk_fsgate_class,
198 TP_PROTO(struct xfs_scrub *sc, unsigned int fsgate_flags),
199 TP_ARGS(sc, fsgate_flags),
200 TP_STRUCT__entry(
201 __field(dev_t, dev)
202 __field(unsigned int, type)
203 __field(unsigned int, fsgate_flags)
204 ),
205 TP_fast_assign(
206 __entry->dev = sc->mp->m_super->s_dev;
207 __entry->type = sc->sm->sm_type;
208 __entry->fsgate_flags = fsgate_flags;
209 ),
210 TP_printk("dev %d:%d type %s fsgates '%s'",
211 MAJOR(__entry->dev), MINOR(__entry->dev),
212 __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),
213 __print_flags(__entry->fsgate_flags, "|", XFS_SCRUB_STATE_STRINGS))
214)
215
216#define DEFINE_SCRUB_FSHOOK_EVENT(name) \
217DEFINE_EVENT(xchk_fsgate_class, name, \
218 TP_PROTO(struct xfs_scrub *sc, unsigned int fsgates_flags), \
219 TP_ARGS(sc, fsgates_flags))
220
221DEFINE_SCRUB_FSHOOK_EVENT(xchk_fsgates_enable);
222DEFINE_SCRUB_FSHOOK_EVENT(xchk_fsgates_disable);
223
224DECLARE_EVENT_CLASS(xchk_vector_head_class,
225 TP_PROTO(struct xfs_inode *ip, struct xfs_scrub_vec_head *vhead),
226 TP_ARGS(ip, vhead),
227 TP_STRUCT__entry(
228 __field(dev_t, dev)
229 __field(xfs_ino_t, ino)
230 __field(xfs_agnumber_t, agno)
231 __field(xfs_ino_t, inum)
232 __field(unsigned int, gen)
233 __field(unsigned int, flags)
234 __field(unsigned short, rest_us)
235 __field(unsigned short, nr_vecs)
236 ),
237 TP_fast_assign(
238 __entry->dev = ip->i_mount->m_super->s_dev;
239 __entry->ino = ip->i_ino;
240 __entry->agno = vhead->svh_agno;
241 __entry->inum = vhead->svh_ino;
242 __entry->gen = vhead->svh_gen;
243 __entry->flags = vhead->svh_flags;
244 __entry->rest_us = vhead->svh_rest_us;
245 __entry->nr_vecs = vhead->svh_nr;
246 ),
247 TP_printk("dev %d:%d ino 0x%llx agno 0x%x inum 0x%llx gen 0x%x flags 0x%x rest_us %u nr_vecs %u",
248 MAJOR(__entry->dev), MINOR(__entry->dev),
249 __entry->ino,
250 __entry->agno,
251 __entry->inum,
252 __entry->gen,
253 __entry->flags,
254 __entry->rest_us,
255 __entry->nr_vecs)
256)
257#define DEFINE_SCRUBV_HEAD_EVENT(name) \
258DEFINE_EVENT(xchk_vector_head_class, name, \
259 TP_PROTO(struct xfs_inode *ip, struct xfs_scrub_vec_head *vhead), \
260 TP_ARGS(ip, vhead))
261
262DEFINE_SCRUBV_HEAD_EVENT(xchk_scrubv_start);
263
264DECLARE_EVENT_CLASS(xchk_vector_class,
265 TP_PROTO(struct xfs_mount *mp, struct xfs_scrub_vec_head *vhead,
266 unsigned int vec_nr, struct xfs_scrub_vec *v),
267 TP_ARGS(mp, vhead, vec_nr, v),
268 TP_STRUCT__entry(
269 __field(dev_t, dev)
270 __field(unsigned int, vec_nr)
271 __field(unsigned int, vec_type)
272 __field(unsigned int, vec_flags)
273 __field(int, vec_ret)
274 ),
275 TP_fast_assign(
276 __entry->dev = mp->m_super->s_dev;
277 __entry->vec_nr = vec_nr;
278 __entry->vec_type = v->sv_type;
279 __entry->vec_flags = v->sv_flags;
280 __entry->vec_ret = v->sv_ret;
281 ),
282 TP_printk("dev %d:%d vec[%u] type %s flags %s ret %d",
283 MAJOR(__entry->dev), MINOR(__entry->dev),
284 __entry->vec_nr,
285 __print_symbolic(__entry->vec_type, XFS_SCRUB_TYPE_STRINGS),
286 __print_flags(__entry->vec_flags, "|", XFS_SCRUB_FLAG_STRINGS),
287 __entry->vec_ret)
288)
289#define DEFINE_SCRUBV_EVENT(name) \
290DEFINE_EVENT(xchk_vector_class, name, \
291 TP_PROTO(struct xfs_mount *mp, struct xfs_scrub_vec_head *vhead, \
292 unsigned int vec_nr, struct xfs_scrub_vec *v), \
293 TP_ARGS(mp, vhead, vec_nr, v))
294
295DEFINE_SCRUBV_EVENT(xchk_scrubv_barrier_fail);
296DEFINE_SCRUBV_EVENT(xchk_scrubv_item);
297DEFINE_SCRUBV_EVENT(xchk_scrubv_outcome);
298
299TRACE_EVENT(xchk_op_error,
300 TP_PROTO(struct xfs_scrub *sc, xfs_agnumber_t agno,
301 xfs_agblock_t bno, int error, void *ret_ip),
302 TP_ARGS(sc, agno, bno, error, ret_ip),
303 TP_STRUCT__entry(
304 __field(dev_t, dev)
305 __field(unsigned int, type)
306 __field(xfs_agnumber_t, agno)
307 __field(xfs_agblock_t, bno)
308 __field(int, error)
309 __field(void *, ret_ip)
310 ),
311 TP_fast_assign(
312 __entry->dev = sc->mp->m_super->s_dev;
313 __entry->type = sc->sm->sm_type;
314 __entry->agno = agno;
315 __entry->bno = bno;
316 __entry->error = error;
317 __entry->ret_ip = ret_ip;
318 ),
319 TP_printk("dev %d:%d type %s agno 0x%x agbno 0x%x error %d ret_ip %pS",
320 MAJOR(__entry->dev), MINOR(__entry->dev),
321 __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),
322 __entry->agno,
323 __entry->bno,
324 __entry->error,
325 __entry->ret_ip)
326);
327
328TRACE_EVENT(xchk_file_op_error,
329 TP_PROTO(struct xfs_scrub *sc, int whichfork,
330 xfs_fileoff_t offset, int error, void *ret_ip),
331 TP_ARGS(sc, whichfork, offset, error, ret_ip),
332 TP_STRUCT__entry(
333 __field(dev_t, dev)
334 __field(xfs_ino_t, ino)
335 __field(int, whichfork)
336 __field(unsigned int, type)
337 __field(xfs_fileoff_t, offset)
338 __field(int, error)
339 __field(void *, ret_ip)
340 ),
341 TP_fast_assign(
342 __entry->dev = sc->ip->i_mount->m_super->s_dev;
343 __entry->ino = sc->ip->i_ino;
344 __entry->whichfork = whichfork;
345 __entry->type = sc->sm->sm_type;
346 __entry->offset = offset;
347 __entry->error = error;
348 __entry->ret_ip = ret_ip;
349 ),
350 TP_printk("dev %d:%d ino 0x%llx fork %s type %s fileoff 0x%llx error %d ret_ip %pS",
351 MAJOR(__entry->dev), MINOR(__entry->dev),
352 __entry->ino,
353 __print_symbolic(__entry->whichfork, XFS_WHICHFORK_STRINGS),
354 __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),
355 __entry->offset,
356 __entry->error,
357 __entry->ret_ip)
358);
359
360DECLARE_EVENT_CLASS(xchk_block_error_class,
361 TP_PROTO(struct xfs_scrub *sc, xfs_daddr_t daddr, void *ret_ip),
362 TP_ARGS(sc, daddr, ret_ip),
363 TP_STRUCT__entry(
364 __field(dev_t, dev)
365 __field(unsigned int, type)
366 __field(xfs_agnumber_t, agno)
367 __field(xfs_agblock_t, agbno)
368 __field(void *, ret_ip)
369 ),
370 TP_fast_assign(
371 __entry->dev = sc->mp->m_super->s_dev;
372 __entry->type = sc->sm->sm_type;
373 __entry->agno = xfs_daddr_to_agno(sc->mp, daddr);
374 __entry->agbno = xfs_daddr_to_agbno(sc->mp, daddr);
375 __entry->ret_ip = ret_ip;
376 ),
377 TP_printk("dev %d:%d type %s agno 0x%x agbno 0x%x ret_ip %pS",
378 MAJOR(__entry->dev), MINOR(__entry->dev),
379 __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),
380 __entry->agno,
381 __entry->agbno,
382 __entry->ret_ip)
383)
384
385#define DEFINE_SCRUB_BLOCK_ERROR_EVENT(name) \
386DEFINE_EVENT(xchk_block_error_class, name, \
387 TP_PROTO(struct xfs_scrub *sc, xfs_daddr_t daddr, \
388 void *ret_ip), \
389 TP_ARGS(sc, daddr, ret_ip))
390
391DEFINE_SCRUB_BLOCK_ERROR_EVENT(xchk_fs_error);
392DEFINE_SCRUB_BLOCK_ERROR_EVENT(xchk_block_error);
393DEFINE_SCRUB_BLOCK_ERROR_EVENT(xchk_block_preen);
394
395DECLARE_EVENT_CLASS(xchk_ino_error_class,
396 TP_PROTO(struct xfs_scrub *sc, xfs_ino_t ino, void *ret_ip),
397 TP_ARGS(sc, ino, ret_ip),
398 TP_STRUCT__entry(
399 __field(dev_t, dev)
400 __field(xfs_ino_t, ino)
401 __field(unsigned int, type)
402 __field(void *, ret_ip)
403 ),
404 TP_fast_assign(
405 __entry->dev = sc->mp->m_super->s_dev;
406 __entry->ino = ino;
407 __entry->type = sc->sm->sm_type;
408 __entry->ret_ip = ret_ip;
409 ),
410 TP_printk("dev %d:%d ino 0x%llx type %s ret_ip %pS",
411 MAJOR(__entry->dev), MINOR(__entry->dev),
412 __entry->ino,
413 __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),
414 __entry->ret_ip)
415)
416
417#define DEFINE_SCRUB_INO_ERROR_EVENT(name) \
418DEFINE_EVENT(xchk_ino_error_class, name, \
419 TP_PROTO(struct xfs_scrub *sc, xfs_ino_t ino, \
420 void *ret_ip), \
421 TP_ARGS(sc, ino, ret_ip))
422
423DEFINE_SCRUB_INO_ERROR_EVENT(xchk_ino_error);
424DEFINE_SCRUB_INO_ERROR_EVENT(xchk_ino_preen);
425DEFINE_SCRUB_INO_ERROR_EVENT(xchk_ino_warning);
426
427DECLARE_EVENT_CLASS(xchk_fblock_error_class,
428 TP_PROTO(struct xfs_scrub *sc, int whichfork,
429 xfs_fileoff_t offset, void *ret_ip),
430 TP_ARGS(sc, whichfork, offset, ret_ip),
431 TP_STRUCT__entry(
432 __field(dev_t, dev)
433 __field(xfs_ino_t, ino)
434 __field(int, whichfork)
435 __field(unsigned int, type)
436 __field(xfs_fileoff_t, offset)
437 __field(void *, ret_ip)
438 ),
439 TP_fast_assign(
440 __entry->dev = sc->ip->i_mount->m_super->s_dev;
441 __entry->ino = sc->ip->i_ino;
442 __entry->whichfork = whichfork;
443 __entry->type = sc->sm->sm_type;
444 __entry->offset = offset;
445 __entry->ret_ip = ret_ip;
446 ),
447 TP_printk("dev %d:%d ino 0x%llx fork %s type %s fileoff 0x%llx ret_ip %pS",
448 MAJOR(__entry->dev), MINOR(__entry->dev),
449 __entry->ino,
450 __print_symbolic(__entry->whichfork, XFS_WHICHFORK_STRINGS),
451 __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),
452 __entry->offset,
453 __entry->ret_ip)
454);
455
456#define DEFINE_SCRUB_FBLOCK_ERROR_EVENT(name) \
457DEFINE_EVENT(xchk_fblock_error_class, name, \
458 TP_PROTO(struct xfs_scrub *sc, int whichfork, \
459 xfs_fileoff_t offset, void *ret_ip), \
460 TP_ARGS(sc, whichfork, offset, ret_ip))
461
462DEFINE_SCRUB_FBLOCK_ERROR_EVENT(xchk_fblock_error);
463DEFINE_SCRUB_FBLOCK_ERROR_EVENT(xchk_fblock_warning);
464DEFINE_SCRUB_FBLOCK_ERROR_EVENT(xchk_fblock_preen);
465
466#ifdef CONFIG_XFS_QUOTA
467DECLARE_EVENT_CLASS(xchk_dqiter_class,
468 TP_PROTO(struct xchk_dqiter *cursor, uint64_t id),
469 TP_ARGS(cursor, id),
470 TP_STRUCT__entry(
471 __field(dev_t, dev)
472 __field(xfs_dqtype_t, dqtype)
473 __field(xfs_ino_t, ino)
474 __field(unsigned long long, cur_id)
475 __field(unsigned long long, id)
476 __field(xfs_fileoff_t, startoff)
477 __field(xfs_fsblock_t, startblock)
478 __field(xfs_filblks_t, blockcount)
479 __field(xfs_exntst_t, state)
480 ),
481 TP_fast_assign(
482 __entry->dev = cursor->sc->mp->m_super->s_dev;
483 __entry->dqtype = cursor->dqtype;
484 __entry->ino = cursor->quota_ip->i_ino;
485 __entry->cur_id = cursor->id;
486 __entry->startoff = cursor->bmap.br_startoff;
487 __entry->startblock = cursor->bmap.br_startblock;
488 __entry->blockcount = cursor->bmap.br_blockcount;
489 __entry->state = cursor->bmap.br_state;
490 __entry->id = id;
491 ),
492 TP_printk("dev %d:%d dquot type %s ino 0x%llx cursor_id 0x%llx startoff 0x%llx startblock 0x%llx blockcount 0x%llx state %u id 0x%llx",
493 MAJOR(__entry->dev), MINOR(__entry->dev),
494 __print_symbolic(__entry->dqtype, XFS_DQTYPE_STRINGS),
495 __entry->ino,
496 __entry->cur_id,
497 __entry->startoff,
498 __entry->startblock,
499 __entry->blockcount,
500 __entry->state,
501 __entry->id)
502);
503
504#define DEFINE_SCRUB_DQITER_EVENT(name) \
505DEFINE_EVENT(xchk_dqiter_class, name, \
506 TP_PROTO(struct xchk_dqiter *cursor, uint64_t id), \
507 TP_ARGS(cursor, id))
508DEFINE_SCRUB_DQITER_EVENT(xchk_dquot_iter_revalidate_bmap);
509DEFINE_SCRUB_DQITER_EVENT(xchk_dquot_iter_advance_bmap);
510DEFINE_SCRUB_DQITER_EVENT(xchk_dquot_iter_advance_incore);
511DEFINE_SCRUB_DQITER_EVENT(xchk_dquot_iter);
512
513TRACE_EVENT(xchk_qcheck_error,
514 TP_PROTO(struct xfs_scrub *sc, xfs_dqtype_t dqtype, xfs_dqid_t id,
515 void *ret_ip),
516 TP_ARGS(sc, dqtype, id, ret_ip),
517 TP_STRUCT__entry(
518 __field(dev_t, dev)
519 __field(xfs_dqtype_t, dqtype)
520 __field(xfs_dqid_t, id)
521 __field(void *, ret_ip)
522 ),
523 TP_fast_assign(
524 __entry->dev = sc->mp->m_super->s_dev;
525 __entry->dqtype = dqtype;
526 __entry->id = id;
527 __entry->ret_ip = ret_ip;
528 ),
529 TP_printk("dev %d:%d dquot type %s id 0x%x ret_ip %pS",
530 MAJOR(__entry->dev), MINOR(__entry->dev),
531 __print_symbolic(__entry->dqtype, XFS_DQTYPE_STRINGS),
532 __entry->id,
533 __entry->ret_ip)
534);
535#endif /* CONFIG_XFS_QUOTA */
536
537TRACE_EVENT(xchk_incomplete,
538 TP_PROTO(struct xfs_scrub *sc, void *ret_ip),
539 TP_ARGS(sc, ret_ip),
540 TP_STRUCT__entry(
541 __field(dev_t, dev)
542 __field(unsigned int, type)
543 __field(void *, ret_ip)
544 ),
545 TP_fast_assign(
546 __entry->dev = sc->mp->m_super->s_dev;
547 __entry->type = sc->sm->sm_type;
548 __entry->ret_ip = ret_ip;
549 ),
550 TP_printk("dev %d:%d type %s ret_ip %pS",
551 MAJOR(__entry->dev), MINOR(__entry->dev),
552 __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),
553 __entry->ret_ip)
554);
555
556TRACE_EVENT(xchk_btree_op_error,
557 TP_PROTO(struct xfs_scrub *sc, struct xfs_btree_cur *cur,
558 int level, int error, void *ret_ip),
559 TP_ARGS(sc, cur, level, error, ret_ip),
560 TP_STRUCT__entry(
561 __field(dev_t, dev)
562 __field(unsigned int, type)
563 __string(name, cur->bc_ops->name)
564 __field(int, level)
565 __field(xfs_agnumber_t, agno)
566 __field(xfs_agblock_t, bno)
567 __field(int, ptr)
568 __field(int, error)
569 __field(void *, ret_ip)
570 ),
571 TP_fast_assign(
572 xfs_fsblock_t fsbno = xchk_btree_cur_fsbno(cur, level);
573
574 __entry->dev = sc->mp->m_super->s_dev;
575 __entry->type = sc->sm->sm_type;
576 __assign_str(name);
577 __entry->level = level;
578 __entry->agno = XFS_FSB_TO_AGNO(cur->bc_mp, fsbno);
579 __entry->bno = XFS_FSB_TO_AGBNO(cur->bc_mp, fsbno);
580 __entry->ptr = cur->bc_levels[level].ptr;
581 __entry->error = error;
582 __entry->ret_ip = ret_ip;
583 ),
584 TP_printk("dev %d:%d type %s %sbt level %d ptr %d agno 0x%x agbno 0x%x error %d ret_ip %pS",
585 MAJOR(__entry->dev), MINOR(__entry->dev),
586 __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),
587 __get_str(name),
588 __entry->level,
589 __entry->ptr,
590 __entry->agno,
591 __entry->bno,
592 __entry->error,
593 __entry->ret_ip)
594);
595
596TRACE_EVENT(xchk_ifork_btree_op_error,
597 TP_PROTO(struct xfs_scrub *sc, struct xfs_btree_cur *cur,
598 int level, int error, void *ret_ip),
599 TP_ARGS(sc, cur, level, error, ret_ip),
600 TP_STRUCT__entry(
601 __field(dev_t, dev)
602 __field(xfs_ino_t, ino)
603 __field(int, whichfork)
604 __field(unsigned int, type)
605 __string(name, cur->bc_ops->name)
606 __field(int, level)
607 __field(int, ptr)
608 __field(xfs_agnumber_t, agno)
609 __field(xfs_agblock_t, bno)
610 __field(int, error)
611 __field(void *, ret_ip)
612 ),
613 TP_fast_assign(
614 xfs_fsblock_t fsbno = xchk_btree_cur_fsbno(cur, level);
615 __entry->dev = sc->mp->m_super->s_dev;
616 __entry->ino = cur->bc_ino.ip->i_ino;
617 __entry->whichfork = cur->bc_ino.whichfork;
618 __entry->type = sc->sm->sm_type;
619 __assign_str(name);
620 __entry->level = level;
621 __entry->ptr = cur->bc_levels[level].ptr;
622 __entry->agno = XFS_FSB_TO_AGNO(cur->bc_mp, fsbno);
623 __entry->bno = XFS_FSB_TO_AGBNO(cur->bc_mp, fsbno);
624 __entry->error = error;
625 __entry->ret_ip = ret_ip;
626 ),
627 TP_printk("dev %d:%d ino 0x%llx fork %s type %s %sbt level %d ptr %d agno 0x%x agbno 0x%x error %d ret_ip %pS",
628 MAJOR(__entry->dev), MINOR(__entry->dev),
629 __entry->ino,
630 __print_symbolic(__entry->whichfork, XFS_WHICHFORK_STRINGS),
631 __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),
632 __get_str(name),
633 __entry->level,
634 __entry->ptr,
635 __entry->agno,
636 __entry->bno,
637 __entry->error,
638 __entry->ret_ip)
639);
640
641TRACE_EVENT(xchk_btree_error,
642 TP_PROTO(struct xfs_scrub *sc, struct xfs_btree_cur *cur,
643 int level, void *ret_ip),
644 TP_ARGS(sc, cur, level, ret_ip),
645 TP_STRUCT__entry(
646 __field(dev_t, dev)
647 __field(unsigned int, type)
648 __string(name, cur->bc_ops->name)
649 __field(int, level)
650 __field(xfs_agnumber_t, agno)
651 __field(xfs_agblock_t, bno)
652 __field(int, ptr)
653 __field(void *, ret_ip)
654 ),
655 TP_fast_assign(
656 xfs_fsblock_t fsbno = xchk_btree_cur_fsbno(cur, level);
657 __entry->dev = sc->mp->m_super->s_dev;
658 __entry->type = sc->sm->sm_type;
659 __assign_str(name);
660 __entry->level = level;
661 __entry->agno = XFS_FSB_TO_AGNO(cur->bc_mp, fsbno);
662 __entry->bno = XFS_FSB_TO_AGBNO(cur->bc_mp, fsbno);
663 __entry->ptr = cur->bc_levels[level].ptr;
664 __entry->ret_ip = ret_ip;
665 ),
666 TP_printk("dev %d:%d type %s %sbt level %d ptr %d agno 0x%x agbno 0x%x ret_ip %pS",
667 MAJOR(__entry->dev), MINOR(__entry->dev),
668 __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),
669 __get_str(name),
670 __entry->level,
671 __entry->ptr,
672 __entry->agno,
673 __entry->bno,
674 __entry->ret_ip)
675);
676
677TRACE_EVENT(xchk_ifork_btree_error,
678 TP_PROTO(struct xfs_scrub *sc, struct xfs_btree_cur *cur,
679 int level, void *ret_ip),
680 TP_ARGS(sc, cur, level, ret_ip),
681 TP_STRUCT__entry(
682 __field(dev_t, dev)
683 __field(xfs_ino_t, ino)
684 __field(int, whichfork)
685 __field(unsigned int, type)
686 __string(name, cur->bc_ops->name)
687 __field(int, level)
688 __field(xfs_agnumber_t, agno)
689 __field(xfs_agblock_t, bno)
690 __field(int, ptr)
691 __field(void *, ret_ip)
692 ),
693 TP_fast_assign(
694 xfs_fsblock_t fsbno = xchk_btree_cur_fsbno(cur, level);
695 __entry->dev = sc->mp->m_super->s_dev;
696 __entry->ino = sc->ip->i_ino;
697 __entry->whichfork = cur->bc_ino.whichfork;
698 __entry->type = sc->sm->sm_type;
699 __assign_str(name);
700 __entry->level = level;
701 __entry->agno = XFS_FSB_TO_AGNO(cur->bc_mp, fsbno);
702 __entry->bno = XFS_FSB_TO_AGBNO(cur->bc_mp, fsbno);
703 __entry->ptr = cur->bc_levels[level].ptr;
704 __entry->ret_ip = ret_ip;
705 ),
706 TP_printk("dev %d:%d ino 0x%llx fork %s type %s %sbt level %d ptr %d agno 0x%x agbno 0x%x ret_ip %pS",
707 MAJOR(__entry->dev), MINOR(__entry->dev),
708 __entry->ino,
709 __print_symbolic(__entry->whichfork, XFS_WHICHFORK_STRINGS),
710 __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),
711 __get_str(name),
712 __entry->level,
713 __entry->ptr,
714 __entry->agno,
715 __entry->bno,
716 __entry->ret_ip)
717);
718
719DECLARE_EVENT_CLASS(xchk_sbtree_class,
720 TP_PROTO(struct xfs_scrub *sc, struct xfs_btree_cur *cur,
721 int level),
722 TP_ARGS(sc, cur, level),
723 TP_STRUCT__entry(
724 __field(dev_t, dev)
725 __field(int, type)
726 __string(name, cur->bc_ops->name)
727 __field(xfs_agnumber_t, agno)
728 __field(xfs_agblock_t, bno)
729 __field(int, level)
730 __field(int, nlevels)
731 __field(int, ptr)
732 ),
733 TP_fast_assign(
734 xfs_fsblock_t fsbno = xchk_btree_cur_fsbno(cur, level);
735
736 __entry->dev = sc->mp->m_super->s_dev;
737 __entry->type = sc->sm->sm_type;
738 __assign_str(name);
739 __entry->agno = XFS_FSB_TO_AGNO(cur->bc_mp, fsbno);
740 __entry->bno = XFS_FSB_TO_AGBNO(cur->bc_mp, fsbno);
741 __entry->level = level;
742 __entry->nlevels = cur->bc_nlevels;
743 __entry->ptr = cur->bc_levels[level].ptr;
744 ),
745 TP_printk("dev %d:%d type %s %sbt agno 0x%x agbno 0x%x level %d nlevels %d ptr %d",
746 MAJOR(__entry->dev), MINOR(__entry->dev),
747 __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),
748 __get_str(name),
749 __entry->agno,
750 __entry->bno,
751 __entry->level,
752 __entry->nlevels,
753 __entry->ptr)
754)
755#define DEFINE_SCRUB_SBTREE_EVENT(name) \
756DEFINE_EVENT(xchk_sbtree_class, name, \
757 TP_PROTO(struct xfs_scrub *sc, struct xfs_btree_cur *cur, \
758 int level), \
759 TP_ARGS(sc, cur, level))
760
761DEFINE_SCRUB_SBTREE_EVENT(xchk_btree_rec);
762DEFINE_SCRUB_SBTREE_EVENT(xchk_btree_key);
763
764TRACE_EVENT(xchk_xref_error,
765 TP_PROTO(struct xfs_scrub *sc, int error, void *ret_ip),
766 TP_ARGS(sc, error, ret_ip),
767 TP_STRUCT__entry(
768 __field(dev_t, dev)
769 __field(int, type)
770 __field(int, error)
771 __field(void *, ret_ip)
772 ),
773 TP_fast_assign(
774 __entry->dev = sc->mp->m_super->s_dev;
775 __entry->type = sc->sm->sm_type;
776 __entry->error = error;
777 __entry->ret_ip = ret_ip;
778 ),
779 TP_printk("dev %d:%d type %s xref error %d ret_ip %pS",
780 MAJOR(__entry->dev), MINOR(__entry->dev),
781 __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),
782 __entry->error,
783 __entry->ret_ip)
784);
785
786TRACE_EVENT(xchk_iallocbt_check_cluster,
787 TP_PROTO(const struct xfs_perag *pag, xfs_agino_t startino,
788 xfs_daddr_t map_daddr, unsigned short map_len,
789 unsigned int chunk_ino, unsigned int nr_inodes,
790 uint16_t cluster_mask, uint16_t holemask,
791 unsigned int cluster_ino),
792 TP_ARGS(pag, startino, map_daddr, map_len, chunk_ino, nr_inodes,
793 cluster_mask, holemask, cluster_ino),
794 TP_STRUCT__entry(
795 __field(dev_t, dev)
796 __field(xfs_agnumber_t, agno)
797 __field(xfs_agino_t, startino)
798 __field(xfs_daddr_t, map_daddr)
799 __field(unsigned short, map_len)
800 __field(unsigned int, chunk_ino)
801 __field(unsigned int, nr_inodes)
802 __field(unsigned int, cluster_ino)
803 __field(uint16_t, cluster_mask)
804 __field(uint16_t, holemask)
805 ),
806 TP_fast_assign(
807 __entry->dev = pag_mount(pag)->m_super->s_dev;
808 __entry->agno = pag_agno(pag);
809 __entry->startino = startino;
810 __entry->map_daddr = map_daddr;
811 __entry->map_len = map_len;
812 __entry->chunk_ino = chunk_ino;
813 __entry->nr_inodes = nr_inodes;
814 __entry->cluster_mask = cluster_mask;
815 __entry->holemask = holemask;
816 __entry->cluster_ino = cluster_ino;
817 ),
818 TP_printk("dev %d:%d agno 0x%x startino 0x%x daddr 0x%llx bbcount 0x%x chunkino 0x%x nr_inodes %u cluster_mask 0x%x holemask 0x%x cluster_ino 0x%x",
819 MAJOR(__entry->dev), MINOR(__entry->dev),
820 __entry->agno,
821 __entry->startino,
822 __entry->map_daddr,
823 __entry->map_len,
824 __entry->chunk_ino,
825 __entry->nr_inodes,
826 __entry->cluster_mask,
827 __entry->holemask,
828 __entry->cluster_ino)
829)
830
831TRACE_EVENT(xchk_inode_is_allocated,
832 TP_PROTO(struct xfs_inode *ip),
833 TP_ARGS(ip),
834 TP_STRUCT__entry(
835 __field(dev_t, dev)
836 __field(xfs_ino_t, ino)
837 __field(unsigned long, iflags)
838 __field(umode_t, mode)
839 ),
840 TP_fast_assign(
841 __entry->dev = VFS_I(ip)->i_sb->s_dev;
842 __entry->ino = ip->i_ino;
843 __entry->iflags = ip->i_flags;
844 __entry->mode = VFS_I(ip)->i_mode;
845 ),
846 TP_printk("dev %d:%d ino 0x%llx iflags 0x%lx mode 0x%x",
847 MAJOR(__entry->dev), MINOR(__entry->dev),
848 __entry->ino,
849 __entry->iflags,
850 __entry->mode)
851);
852
853TRACE_EVENT(xchk_fscounters_calc,
854 TP_PROTO(struct xfs_mount *mp, uint64_t icount, uint64_t ifree,
855 uint64_t fdblocks, uint64_t delalloc),
856 TP_ARGS(mp, icount, ifree, fdblocks, delalloc),
857 TP_STRUCT__entry(
858 __field(dev_t, dev)
859 __field(int64_t, icount_sb)
860 __field(uint64_t, icount_calculated)
861 __field(int64_t, ifree_sb)
862 __field(uint64_t, ifree_calculated)
863 __field(int64_t, fdblocks_sb)
864 __field(uint64_t, fdblocks_calculated)
865 __field(uint64_t, delalloc)
866 ),
867 TP_fast_assign(
868 __entry->dev = mp->m_super->s_dev;
869 __entry->icount_sb = mp->m_sb.sb_icount;
870 __entry->icount_calculated = icount;
871 __entry->ifree_sb = mp->m_sb.sb_ifree;
872 __entry->ifree_calculated = ifree;
873 __entry->fdblocks_sb = mp->m_sb.sb_fdblocks;
874 __entry->fdblocks_calculated = fdblocks;
875 __entry->delalloc = delalloc;
876 ),
877 TP_printk("dev %d:%d icount %lld:%llu ifree %lld::%llu fdblocks %lld::%llu delalloc %llu",
878 MAJOR(__entry->dev), MINOR(__entry->dev),
879 __entry->icount_sb,
880 __entry->icount_calculated,
881 __entry->ifree_sb,
882 __entry->ifree_calculated,
883 __entry->fdblocks_sb,
884 __entry->fdblocks_calculated,
885 __entry->delalloc)
886)
887
888TRACE_EVENT(xchk_fscounters_within_range,
889 TP_PROTO(struct xfs_mount *mp, uint64_t expected, int64_t curr_value,
890 int64_t old_value),
891 TP_ARGS(mp, expected, curr_value, old_value),
892 TP_STRUCT__entry(
893 __field(dev_t, dev)
894 __field(uint64_t, expected)
895 __field(int64_t, curr_value)
896 __field(int64_t, old_value)
897 ),
898 TP_fast_assign(
899 __entry->dev = mp->m_super->s_dev;
900 __entry->expected = expected;
901 __entry->curr_value = curr_value;
902 __entry->old_value = old_value;
903 ),
904 TP_printk("dev %d:%d expected %llu curr_value %lld old_value %lld",
905 MAJOR(__entry->dev), MINOR(__entry->dev),
906 __entry->expected,
907 __entry->curr_value,
908 __entry->old_value)
909)
910
911DECLARE_EVENT_CLASS(xchk_fsfreeze_class,
912 TP_PROTO(struct xfs_scrub *sc, int error),
913 TP_ARGS(sc, error),
914 TP_STRUCT__entry(
915 __field(dev_t, dev)
916 __field(unsigned int, type)
917 __field(int, error)
918 ),
919 TP_fast_assign(
920 __entry->dev = sc->mp->m_super->s_dev;
921 __entry->type = sc->sm->sm_type;
922 __entry->error = error;
923 ),
924 TP_printk("dev %d:%d type %s error %d",
925 MAJOR(__entry->dev), MINOR(__entry->dev),
926 __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),
927 __entry->error)
928);
929#define DEFINE_XCHK_FSFREEZE_EVENT(name) \
930DEFINE_EVENT(xchk_fsfreeze_class, name, \
931 TP_PROTO(struct xfs_scrub *sc, int error), \
932 TP_ARGS(sc, error))
933DEFINE_XCHK_FSFREEZE_EVENT(xchk_fsfreeze);
934DEFINE_XCHK_FSFREEZE_EVENT(xchk_fsthaw);
935
936TRACE_EVENT(xchk_refcount_incorrect,
937 TP_PROTO(const struct xfs_perag *pag,
938 const struct xfs_refcount_irec *irec,
939 xfs_nlink_t seen),
940 TP_ARGS(pag, irec, seen),
941 TP_STRUCT__entry(
942 __field(dev_t, dev)
943 __field(xfs_agnumber_t, agno)
944 __field(enum xfs_refc_domain, domain)
945 __field(xfs_agblock_t, startblock)
946 __field(xfs_extlen_t, blockcount)
947 __field(xfs_nlink_t, refcount)
948 __field(xfs_nlink_t, seen)
949 ),
950 TP_fast_assign(
951 __entry->dev = pag_mount(pag)->m_super->s_dev;
952 __entry->agno = pag_agno(pag);
953 __entry->domain = irec->rc_domain;
954 __entry->startblock = irec->rc_startblock;
955 __entry->blockcount = irec->rc_blockcount;
956 __entry->refcount = irec->rc_refcount;
957 __entry->seen = seen;
958 ),
959 TP_printk("dev %d:%d agno 0x%x dom %s agbno 0x%x fsbcount 0x%x refcount %u seen %u",
960 MAJOR(__entry->dev), MINOR(__entry->dev),
961 __entry->agno,
962 __print_symbolic(__entry->domain, XFS_REFC_DOMAIN_STRINGS),
963 __entry->startblock,
964 __entry->blockcount,
965 __entry->refcount,
966 __entry->seen)
967)
968
969TRACE_EVENT(xfile_create,
970 TP_PROTO(struct xfile *xf),
971 TP_ARGS(xf),
972 TP_STRUCT__entry(
973 __field(dev_t, dev)
974 __field(unsigned long, ino)
975 __array(char, pathname, MAXNAMELEN)
976 ),
977 TP_fast_assign(
978 char *path;
979
980 __entry->ino = file_inode(xf->file)->i_ino;
981 path = file_path(xf->file, __entry->pathname, MAXNAMELEN);
982 if (IS_ERR(path))
983 strncpy(__entry->pathname, "(unknown)",
984 sizeof(__entry->pathname));
985 ),
986 TP_printk("xfino 0x%lx path '%s'",
987 __entry->ino,
988 __entry->pathname)
989);
990
991TRACE_EVENT(xfile_destroy,
992 TP_PROTO(struct xfile *xf),
993 TP_ARGS(xf),
994 TP_STRUCT__entry(
995 __field(unsigned long, ino)
996 __field(unsigned long long, bytes)
997 __field(loff_t, size)
998 ),
999 TP_fast_assign(
1000 struct inode *inode = file_inode(xf->file);
1001
1002 __entry->ino = inode->i_ino;
1003 __entry->bytes = inode->i_blocks << SECTOR_SHIFT;
1004 __entry->size = i_size_read(inode);
1005 ),
1006 TP_printk("xfino 0x%lx mem_bytes 0x%llx isize 0x%llx",
1007 __entry->ino,
1008 __entry->bytes,
1009 __entry->size)
1010);
1011
1012DECLARE_EVENT_CLASS(xfile_class,
1013 TP_PROTO(struct xfile *xf, loff_t pos, unsigned long long bytecount),
1014 TP_ARGS(xf, pos, bytecount),
1015 TP_STRUCT__entry(
1016 __field(unsigned long, ino)
1017 __field(unsigned long long, bytes_used)
1018 __field(loff_t, pos)
1019 __field(loff_t, size)
1020 __field(unsigned long long, bytecount)
1021 ),
1022 TP_fast_assign(
1023 struct inode *inode = file_inode(xf->file);
1024
1025 __entry->ino = inode->i_ino;
1026 __entry->bytes_used = inode->i_blocks << SECTOR_SHIFT;
1027 __entry->pos = pos;
1028 __entry->size = i_size_read(inode);
1029 __entry->bytecount = bytecount;
1030 ),
1031 TP_printk("xfino 0x%lx mem_bytes 0x%llx pos 0x%llx bytecount 0x%llx isize 0x%llx",
1032 __entry->ino,
1033 __entry->bytes_used,
1034 __entry->pos,
1035 __entry->bytecount,
1036 __entry->size)
1037);
1038#define DEFINE_XFILE_EVENT(name) \
1039DEFINE_EVENT(xfile_class, name, \
1040 TP_PROTO(struct xfile *xf, loff_t pos, unsigned long long bytecount), \
1041 TP_ARGS(xf, pos, bytecount))
1042DEFINE_XFILE_EVENT(xfile_load);
1043DEFINE_XFILE_EVENT(xfile_store);
1044DEFINE_XFILE_EVENT(xfile_seek_data);
1045DEFINE_XFILE_EVENT(xfile_get_folio);
1046DEFINE_XFILE_EVENT(xfile_put_folio);
1047DEFINE_XFILE_EVENT(xfile_discard);
1048
1049TRACE_EVENT(xfarray_create,
1050 TP_PROTO(struct xfarray *xfa, unsigned long long required_capacity),
1051 TP_ARGS(xfa, required_capacity),
1052 TP_STRUCT__entry(
1053 __field(unsigned long, ino)
1054 __field(uint64_t, max_nr)
1055 __field(size_t, obj_size)
1056 __field(int, obj_size_log)
1057 __field(unsigned long long, required_capacity)
1058 ),
1059 TP_fast_assign(
1060 __entry->max_nr = xfa->max_nr;
1061 __entry->obj_size = xfa->obj_size;
1062 __entry->obj_size_log = xfa->obj_size_log;
1063 __entry->ino = file_inode(xfa->xfile->file)->i_ino;
1064 __entry->required_capacity = required_capacity;
1065 ),
1066 TP_printk("xfino 0x%lx max_nr %llu reqd_nr %llu objsz %zu objszlog %d",
1067 __entry->ino,
1068 __entry->max_nr,
1069 __entry->required_capacity,
1070 __entry->obj_size,
1071 __entry->obj_size_log)
1072);
1073
1074TRACE_EVENT(xfarray_isort,
1075 TP_PROTO(struct xfarray_sortinfo *si, uint64_t lo, uint64_t hi),
1076 TP_ARGS(si, lo, hi),
1077 TP_STRUCT__entry(
1078 __field(unsigned long, ino)
1079 __field(unsigned long long, lo)
1080 __field(unsigned long long, hi)
1081 ),
1082 TP_fast_assign(
1083 __entry->ino = file_inode(si->array->xfile->file)->i_ino;
1084 __entry->lo = lo;
1085 __entry->hi = hi;
1086 ),
1087 TP_printk("xfino 0x%lx lo %llu hi %llu elts %llu",
1088 __entry->ino,
1089 __entry->lo,
1090 __entry->hi,
1091 __entry->hi - __entry->lo)
1092);
1093
1094TRACE_EVENT(xfarray_foliosort,
1095 TP_PROTO(struct xfarray_sortinfo *si, uint64_t lo, uint64_t hi),
1096 TP_ARGS(si, lo, hi),
1097 TP_STRUCT__entry(
1098 __field(unsigned long, ino)
1099 __field(unsigned long long, lo)
1100 __field(unsigned long long, hi)
1101 ),
1102 TP_fast_assign(
1103 __entry->ino = file_inode(si->array->xfile->file)->i_ino;
1104 __entry->lo = lo;
1105 __entry->hi = hi;
1106 ),
1107 TP_printk("xfino 0x%lx lo %llu hi %llu elts %llu",
1108 __entry->ino,
1109 __entry->lo,
1110 __entry->hi,
1111 __entry->hi - __entry->lo)
1112);
1113
1114TRACE_EVENT(xfarray_qsort,
1115 TP_PROTO(struct xfarray_sortinfo *si, uint64_t lo, uint64_t hi),
1116 TP_ARGS(si, lo, hi),
1117 TP_STRUCT__entry(
1118 __field(unsigned long, ino)
1119 __field(unsigned long long, lo)
1120 __field(unsigned long long, hi)
1121 __field(int, stack_depth)
1122 __field(int, max_stack_depth)
1123 ),
1124 TP_fast_assign(
1125 __entry->ino = file_inode(si->array->xfile->file)->i_ino;
1126 __entry->lo = lo;
1127 __entry->hi = hi;
1128 __entry->stack_depth = si->stack_depth;
1129 __entry->max_stack_depth = si->max_stack_depth;
1130 ),
1131 TP_printk("xfino 0x%lx lo %llu hi %llu elts %llu stack %d/%d",
1132 __entry->ino,
1133 __entry->lo,
1134 __entry->hi,
1135 __entry->hi - __entry->lo,
1136 __entry->stack_depth,
1137 __entry->max_stack_depth)
1138);
1139
1140TRACE_EVENT(xfarray_sort,
1141 TP_PROTO(struct xfarray_sortinfo *si, size_t bytes),
1142 TP_ARGS(si, bytes),
1143 TP_STRUCT__entry(
1144 __field(unsigned long, ino)
1145 __field(unsigned long long, nr)
1146 __field(size_t, obj_size)
1147 __field(size_t, bytes)
1148 __field(unsigned int, max_stack_depth)
1149 ),
1150 TP_fast_assign(
1151 __entry->nr = si->array->nr;
1152 __entry->obj_size = si->array->obj_size;
1153 __entry->ino = file_inode(si->array->xfile->file)->i_ino;
1154 __entry->bytes = bytes;
1155 __entry->max_stack_depth = si->max_stack_depth;
1156 ),
1157 TP_printk("xfino 0x%lx nr %llu objsz %zu stack %u bytes %zu",
1158 __entry->ino,
1159 __entry->nr,
1160 __entry->obj_size,
1161 __entry->max_stack_depth,
1162 __entry->bytes)
1163);
1164
1165TRACE_EVENT(xfarray_sort_scan,
1166 TP_PROTO(struct xfarray_sortinfo *si, unsigned long long idx),
1167 TP_ARGS(si, idx),
1168 TP_STRUCT__entry(
1169 __field(unsigned long, ino)
1170 __field(unsigned long long, nr)
1171 __field(size_t, obj_size)
1172 __field(unsigned long long, idx)
1173 __field(unsigned long long, folio_pos)
1174 __field(unsigned long, folio_bytes)
1175 __field(unsigned long long, first_idx)
1176 __field(unsigned long long, last_idx)
1177 ),
1178 TP_fast_assign(
1179 __entry->nr = si->array->nr;
1180 __entry->obj_size = si->array->obj_size;
1181 __entry->ino = file_inode(si->array->xfile->file)->i_ino;
1182 __entry->idx = idx;
1183 if (si->folio) {
1184 __entry->folio_pos = folio_pos(si->folio);
1185 __entry->folio_bytes = folio_size(si->folio);
1186 __entry->first_idx = si->first_folio_idx;
1187 __entry->last_idx = si->last_folio_idx;
1188 } else {
1189 __entry->folio_pos = 0;
1190 __entry->folio_bytes = 0;
1191 __entry->first_idx = 0;
1192 __entry->last_idx = 0;
1193 }
1194 ),
1195 TP_printk("xfino 0x%lx nr %llu objsz %zu idx %llu folio_pos 0x%llx folio_bytes 0x%lx first_idx %llu last_idx %llu",
1196 __entry->ino,
1197 __entry->nr,
1198 __entry->obj_size,
1199 __entry->idx,
1200 __entry->folio_pos,
1201 __entry->folio_bytes,
1202 __entry->first_idx,
1203 __entry->last_idx)
1204);
1205
1206TRACE_EVENT(xfarray_sort_stats,
1207 TP_PROTO(struct xfarray_sortinfo *si, int error),
1208 TP_ARGS(si, error),
1209 TP_STRUCT__entry(
1210 __field(unsigned long, ino)
1211#ifdef DEBUG
1212 __field(unsigned long long, loads)
1213 __field(unsigned long long, stores)
1214 __field(unsigned long long, compares)
1215 __field(unsigned long long, heapsorts)
1216#endif
1217 __field(unsigned int, max_stack_depth)
1218 __field(unsigned int, max_stack_used)
1219 __field(int, error)
1220 ),
1221 TP_fast_assign(
1222 __entry->ino = file_inode(si->array->xfile->file)->i_ino;
1223#ifdef DEBUG
1224 __entry->loads = si->loads;
1225 __entry->stores = si->stores;
1226 __entry->compares = si->compares;
1227 __entry->heapsorts = si->heapsorts;
1228#endif
1229 __entry->max_stack_depth = si->max_stack_depth;
1230 __entry->max_stack_used = si->max_stack_used;
1231 __entry->error = error;
1232 ),
1233 TP_printk(
1234#ifdef DEBUG
1235 "xfino 0x%lx loads %llu stores %llu compares %llu heapsorts %llu stack_depth %u/%u error %d",
1236#else
1237 "xfino 0x%lx stack_depth %u/%u error %d",
1238#endif
1239 __entry->ino,
1240#ifdef DEBUG
1241 __entry->loads,
1242 __entry->stores,
1243 __entry->compares,
1244 __entry->heapsorts,
1245#endif
1246 __entry->max_stack_used,
1247 __entry->max_stack_depth,
1248 __entry->error)
1249);
1250
1251#ifdef CONFIG_XFS_RT
1252TRACE_EVENT(xchk_rtsum_record_free,
1253 TP_PROTO(struct xfs_mount *mp, xfs_rtxnum_t start,
1254 xfs_rtbxlen_t len, unsigned int log, loff_t pos,
1255 xfs_suminfo_t value),
1256 TP_ARGS(mp, start, len, log, pos, value),
1257 TP_STRUCT__entry(
1258 __field(dev_t, dev)
1259 __field(dev_t, rtdev)
1260 __field(xfs_rtxnum_t, start)
1261 __field(unsigned long long, len)
1262 __field(unsigned int, log)
1263 __field(loff_t, pos)
1264 __field(xfs_suminfo_t, value)
1265 ),
1266 TP_fast_assign(
1267 __entry->dev = mp->m_super->s_dev;
1268 __entry->rtdev = mp->m_rtdev_targp->bt_dev;
1269 __entry->start = start;
1270 __entry->len = len;
1271 __entry->log = log;
1272 __entry->pos = pos;
1273 __entry->value = value;
1274 ),
1275 TP_printk("dev %d:%d rtdev %d:%d rtx 0x%llx rtxcount 0x%llx log %u rsumpos 0x%llx sumcount %u",
1276 MAJOR(__entry->dev), MINOR(__entry->dev),
1277 MAJOR(__entry->rtdev), MINOR(__entry->rtdev),
1278 __entry->start,
1279 __entry->len,
1280 __entry->log,
1281 __entry->pos,
1282 __entry->value)
1283);
1284#endif /* CONFIG_XFS_RT */
1285
1286DECLARE_EVENT_CLASS(xchk_iscan_class,
1287 TP_PROTO(struct xchk_iscan *iscan),
1288 TP_ARGS(iscan),
1289 TP_STRUCT__entry(
1290 __field(dev_t, dev)
1291 __field(xfs_ino_t, cursor)
1292 __field(xfs_ino_t, visited)
1293 ),
1294 TP_fast_assign(
1295 __entry->dev = iscan->sc->mp->m_super->s_dev;
1296 __entry->cursor = iscan->cursor_ino;
1297 __entry->visited = iscan->__visited_ino;
1298 ),
1299 TP_printk("dev %d:%d iscan cursor 0x%llx visited 0x%llx",
1300 MAJOR(__entry->dev), MINOR(__entry->dev),
1301 __entry->cursor,
1302 __entry->visited)
1303)
1304#define DEFINE_ISCAN_EVENT(name) \
1305DEFINE_EVENT(xchk_iscan_class, name, \
1306 TP_PROTO(struct xchk_iscan *iscan), \
1307 TP_ARGS(iscan))
1308DEFINE_ISCAN_EVENT(xchk_iscan_move_cursor);
1309DEFINE_ISCAN_EVENT(xchk_iscan_visit);
1310DEFINE_ISCAN_EVENT(xchk_iscan_skip);
1311DEFINE_ISCAN_EVENT(xchk_iscan_advance_ag);
1312
1313DECLARE_EVENT_CLASS(xchk_iscan_ino_class,
1314 TP_PROTO(struct xchk_iscan *iscan, xfs_ino_t ino),
1315 TP_ARGS(iscan, ino),
1316 TP_STRUCT__entry(
1317 __field(dev_t, dev)
1318 __field(xfs_ino_t, startino)
1319 __field(xfs_ino_t, cursor)
1320 __field(xfs_ino_t, visited)
1321 __field(xfs_ino_t, ino)
1322 ),
1323 TP_fast_assign(
1324 __entry->dev = iscan->sc->mp->m_super->s_dev;
1325 __entry->startino = iscan->scan_start_ino;
1326 __entry->cursor = iscan->cursor_ino;
1327 __entry->visited = iscan->__visited_ino;
1328 __entry->ino = ino;
1329 ),
1330 TP_printk("dev %d:%d iscan start 0x%llx cursor 0x%llx visited 0x%llx ino 0x%llx",
1331 MAJOR(__entry->dev), MINOR(__entry->dev),
1332 __entry->startino,
1333 __entry->cursor,
1334 __entry->visited,
1335 __entry->ino)
1336)
1337#define DEFINE_ISCAN_INO_EVENT(name) \
1338DEFINE_EVENT(xchk_iscan_ino_class, name, \
1339 TP_PROTO(struct xchk_iscan *iscan, xfs_ino_t ino), \
1340 TP_ARGS(iscan, ino))
1341DEFINE_ISCAN_INO_EVENT(xchk_iscan_want_live_update);
1342DEFINE_ISCAN_INO_EVENT(xchk_iscan_start);
1343
1344TRACE_EVENT(xchk_iscan_iget,
1345 TP_PROTO(struct xchk_iscan *iscan, int error),
1346 TP_ARGS(iscan, error),
1347 TP_STRUCT__entry(
1348 __field(dev_t, dev)
1349 __field(xfs_ino_t, cursor)
1350 __field(xfs_ino_t, visited)
1351 __field(int, error)
1352 ),
1353 TP_fast_assign(
1354 __entry->dev = iscan->sc->mp->m_super->s_dev;
1355 __entry->cursor = iscan->cursor_ino;
1356 __entry->visited = iscan->__visited_ino;
1357 __entry->error = error;
1358 ),
1359 TP_printk("dev %d:%d iscan cursor 0x%llx visited 0x%llx error %d",
1360 MAJOR(__entry->dev), MINOR(__entry->dev),
1361 __entry->cursor,
1362 __entry->visited,
1363 __entry->error)
1364);
1365
1366TRACE_EVENT(xchk_iscan_iget_batch,
1367 TP_PROTO(struct xfs_mount *mp, struct xchk_iscan *iscan,
1368 unsigned int nr, unsigned int avail),
1369 TP_ARGS(mp, iscan, nr, avail),
1370 TP_STRUCT__entry(
1371 __field(dev_t, dev)
1372 __field(xfs_ino_t, cursor)
1373 __field(xfs_ino_t, visited)
1374 __field(unsigned int, nr)
1375 __field(unsigned int, avail)
1376 __field(unsigned int, unavail)
1377 __field(xfs_ino_t, batch_ino)
1378 __field(unsigned long long, skipmask)
1379 ),
1380 TP_fast_assign(
1381 __entry->dev = mp->m_super->s_dev;
1382 __entry->cursor = iscan->cursor_ino;
1383 __entry->visited = iscan->__visited_ino;
1384 __entry->nr = nr;
1385 __entry->avail = avail;
1386 __entry->unavail = hweight64(iscan->__skipped_inomask);
1387 __entry->batch_ino = iscan->__batch_ino;
1388 __entry->skipmask = iscan->__skipped_inomask;
1389 ),
1390 TP_printk("dev %d:%d iscan cursor 0x%llx visited 0x%llx batchino 0x%llx skipmask 0x%llx nr %u avail %u unavail %u",
1391 MAJOR(__entry->dev), MINOR(__entry->dev),
1392 __entry->cursor,
1393 __entry->visited,
1394 __entry->batch_ino,
1395 __entry->skipmask,
1396 __entry->nr,
1397 __entry->avail,
1398 __entry->unavail)
1399);
1400
1401DECLARE_EVENT_CLASS(xchk_iscan_retry_wait_class,
1402 TP_PROTO(struct xchk_iscan *iscan),
1403 TP_ARGS(iscan),
1404 TP_STRUCT__entry(
1405 __field(dev_t, dev)
1406 __field(xfs_ino_t, cursor)
1407 __field(xfs_ino_t, visited)
1408 __field(unsigned int, retry_delay)
1409 __field(unsigned long, remaining)
1410 __field(unsigned int, iget_timeout)
1411 ),
1412 TP_fast_assign(
1413 __entry->dev = iscan->sc->mp->m_super->s_dev;
1414 __entry->cursor = iscan->cursor_ino;
1415 __entry->visited = iscan->__visited_ino;
1416 __entry->retry_delay = iscan->iget_retry_delay;
1417 __entry->remaining = jiffies_to_msecs(iscan->__iget_deadline - jiffies);
1418 __entry->iget_timeout = iscan->iget_timeout;
1419 ),
1420 TP_printk("dev %d:%d iscan cursor 0x%llx visited 0x%llx remaining %lu timeout %u delay %u",
1421 MAJOR(__entry->dev), MINOR(__entry->dev),
1422 __entry->cursor,
1423 __entry->visited,
1424 __entry->remaining,
1425 __entry->iget_timeout,
1426 __entry->retry_delay)
1427)
1428#define DEFINE_ISCAN_RETRY_WAIT_EVENT(name) \
1429DEFINE_EVENT(xchk_iscan_retry_wait_class, name, \
1430 TP_PROTO(struct xchk_iscan *iscan), \
1431 TP_ARGS(iscan))
1432DEFINE_ISCAN_RETRY_WAIT_EVENT(xchk_iscan_iget_retry_wait);
1433DEFINE_ISCAN_RETRY_WAIT_EVENT(xchk_iscan_agi_retry_wait);
1434
1435TRACE_EVENT(xchk_nlinks_collect_dirent,
1436 TP_PROTO(struct xfs_mount *mp, struct xfs_inode *dp,
1437 xfs_ino_t ino, const struct xfs_name *name),
1438 TP_ARGS(mp, dp, ino, name),
1439 TP_STRUCT__entry(
1440 __field(dev_t, dev)
1441 __field(xfs_ino_t, dir)
1442 __field(xfs_ino_t, ino)
1443 __field(unsigned int, namelen)
1444 __dynamic_array(char, name, name->len)
1445 ),
1446 TP_fast_assign(
1447 __entry->dev = mp->m_super->s_dev;
1448 __entry->dir = dp->i_ino;
1449 __entry->ino = ino;
1450 __entry->namelen = name->len;
1451 memcpy(__get_str(name), name->name, name->len);
1452 ),
1453 TP_printk("dev %d:%d dir 0x%llx -> ino 0x%llx name '%.*s'",
1454 MAJOR(__entry->dev), MINOR(__entry->dev),
1455 __entry->dir,
1456 __entry->ino,
1457 __entry->namelen,
1458 __get_str(name))
1459);
1460
1461TRACE_EVENT(xchk_nlinks_collect_pptr,
1462 TP_PROTO(struct xfs_mount *mp, struct xfs_inode *dp,
1463 const struct xfs_name *name,
1464 const struct xfs_parent_rec *pptr),
1465 TP_ARGS(mp, dp, name, pptr),
1466 TP_STRUCT__entry(
1467 __field(dev_t, dev)
1468 __field(xfs_ino_t, dir)
1469 __field(xfs_ino_t, ino)
1470 __field(unsigned int, namelen)
1471 __dynamic_array(char, name, name->len)
1472 ),
1473 TP_fast_assign(
1474 __entry->dev = mp->m_super->s_dev;
1475 __entry->dir = dp->i_ino;
1476 __entry->ino = be64_to_cpu(pptr->p_ino);
1477 __entry->namelen = name->len;
1478 memcpy(__get_str(name), name->name, name->len);
1479 ),
1480 TP_printk("dev %d:%d dir 0x%llx -> ino 0x%llx name '%.*s'",
1481 MAJOR(__entry->dev), MINOR(__entry->dev),
1482 __entry->dir,
1483 __entry->ino,
1484 __entry->namelen,
1485 __get_str(name))
1486);
1487
1488TRACE_EVENT(xchk_nlinks_collect_metafile,
1489 TP_PROTO(struct xfs_mount *mp, xfs_ino_t ino),
1490 TP_ARGS(mp, ino),
1491 TP_STRUCT__entry(
1492 __field(dev_t, dev)
1493 __field(xfs_ino_t, ino)
1494 ),
1495 TP_fast_assign(
1496 __entry->dev = mp->m_super->s_dev;
1497 __entry->ino = ino;
1498 ),
1499 TP_printk("dev %d:%d ino 0x%llx",
1500 MAJOR(__entry->dev), MINOR(__entry->dev),
1501 __entry->ino)
1502);
1503
1504TRACE_EVENT(xchk_nlinks_live_update,
1505 TP_PROTO(struct xfs_mount *mp, const struct xfs_inode *dp,
1506 int action, xfs_ino_t ino, int delta,
1507 const char *name, unsigned int namelen),
1508 TP_ARGS(mp, dp, action, ino, delta, name, namelen),
1509 TP_STRUCT__entry(
1510 __field(dev_t, dev)
1511 __field(xfs_ino_t, dir)
1512 __field(int, action)
1513 __field(xfs_ino_t, ino)
1514 __field(int, delta)
1515 __field(unsigned int, namelen)
1516 __dynamic_array(char, name, namelen)
1517 ),
1518 TP_fast_assign(
1519 __entry->dev = mp->m_super->s_dev;
1520 __entry->dir = dp ? dp->i_ino : NULLFSINO;
1521 __entry->action = action;
1522 __entry->ino = ino;
1523 __entry->delta = delta;
1524 __entry->namelen = namelen;
1525 memcpy(__get_str(name), name, namelen);
1526 ),
1527 TP_printk("dev %d:%d dir 0x%llx ino 0x%llx nlink_delta %d name '%.*s'",
1528 MAJOR(__entry->dev), MINOR(__entry->dev),
1529 __entry->dir,
1530 __entry->ino,
1531 __entry->delta,
1532 __entry->namelen,
1533 __get_str(name))
1534);
1535
1536TRACE_EVENT(xchk_nlinks_check_zero,
1537 TP_PROTO(struct xfs_mount *mp, xfs_ino_t ino,
1538 const struct xchk_nlink *live),
1539 TP_ARGS(mp, ino, live),
1540 TP_STRUCT__entry(
1541 __field(dev_t, dev)
1542 __field(xfs_ino_t, ino)
1543 __field(xfs_nlink_t, parents)
1544 __field(xfs_nlink_t, backrefs)
1545 __field(xfs_nlink_t, children)
1546 ),
1547 TP_fast_assign(
1548 __entry->dev = mp->m_super->s_dev;
1549 __entry->ino = ino;
1550 __entry->parents = live->parents;
1551 __entry->backrefs = live->backrefs;
1552 __entry->children = live->children;
1553 ),
1554 TP_printk("dev %d:%d ino 0x%llx parents %u backrefs %u children %u",
1555 MAJOR(__entry->dev), MINOR(__entry->dev),
1556 __entry->ino,
1557 __entry->parents,
1558 __entry->backrefs,
1559 __entry->children)
1560);
1561
1562TRACE_EVENT(xchk_nlinks_update_incore,
1563 TP_PROTO(struct xfs_mount *mp, xfs_ino_t ino,
1564 const struct xchk_nlink *live, int parents_delta,
1565 int backrefs_delta, int children_delta),
1566 TP_ARGS(mp, ino, live, parents_delta, backrefs_delta, children_delta),
1567 TP_STRUCT__entry(
1568 __field(dev_t, dev)
1569 __field(xfs_ino_t, ino)
1570 __field(xfs_nlink_t, parents)
1571 __field(xfs_nlink_t, backrefs)
1572 __field(xfs_nlink_t, children)
1573 __field(int, parents_delta)
1574 __field(int, backrefs_delta)
1575 __field(int, children_delta)
1576 ),
1577 TP_fast_assign(
1578 __entry->dev = mp->m_super->s_dev;
1579 __entry->ino = ino;
1580 __entry->parents = live->parents;
1581 __entry->backrefs = live->backrefs;
1582 __entry->children = live->children;
1583 __entry->parents_delta = parents_delta;
1584 __entry->backrefs_delta = backrefs_delta;
1585 __entry->children_delta = children_delta;
1586 ),
1587 TP_printk("dev %d:%d ino 0x%llx parents %d:%u backrefs %d:%u children %d:%u",
1588 MAJOR(__entry->dev), MINOR(__entry->dev),
1589 __entry->ino,
1590 __entry->parents_delta,
1591 __entry->parents,
1592 __entry->backrefs_delta,
1593 __entry->backrefs,
1594 __entry->children_delta,
1595 __entry->children)
1596);
1597
1598DECLARE_EVENT_CLASS(xchk_nlinks_diff_class,
1599 TP_PROTO(struct xfs_mount *mp, struct xfs_inode *ip,
1600 const struct xchk_nlink *live),
1601 TP_ARGS(mp, ip, live),
1602 TP_STRUCT__entry(
1603 __field(dev_t, dev)
1604 __field(xfs_ino_t, ino)
1605 __field(uint8_t, ftype)
1606 __field(xfs_nlink_t, nlink)
1607 __field(xfs_nlink_t, parents)
1608 __field(xfs_nlink_t, backrefs)
1609 __field(xfs_nlink_t, children)
1610 ),
1611 TP_fast_assign(
1612 __entry->dev = mp->m_super->s_dev;
1613 __entry->ino = ip->i_ino;
1614 __entry->ftype = xfs_mode_to_ftype(VFS_I(ip)->i_mode);
1615 __entry->nlink = VFS_I(ip)->i_nlink;
1616 __entry->parents = live->parents;
1617 __entry->backrefs = live->backrefs;
1618 __entry->children = live->children;
1619 ),
1620 TP_printk("dev %d:%d ino 0x%llx ftype %s nlink %u parents %u backrefs %u children %u",
1621 MAJOR(__entry->dev), MINOR(__entry->dev),
1622 __entry->ino,
1623 __print_symbolic(__entry->ftype, XFS_DIR3_FTYPE_STR),
1624 __entry->nlink,
1625 __entry->parents,
1626 __entry->backrefs,
1627 __entry->children)
1628);
1629#define DEFINE_SCRUB_NLINKS_DIFF_EVENT(name) \
1630DEFINE_EVENT(xchk_nlinks_diff_class, name, \
1631 TP_PROTO(struct xfs_mount *mp, struct xfs_inode *ip, \
1632 const struct xchk_nlink *live), \
1633 TP_ARGS(mp, ip, live))
1634DEFINE_SCRUB_NLINKS_DIFF_EVENT(xchk_nlinks_compare_inode);
1635
1636DECLARE_EVENT_CLASS(xchk_pptr_class,
1637 TP_PROTO(struct xfs_inode *ip, const struct xfs_name *name,
1638 xfs_ino_t far_ino),
1639 TP_ARGS(ip, name, far_ino),
1640 TP_STRUCT__entry(
1641 __field(dev_t, dev)
1642 __field(xfs_ino_t, ino)
1643 __field(unsigned int, namelen)
1644 __dynamic_array(char, name, name->len)
1645 __field(xfs_ino_t, far_ino)
1646 ),
1647 TP_fast_assign(
1648 __entry->dev = ip->i_mount->m_super->s_dev;
1649 __entry->ino = ip->i_ino;
1650 __entry->namelen = name->len;
1651 memcpy(__get_str(name), name, name->len);
1652 __entry->far_ino = far_ino;
1653 ),
1654 TP_printk("dev %d:%d ino 0x%llx name '%.*s' far_ino 0x%llx",
1655 MAJOR(__entry->dev), MINOR(__entry->dev),
1656 __entry->ino,
1657 __entry->namelen,
1658 __get_str(name),
1659 __entry->far_ino)
1660)
1661#define DEFINE_XCHK_PPTR_EVENT(name) \
1662DEFINE_EVENT(xchk_pptr_class, name, \
1663 TP_PROTO(struct xfs_inode *ip, const struct xfs_name *name, \
1664 xfs_ino_t far_ino), \
1665 TP_ARGS(ip, name, far_ino))
1666DEFINE_XCHK_PPTR_EVENT(xchk_dir_defer);
1667DEFINE_XCHK_PPTR_EVENT(xchk_dir_slowpath);
1668DEFINE_XCHK_PPTR_EVENT(xchk_dir_ultraslowpath);
1669DEFINE_XCHK_PPTR_EVENT(xchk_parent_defer);
1670DEFINE_XCHK_PPTR_EVENT(xchk_parent_slowpath);
1671DEFINE_XCHK_PPTR_EVENT(xchk_parent_ultraslowpath);
1672
1673DECLARE_EVENT_CLASS(xchk_dirtree_class,
1674 TP_PROTO(struct xfs_scrub *sc, struct xfs_inode *ip,
1675 unsigned int path_nr, const struct xfs_name *name,
1676 const struct xfs_parent_rec *pptr),
1677 TP_ARGS(sc, ip, path_nr, name, pptr),
1678 TP_STRUCT__entry(
1679 __field(dev_t, dev)
1680 __field(unsigned int, path_nr)
1681 __field(xfs_ino_t, child_ino)
1682 __field(unsigned int, child_gen)
1683 __field(xfs_ino_t, parent_ino)
1684 __field(unsigned int, parent_gen)
1685 __field(unsigned int, namelen)
1686 __dynamic_array(char, name, name->len)
1687 ),
1688 TP_fast_assign(
1689 __entry->dev = sc->mp->m_super->s_dev;
1690 __entry->path_nr = path_nr;
1691 __entry->child_ino = ip->i_ino;
1692 __entry->child_gen = VFS_I(ip)->i_generation;
1693 __entry->parent_ino = be64_to_cpu(pptr->p_ino);
1694 __entry->parent_gen = be32_to_cpu(pptr->p_gen);
1695 __entry->namelen = name->len;
1696 memcpy(__get_str(name), name->name, name->len);
1697 ),
1698 TP_printk("dev %d:%d path %u child_ino 0x%llx child_gen 0x%x parent_ino 0x%llx parent_gen 0x%x name '%.*s'",
1699 MAJOR(__entry->dev), MINOR(__entry->dev),
1700 __entry->path_nr,
1701 __entry->child_ino,
1702 __entry->child_gen,
1703 __entry->parent_ino,
1704 __entry->parent_gen,
1705 __entry->namelen,
1706 __get_str(name))
1707);
1708#define DEFINE_XCHK_DIRTREE_EVENT(name) \
1709DEFINE_EVENT(xchk_dirtree_class, name, \
1710 TP_PROTO(struct xfs_scrub *sc, struct xfs_inode *ip, \
1711 unsigned int path_nr, const struct xfs_name *name, \
1712 const struct xfs_parent_rec *pptr), \
1713 TP_ARGS(sc, ip, path_nr, name, pptr))
1714DEFINE_XCHK_DIRTREE_EVENT(xchk_dirtree_create_path);
1715DEFINE_XCHK_DIRTREE_EVENT(xchk_dirpath_walk_upwards);
1716
1717DECLARE_EVENT_CLASS(xchk_dirpath_class,
1718 TP_PROTO(struct xfs_scrub *sc, struct xfs_inode *ip,
1719 unsigned int path_nr, unsigned int step_nr,
1720 const struct xfs_name *name,
1721 const struct xfs_parent_rec *pptr),
1722 TP_ARGS(sc, ip, path_nr, step_nr, name, pptr),
1723 TP_STRUCT__entry(
1724 __field(dev_t, dev)
1725 __field(unsigned int, path_nr)
1726 __field(unsigned int, step_nr)
1727 __field(xfs_ino_t, child_ino)
1728 __field(unsigned int, child_gen)
1729 __field(xfs_ino_t, parent_ino)
1730 __field(unsigned int, parent_gen)
1731 __field(unsigned int, namelen)
1732 __dynamic_array(char, name, name->len)
1733 ),
1734 TP_fast_assign(
1735 __entry->dev = sc->mp->m_super->s_dev;
1736 __entry->path_nr = path_nr;
1737 __entry->step_nr = step_nr;
1738 __entry->child_ino = ip->i_ino;
1739 __entry->child_gen = VFS_I(ip)->i_generation;
1740 __entry->parent_ino = be64_to_cpu(pptr->p_ino);
1741 __entry->parent_gen = be32_to_cpu(pptr->p_gen);
1742 __entry->namelen = name->len;
1743 memcpy(__get_str(name), name->name, name->len);
1744 ),
1745 TP_printk("dev %d:%d path %u step %u child_ino 0x%llx child_gen 0x%x parent_ino 0x%llx parent_gen 0x%x name '%.*s'",
1746 MAJOR(__entry->dev), MINOR(__entry->dev),
1747 __entry->path_nr,
1748 __entry->step_nr,
1749 __entry->child_ino,
1750 __entry->child_gen,
1751 __entry->parent_ino,
1752 __entry->parent_gen,
1753 __entry->namelen,
1754 __get_str(name))
1755);
1756#define DEFINE_XCHK_DIRPATH_EVENT(name) \
1757DEFINE_EVENT(xchk_dirpath_class, name, \
1758 TP_PROTO(struct xfs_scrub *sc, struct xfs_inode *ip, \
1759 unsigned int path_nr, unsigned int step_nr, \
1760 const struct xfs_name *name, \
1761 const struct xfs_parent_rec *pptr), \
1762 TP_ARGS(sc, ip, path_nr, step_nr, name, pptr))
1763DEFINE_XCHK_DIRPATH_EVENT(xchk_dirpath_disappeared);
1764DEFINE_XCHK_DIRPATH_EVENT(xchk_dirpath_badgen);
1765DEFINE_XCHK_DIRPATH_EVENT(xchk_dirpath_nondir_parent);
1766DEFINE_XCHK_DIRPATH_EVENT(xchk_dirpath_unlinked_parent);
1767DEFINE_XCHK_DIRPATH_EVENT(xchk_dirpath_found_next_step);
1768DEFINE_XCHK_DIRPATH_EVENT(xchk_dirpath_crosses_tree);
1769
1770TRACE_DEFINE_ENUM(XCHK_DIRPATH_SCANNING);
1771TRACE_DEFINE_ENUM(XCHK_DIRPATH_DELETE);
1772TRACE_DEFINE_ENUM(XCHK_DIRPATH_CORRUPT);
1773TRACE_DEFINE_ENUM(XCHK_DIRPATH_LOOP);
1774TRACE_DEFINE_ENUM(XCHK_DIRPATH_STALE);
1775TRACE_DEFINE_ENUM(XCHK_DIRPATH_OK);
1776TRACE_DEFINE_ENUM(XREP_DIRPATH_DELETING);
1777TRACE_DEFINE_ENUM(XREP_DIRPATH_DELETED);
1778TRACE_DEFINE_ENUM(XREP_DIRPATH_ADOPTING);
1779TRACE_DEFINE_ENUM(XREP_DIRPATH_ADOPTED);
1780
1781#define XCHK_DIRPATH_OUTCOME_STRINGS \
1782 { XCHK_DIRPATH_SCANNING, "scanning" }, \
1783 { XCHK_DIRPATH_DELETE, "delete" }, \
1784 { XCHK_DIRPATH_CORRUPT, "corrupt" }, \
1785 { XCHK_DIRPATH_LOOP, "loop" }, \
1786 { XCHK_DIRPATH_STALE, "stale" }, \
1787 { XCHK_DIRPATH_OK, "ok" }, \
1788 { XREP_DIRPATH_DELETING, "deleting" }, \
1789 { XREP_DIRPATH_DELETED, "deleted" }, \
1790 { XREP_DIRPATH_ADOPTING, "adopting" }, \
1791 { XREP_DIRPATH_ADOPTED, "adopted" }
1792
1793DECLARE_EVENT_CLASS(xchk_dirpath_outcome_class,
1794 TP_PROTO(struct xfs_scrub *sc, unsigned long long path_nr,
1795 unsigned int nr_steps, \
1796 unsigned int outcome),
1797 TP_ARGS(sc, path_nr, nr_steps, outcome),
1798 TP_STRUCT__entry(
1799 __field(dev_t, dev)
1800 __field(unsigned long long, path_nr)
1801 __field(unsigned int, nr_steps)
1802 __field(unsigned int, outcome)
1803 ),
1804 TP_fast_assign(
1805 __entry->dev = sc->mp->m_super->s_dev;
1806 __entry->path_nr = path_nr;
1807 __entry->nr_steps = nr_steps;
1808 __entry->outcome = outcome;
1809 ),
1810 TP_printk("dev %d:%d path %llu steps %u outcome %s",
1811 MAJOR(__entry->dev), MINOR(__entry->dev),
1812 __entry->path_nr,
1813 __entry->nr_steps,
1814 __print_symbolic(__entry->outcome, XCHK_DIRPATH_OUTCOME_STRINGS))
1815);
1816#define DEFINE_XCHK_DIRPATH_OUTCOME_EVENT(name) \
1817DEFINE_EVENT(xchk_dirpath_outcome_class, name, \
1818 TP_PROTO(struct xfs_scrub *sc, unsigned long long path_nr, \
1819 unsigned int nr_steps, \
1820 unsigned int outcome), \
1821 TP_ARGS(sc, path_nr, nr_steps, outcome))
1822DEFINE_XCHK_DIRPATH_OUTCOME_EVENT(xchk_dirpath_set_outcome);
1823DEFINE_XCHK_DIRPATH_OUTCOME_EVENT(xchk_dirpath_evaluate_path);
1824
1825DECLARE_EVENT_CLASS(xchk_dirtree_evaluate_class,
1826 TP_PROTO(const struct xchk_dirtree *dl,
1827 const struct xchk_dirtree_outcomes *oc),
1828 TP_ARGS(dl, oc),
1829 TP_STRUCT__entry(
1830 __field(dev_t, dev)
1831 __field(xfs_ino_t, ino)
1832 __field(xfs_ino_t, rootino)
1833 __field(unsigned int, nr_paths)
1834 __field(unsigned int, bad)
1835 __field(unsigned int, suspect)
1836 __field(unsigned int, good)
1837 __field(bool, needs_adoption)
1838 ),
1839 TP_fast_assign(
1840 __entry->dev = dl->sc->mp->m_super->s_dev;
1841 __entry->ino = dl->sc->ip->i_ino;
1842 __entry->rootino = dl->root_ino;
1843 __entry->nr_paths = dl->nr_paths;
1844 __entry->bad = oc->bad;
1845 __entry->suspect = oc->suspect;
1846 __entry->good = oc->good;
1847 __entry->needs_adoption = oc->needs_adoption ? 1 : 0;
1848 ),
1849 TP_printk("dev %d:%d ino 0x%llx rootino 0x%llx nr_paths %u bad %u suspect %u good %u adopt? %d",
1850 MAJOR(__entry->dev), MINOR(__entry->dev),
1851 __entry->ino,
1852 __entry->rootino,
1853 __entry->nr_paths,
1854 __entry->bad,
1855 __entry->suspect,
1856 __entry->good,
1857 __entry->needs_adoption)
1858);
1859#define DEFINE_XCHK_DIRTREE_EVALUATE_EVENT(name) \
1860DEFINE_EVENT(xchk_dirtree_evaluate_class, name, \
1861 TP_PROTO(const struct xchk_dirtree *dl, \
1862 const struct xchk_dirtree_outcomes *oc), \
1863 TP_ARGS(dl, oc))
1864DEFINE_XCHK_DIRTREE_EVALUATE_EVENT(xchk_dirtree_evaluate);
1865
1866TRACE_EVENT(xchk_dirpath_changed,
1867 TP_PROTO(struct xfs_scrub *sc, unsigned int path_nr,
1868 unsigned int step_nr, const struct xfs_inode *dp,
1869 const struct xfs_inode *ip, const struct xfs_name *xname),
1870 TP_ARGS(sc, path_nr, step_nr, dp, ip, xname),
1871 TP_STRUCT__entry(
1872 __field(dev_t, dev)
1873 __field(unsigned int, path_nr)
1874 __field(unsigned int, step_nr)
1875 __field(xfs_ino_t, child_ino)
1876 __field(xfs_ino_t, parent_ino)
1877 __field(unsigned int, namelen)
1878 __dynamic_array(char, name, xname->len)
1879 ),
1880 TP_fast_assign(
1881 __entry->dev = sc->mp->m_super->s_dev;
1882 __entry->path_nr = path_nr;
1883 __entry->step_nr = step_nr;
1884 __entry->child_ino = ip->i_ino;
1885 __entry->parent_ino = dp->i_ino;
1886 __entry->namelen = xname->len;
1887 memcpy(__get_str(name), xname->name, xname->len);
1888 ),
1889 TP_printk("dev %d:%d path %u step %u child_ino 0x%llx parent_ino 0x%llx name '%.*s'",
1890 MAJOR(__entry->dev), MINOR(__entry->dev),
1891 __entry->path_nr,
1892 __entry->step_nr,
1893 __entry->child_ino,
1894 __entry->parent_ino,
1895 __entry->namelen,
1896 __get_str(name))
1897);
1898
1899TRACE_EVENT(xchk_dirtree_live_update,
1900 TP_PROTO(struct xfs_scrub *sc, const struct xfs_inode *dp,
1901 int action, const struct xfs_inode *ip, int delta,
1902 const struct xfs_name *xname),
1903 TP_ARGS(sc, dp, action, ip, delta, xname),
1904 TP_STRUCT__entry(
1905 __field(dev_t, dev)
1906 __field(xfs_ino_t, parent_ino)
1907 __field(int, action)
1908 __field(xfs_ino_t, child_ino)
1909 __field(int, delta)
1910 __field(unsigned int, namelen)
1911 __dynamic_array(char, name, xname->len)
1912 ),
1913 TP_fast_assign(
1914 __entry->dev = sc->mp->m_super->s_dev;
1915 __entry->parent_ino = dp->i_ino;
1916 __entry->action = action;
1917 __entry->child_ino = ip->i_ino;
1918 __entry->delta = delta;
1919 __entry->namelen = xname->len;
1920 memcpy(__get_str(name), xname->name, xname->len);
1921 ),
1922 TP_printk("dev %d:%d parent_ino 0x%llx child_ino 0x%llx nlink_delta %d name '%.*s'",
1923 MAJOR(__entry->dev), MINOR(__entry->dev),
1924 __entry->parent_ino,
1925 __entry->child_ino,
1926 __entry->delta,
1927 __entry->namelen,
1928 __get_str(name))
1929);
1930
1931DECLARE_EVENT_CLASS(xchk_metapath_class,
1932 TP_PROTO(struct xfs_scrub *sc, const char *path,
1933 struct xfs_inode *dp, xfs_ino_t ino),
1934 TP_ARGS(sc, path, dp, ino),
1935 TP_STRUCT__entry(
1936 __field(dev_t, dev)
1937 __field(xfs_ino_t, scrub_ino)
1938 __field(xfs_ino_t, parent_ino)
1939 __field(xfs_ino_t, ino)
1940 __string(name, path)
1941 ),
1942 TP_fast_assign(
1943 __entry->dev = sc->mp->m_super->s_dev;
1944 __entry->scrub_ino = sc->ip ? sc->ip->i_ino : NULLFSINO;
1945 __entry->parent_ino = dp ? dp->i_ino : NULLFSINO;
1946 __entry->ino = ino;
1947 __assign_str(name);
1948 ),
1949 TP_printk("dev %d:%d ino 0x%llx parent_ino 0x%llx name '%s' ino 0x%llx",
1950 MAJOR(__entry->dev), MINOR(__entry->dev),
1951 __entry->scrub_ino,
1952 __entry->parent_ino,
1953 __get_str(name),
1954 __entry->ino)
1955);
1956#define DEFINE_XCHK_METAPATH_EVENT(name) \
1957DEFINE_EVENT(xchk_metapath_class, name, \
1958 TP_PROTO(struct xfs_scrub *sc, const char *path, \
1959 struct xfs_inode *dp, xfs_ino_t ino), \
1960 TP_ARGS(sc, path, dp, ino))
1961DEFINE_XCHK_METAPATH_EVENT(xchk_metapath_lookup);
1962
1963/* repair tracepoints */
1964#if IS_ENABLED(CONFIG_XFS_ONLINE_REPAIR)
1965
1966DECLARE_EVENT_CLASS(xrep_extent_class,
1967 TP_PROTO(const struct xfs_group *xg, xfs_agblock_t agbno,
1968 xfs_extlen_t len),
1969 TP_ARGS(xg, agbno, len),
1970 TP_STRUCT__entry(
1971 __field(dev_t, dev)
1972 __field(enum xfs_group_type, type)
1973 __field(xfs_agnumber_t, agno)
1974 __field(xfs_agblock_t, agbno)
1975 __field(xfs_extlen_t, len)
1976 ),
1977 TP_fast_assign(
1978 __entry->dev = xg->xg_mount->m_super->s_dev;
1979 __entry->type = xg->xg_type;
1980 __entry->agno = xg->xg_gno;
1981 __entry->agbno = agbno;
1982 __entry->len = len;
1983 ),
1984 TP_printk("dev %d:%d %sno 0x%x %sbno 0x%x fsbcount 0x%x",
1985 MAJOR(__entry->dev), MINOR(__entry->dev),
1986 __print_symbolic(__entry->type, XG_TYPE_STRINGS),
1987 __entry->agno,
1988 __print_symbolic(__entry->type, XG_TYPE_STRINGS),
1989 __entry->agbno,
1990 __entry->len)
1991);
1992#define DEFINE_REPAIR_EXTENT_EVENT(name) \
1993DEFINE_EVENT(xrep_extent_class, name, \
1994 TP_PROTO(const struct xfs_group *xg, xfs_agblock_t agbno, \
1995 xfs_extlen_t len), \
1996 TP_ARGS(xg, agbno, len))
1997DEFINE_REPAIR_EXTENT_EVENT(xreap_dispose_unmap_extent);
1998DEFINE_REPAIR_EXTENT_EVENT(xreap_dispose_free_extent);
1999DEFINE_REPAIR_EXTENT_EVENT(xreap_agextent_binval);
2000DEFINE_REPAIR_EXTENT_EVENT(xreap_bmapi_binval);
2001DEFINE_REPAIR_EXTENT_EVENT(xrep_agfl_insert);
2002
2003DECLARE_EVENT_CLASS(xrep_reap_limits_class,
2004 TP_PROTO(const struct xfs_trans *tp, unsigned int per_binval,
2005 unsigned int max_binval, unsigned int step_size,
2006 unsigned int per_intent,
2007 unsigned int max_deferred),
2008 TP_ARGS(tp, per_binval, max_binval, step_size, per_intent, max_deferred),
2009 TP_STRUCT__entry(
2010 __field(dev_t, dev)
2011 __field(unsigned int, log_res)
2012 __field(unsigned int, per_binval)
2013 __field(unsigned int, max_binval)
2014 __field(unsigned int, step_size)
2015 __field(unsigned int, per_intent)
2016 __field(unsigned int, max_deferred)
2017 ),
2018 TP_fast_assign(
2019 __entry->dev = tp->t_mountp->m_super->s_dev;
2020 __entry->log_res = tp->t_log_res;
2021 __entry->per_binval = per_binval;
2022 __entry->max_binval = max_binval;
2023 __entry->step_size = step_size;
2024 __entry->per_intent = per_intent;
2025 __entry->max_deferred = max_deferred;
2026 ),
2027 TP_printk("dev %d:%d logres %u per_binval %u max_binval %u step_size %u per_intent %u max_deferred %u",
2028 MAJOR(__entry->dev), MINOR(__entry->dev),
2029 __entry->log_res,
2030 __entry->per_binval,
2031 __entry->max_binval,
2032 __entry->step_size,
2033 __entry->per_intent,
2034 __entry->max_deferred)
2035);
2036#define DEFINE_REPAIR_REAP_LIMITS_EVENT(name) \
2037DEFINE_EVENT(xrep_reap_limits_class, name, \
2038 TP_PROTO(const struct xfs_trans *tp, unsigned int per_binval, \
2039 unsigned int max_binval, unsigned int step_size, \
2040 unsigned int per_intent, \
2041 unsigned int max_deferred), \
2042 TP_ARGS(tp, per_binval, max_binval, step_size, per_intent, max_deferred))
2043DEFINE_REPAIR_REAP_LIMITS_EVENT(xreap_agextent_limits);
2044DEFINE_REPAIR_REAP_LIMITS_EVENT(xreap_agcow_limits);
2045DEFINE_REPAIR_REAP_LIMITS_EVENT(xreap_rgcow_limits);
2046DEFINE_REPAIR_REAP_LIMITS_EVENT(xreap_bmapi_limits);
2047
2048DECLARE_EVENT_CLASS(xrep_reap_find_class,
2049 TP_PROTO(const struct xfs_group *xg, xfs_agblock_t agbno,
2050 xfs_extlen_t len, bool crosslinked),
2051 TP_ARGS(xg, agbno, len, crosslinked),
2052 TP_STRUCT__entry(
2053 __field(dev_t, dev)
2054 __field(enum xfs_group_type, type)
2055 __field(xfs_agnumber_t, agno)
2056 __field(xfs_agblock_t, agbno)
2057 __field(xfs_extlen_t, len)
2058 __field(bool, crosslinked)
2059 ),
2060 TP_fast_assign(
2061 __entry->dev = xg->xg_mount->m_super->s_dev;
2062 __entry->type = xg->xg_type;
2063 __entry->agno = xg->xg_gno;
2064 __entry->agbno = agbno;
2065 __entry->len = len;
2066 __entry->crosslinked = crosslinked;
2067 ),
2068 TP_printk("dev %d:%d %sno 0x%x %sbno 0x%x fsbcount 0x%x crosslinked %d",
2069 MAJOR(__entry->dev), MINOR(__entry->dev),
2070 __print_symbolic(__entry->type, XG_TYPE_STRINGS),
2071 __entry->agno,
2072 __print_symbolic(__entry->type, XG_TYPE_STRINGS),
2073 __entry->agbno,
2074 __entry->len,
2075 __entry->crosslinked ? 1 : 0)
2076);
2077#define DEFINE_REPAIR_REAP_FIND_EVENT(name) \
2078DEFINE_EVENT(xrep_reap_find_class, name, \
2079 TP_PROTO(const struct xfs_group *xg, xfs_agblock_t agbno, \
2080 xfs_extlen_t len, bool crosslinked), \
2081 TP_ARGS(xg, agbno, len, crosslinked))
2082DEFINE_REPAIR_REAP_FIND_EVENT(xreap_agextent_select);
2083DEFINE_REPAIR_REAP_FIND_EVENT(xreap_bmapi_select);
2084
2085TRACE_EVENT(xrep_ibt_walk_rmap,
2086 TP_PROTO(const struct xfs_perag *pag, const struct xfs_rmap_irec *rec),
2087 TP_ARGS(pag, rec),
2088 TP_STRUCT__entry(
2089 __field(dev_t, dev)
2090 __field(xfs_agnumber_t, agno)
2091 __field(xfs_agblock_t, agbno)
2092 __field(xfs_extlen_t, len)
2093 __field(uint64_t, owner)
2094 __field(uint64_t, offset)
2095 __field(unsigned int, flags)
2096 ),
2097 TP_fast_assign(
2098 __entry->dev = pag_mount(pag)->m_super->s_dev;
2099 __entry->agno = pag_agno(pag);
2100 __entry->agbno = rec->rm_startblock;
2101 __entry->len = rec->rm_blockcount;
2102 __entry->owner = rec->rm_owner;
2103 __entry->offset = rec->rm_offset;
2104 __entry->flags = rec->rm_flags;
2105 ),
2106 TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x owner 0x%llx fileoff 0x%llx flags 0x%x",
2107 MAJOR(__entry->dev), MINOR(__entry->dev),
2108 __entry->agno,
2109 __entry->agbno,
2110 __entry->len,
2111 __entry->owner,
2112 __entry->offset,
2113 __entry->flags)
2114);
2115
2116TRACE_EVENT(xrep_abt_found,
2117 TP_PROTO(const struct xfs_perag *pag,
2118 const struct xfs_alloc_rec_incore *rec),
2119 TP_ARGS(pag, rec),
2120 TP_STRUCT__entry(
2121 __field(dev_t, dev)
2122 __field(xfs_agnumber_t, agno)
2123 __field(xfs_agblock_t, startblock)
2124 __field(xfs_extlen_t, blockcount)
2125 ),
2126 TP_fast_assign(
2127 __entry->dev = pag_mount(pag)->m_super->s_dev;
2128 __entry->agno = pag_agno(pag);
2129 __entry->startblock = rec->ar_startblock;
2130 __entry->blockcount = rec->ar_blockcount;
2131 ),
2132 TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x",
2133 MAJOR(__entry->dev), MINOR(__entry->dev),
2134 __entry->agno,
2135 __entry->startblock,
2136 __entry->blockcount)
2137)
2138
2139TRACE_EVENT(xrep_ibt_found,
2140 TP_PROTO(const struct xfs_perag *pag,
2141 const struct xfs_inobt_rec_incore *rec),
2142 TP_ARGS(pag, rec),
2143 TP_STRUCT__entry(
2144 __field(dev_t, dev)
2145 __field(xfs_agnumber_t, agno)
2146 __field(xfs_agino_t, startino)
2147 __field(uint16_t, holemask)
2148 __field(uint8_t, count)
2149 __field(uint8_t, freecount)
2150 __field(uint64_t, freemask)
2151 ),
2152 TP_fast_assign(
2153 __entry->dev = pag_mount(pag)->m_super->s_dev;
2154 __entry->agno = pag_agno(pag);
2155 __entry->startino = rec->ir_startino;
2156 __entry->holemask = rec->ir_holemask;
2157 __entry->count = rec->ir_count;
2158 __entry->freecount = rec->ir_freecount;
2159 __entry->freemask = rec->ir_free;
2160 ),
2161 TP_printk("dev %d:%d agno 0x%x agino 0x%x holemask 0x%x count 0x%x freecount 0x%x freemask 0x%llx",
2162 MAJOR(__entry->dev), MINOR(__entry->dev),
2163 __entry->agno,
2164 __entry->startino,
2165 __entry->holemask,
2166 __entry->count,
2167 __entry->freecount,
2168 __entry->freemask)
2169)
2170
2171TRACE_EVENT(xrep_refc_found,
2172 TP_PROTO(const struct xfs_group *xg,
2173 const struct xfs_refcount_irec *rec),
2174 TP_ARGS(xg, rec),
2175 TP_STRUCT__entry(
2176 __field(dev_t, dev)
2177 __field(xfs_agnumber_t, agno)
2178 __field(enum xfs_refc_domain, domain)
2179 __field(enum xfs_group_type, type)
2180 __field(xfs_agblock_t, startblock)
2181 __field(xfs_extlen_t, blockcount)
2182 __field(xfs_nlink_t, refcount)
2183 ),
2184 TP_fast_assign(
2185 __entry->dev = xg->xg_mount->m_super->s_dev;
2186 __entry->agno = xg->xg_gno;
2187 __entry->type = xg->xg_type;
2188 __entry->domain = rec->rc_domain;
2189 __entry->startblock = rec->rc_startblock;
2190 __entry->blockcount = rec->rc_blockcount;
2191 __entry->refcount = rec->rc_refcount;
2192 ),
2193 TP_printk("dev %d:%d %sno 0x%x dom %s %sbno 0x%x fsbcount 0x%x refcount %u",
2194 MAJOR(__entry->dev), MINOR(__entry->dev),
2195 __print_symbolic(__entry->type, XG_TYPE_STRINGS),
2196 __entry->agno,
2197 __print_symbolic(__entry->domain, XFS_REFC_DOMAIN_STRINGS),
2198 __print_symbolic(__entry->type, XG_TYPE_STRINGS),
2199 __entry->startblock,
2200 __entry->blockcount,
2201 __entry->refcount)
2202)
2203
2204TRACE_EVENT(xrep_bmap_found,
2205 TP_PROTO(struct xfs_inode *ip, int whichfork,
2206 struct xfs_bmbt_irec *irec),
2207 TP_ARGS(ip, whichfork, irec),
2208 TP_STRUCT__entry(
2209 __field(dev_t, dev)
2210 __field(xfs_ino_t, ino)
2211 __field(int, whichfork)
2212 __field(xfs_fileoff_t, lblk)
2213 __field(xfs_filblks_t, len)
2214 __field(xfs_fsblock_t, pblk)
2215 __field(int, state)
2216 ),
2217 TP_fast_assign(
2218 __entry->dev = VFS_I(ip)->i_sb->s_dev;
2219 __entry->ino = ip->i_ino;
2220 __entry->whichfork = whichfork;
2221 __entry->lblk = irec->br_startoff;
2222 __entry->len = irec->br_blockcount;
2223 __entry->pblk = irec->br_startblock;
2224 __entry->state = irec->br_state;
2225 ),
2226 TP_printk("dev %d:%d ino 0x%llx whichfork %s fileoff 0x%llx fsbcount 0x%llx startblock 0x%llx state %d",
2227 MAJOR(__entry->dev), MINOR(__entry->dev),
2228 __entry->ino,
2229 __print_symbolic(__entry->whichfork, XFS_WHICHFORK_STRINGS),
2230 __entry->lblk,
2231 __entry->len,
2232 __entry->pblk,
2233 __entry->state)
2234);
2235
2236TRACE_EVENT(xrep_rmap_found,
2237 TP_PROTO(const struct xfs_perag *pag, const struct xfs_rmap_irec *rec),
2238 TP_ARGS(pag, rec),
2239 TP_STRUCT__entry(
2240 __field(dev_t, dev)
2241 __field(xfs_agnumber_t, agno)
2242 __field(xfs_agblock_t, agbno)
2243 __field(xfs_extlen_t, len)
2244 __field(uint64_t, owner)
2245 __field(uint64_t, offset)
2246 __field(unsigned int, flags)
2247 ),
2248 TP_fast_assign(
2249 __entry->dev = pag_mount(pag)->m_super->s_dev;
2250 __entry->agno = pag_agno(pag);
2251 __entry->agbno = rec->rm_startblock;
2252 __entry->len = rec->rm_blockcount;
2253 __entry->owner = rec->rm_owner;
2254 __entry->offset = rec->rm_offset;
2255 __entry->flags = rec->rm_flags;
2256 ),
2257 TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x owner 0x%llx fileoff 0x%llx flags 0x%x",
2258 MAJOR(__entry->dev), MINOR(__entry->dev),
2259 __entry->agno,
2260 __entry->agbno,
2261 __entry->len,
2262 __entry->owner,
2263 __entry->offset,
2264 __entry->flags)
2265);
2266
2267TRACE_EVENT(xrep_findroot_block,
2268 TP_PROTO(const struct xfs_perag *pag, xfs_agblock_t agbno,
2269 uint32_t magic, uint16_t level),
2270 TP_ARGS(pag, agbno, magic, level),
2271 TP_STRUCT__entry(
2272 __field(dev_t, dev)
2273 __field(xfs_agnumber_t, agno)
2274 __field(xfs_agblock_t, agbno)
2275 __field(uint32_t, magic)
2276 __field(uint16_t, level)
2277 ),
2278 TP_fast_assign(
2279 __entry->dev = pag_mount(pag)->m_super->s_dev;
2280 __entry->agno = pag_agno(pag);
2281 __entry->agbno = agbno;
2282 __entry->magic = magic;
2283 __entry->level = level;
2284 ),
2285 TP_printk("dev %d:%d agno 0x%x agbno 0x%x magic 0x%x level %u",
2286 MAJOR(__entry->dev), MINOR(__entry->dev),
2287 __entry->agno,
2288 __entry->agbno,
2289 __entry->magic,
2290 __entry->level)
2291)
2292TRACE_EVENT(xrep_calc_ag_resblks,
2293 TP_PROTO(const struct xfs_perag *pag, xfs_agino_t icount,
2294 xfs_agblock_t aglen, xfs_agblock_t freelen,
2295 xfs_agblock_t usedlen),
2296 TP_ARGS(pag, icount, aglen, freelen, usedlen),
2297 TP_STRUCT__entry(
2298 __field(dev_t, dev)
2299 __field(xfs_agnumber_t, agno)
2300 __field(xfs_agino_t, icount)
2301 __field(xfs_agblock_t, aglen)
2302 __field(xfs_agblock_t, freelen)
2303 __field(xfs_agblock_t, usedlen)
2304 ),
2305 TP_fast_assign(
2306 __entry->dev = pag_mount(pag)->m_super->s_dev;
2307 __entry->agno = pag_agno(pag);
2308 __entry->icount = icount;
2309 __entry->aglen = aglen;
2310 __entry->freelen = freelen;
2311 __entry->usedlen = usedlen;
2312 ),
2313 TP_printk("dev %d:%d agno 0x%x icount %u aglen %u freelen %u usedlen %u",
2314 MAJOR(__entry->dev), MINOR(__entry->dev),
2315 __entry->agno,
2316 __entry->icount,
2317 __entry->aglen,
2318 __entry->freelen,
2319 __entry->usedlen)
2320)
2321TRACE_EVENT(xrep_calc_ag_resblks_btsize,
2322 TP_PROTO(const struct xfs_perag *pag, xfs_agblock_t bnobt_sz,
2323 xfs_agblock_t inobt_sz, xfs_agblock_t rmapbt_sz,
2324 xfs_agblock_t refcbt_sz),
2325 TP_ARGS(pag, bnobt_sz, inobt_sz, rmapbt_sz, refcbt_sz),
2326 TP_STRUCT__entry(
2327 __field(dev_t, dev)
2328 __field(xfs_agnumber_t, agno)
2329 __field(xfs_agblock_t, bnobt_sz)
2330 __field(xfs_agblock_t, inobt_sz)
2331 __field(xfs_agblock_t, rmapbt_sz)
2332 __field(xfs_agblock_t, refcbt_sz)
2333 ),
2334 TP_fast_assign(
2335 __entry->dev = pag_mount(pag)->m_super->s_dev;
2336 __entry->agno = pag_agno(pag);
2337 __entry->bnobt_sz = bnobt_sz;
2338 __entry->inobt_sz = inobt_sz;
2339 __entry->rmapbt_sz = rmapbt_sz;
2340 __entry->refcbt_sz = refcbt_sz;
2341 ),
2342 TP_printk("dev %d:%d agno 0x%x bnobt %u inobt %u rmapbt %u refcountbt %u",
2343 MAJOR(__entry->dev), MINOR(__entry->dev),
2344 __entry->agno,
2345 __entry->bnobt_sz,
2346 __entry->inobt_sz,
2347 __entry->rmapbt_sz,
2348 __entry->refcbt_sz)
2349)
2350
2351#ifdef CONFIG_XFS_RT
2352TRACE_EVENT(xrep_calc_rtgroup_resblks_btsize,
2353 TP_PROTO(struct xfs_mount *mp, xfs_rgnumber_t rgno,
2354 xfs_rgblock_t usedlen, xfs_rgblock_t rmapbt_sz),
2355 TP_ARGS(mp, rgno, usedlen, rmapbt_sz),
2356 TP_STRUCT__entry(
2357 __field(dev_t, dev)
2358 __field(xfs_rgnumber_t, rgno)
2359 __field(xfs_rgblock_t, usedlen)
2360 __field(xfs_rgblock_t, rmapbt_sz)
2361 ),
2362 TP_fast_assign(
2363 __entry->dev = mp->m_super->s_dev;
2364 __entry->rgno = rgno;
2365 __entry->usedlen = usedlen;
2366 __entry->rmapbt_sz = rmapbt_sz;
2367 ),
2368 TP_printk("dev %d:%d rgno 0x%x usedlen %u rmapbt %u",
2369 MAJOR(__entry->dev), MINOR(__entry->dev),
2370 __entry->rgno,
2371 __entry->usedlen,
2372 __entry->rmapbt_sz)
2373);
2374#endif /* CONFIG_XFS_RT */
2375
2376TRACE_EVENT(xrep_reset_counters,
2377 TP_PROTO(struct xfs_mount *mp, struct xchk_fscounters *fsc),
2378 TP_ARGS(mp, fsc),
2379 TP_STRUCT__entry(
2380 __field(dev_t, dev)
2381 __field(uint64_t, icount)
2382 __field(uint64_t, ifree)
2383 __field(uint64_t, fdblocks)
2384 __field(uint64_t, frextents)
2385 ),
2386 TP_fast_assign(
2387 __entry->dev = mp->m_super->s_dev;
2388 __entry->icount = fsc->icount;
2389 __entry->ifree = fsc->ifree;
2390 __entry->fdblocks = fsc->fdblocks;
2391 __entry->frextents = fsc->frextents;
2392 ),
2393 TP_printk("dev %d:%d icount %llu ifree %llu fdblocks %llu frextents %llu",
2394 MAJOR(__entry->dev), MINOR(__entry->dev),
2395 __entry->icount,
2396 __entry->ifree,
2397 __entry->fdblocks,
2398 __entry->frextents)
2399)
2400
2401DECLARE_EVENT_CLASS(xrep_newbt_extent_class,
2402 TP_PROTO(const struct xfs_perag *pag, xfs_agblock_t agbno,
2403 xfs_extlen_t len, int64_t owner),
2404 TP_ARGS(pag, agbno, len, owner),
2405 TP_STRUCT__entry(
2406 __field(dev_t, dev)
2407 __field(xfs_agnumber_t, agno)
2408 __field(xfs_agblock_t, agbno)
2409 __field(xfs_extlen_t, len)
2410 __field(int64_t, owner)
2411 ),
2412 TP_fast_assign(
2413 __entry->dev = pag_mount(pag)->m_super->s_dev;
2414 __entry->agno = pag_agno(pag);
2415 __entry->agbno = agbno;
2416 __entry->len = len;
2417 __entry->owner = owner;
2418 ),
2419 TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x owner 0x%llx",
2420 MAJOR(__entry->dev), MINOR(__entry->dev),
2421 __entry->agno,
2422 __entry->agbno,
2423 __entry->len,
2424 __entry->owner)
2425);
2426#define DEFINE_NEWBT_EXTENT_EVENT(name) \
2427DEFINE_EVENT(xrep_newbt_extent_class, name, \
2428 TP_PROTO(const struct xfs_perag *pag, xfs_agblock_t agbno, \
2429 xfs_extlen_t len, int64_t owner), \
2430 TP_ARGS(pag, agbno, len, owner))
2431DEFINE_NEWBT_EXTENT_EVENT(xrep_newbt_alloc_ag_blocks);
2432DEFINE_NEWBT_EXTENT_EVENT(xrep_newbt_alloc_file_blocks);
2433DEFINE_NEWBT_EXTENT_EVENT(xrep_newbt_free_blocks);
2434DEFINE_NEWBT_EXTENT_EVENT(xrep_newbt_claim_block);
2435
2436DECLARE_EVENT_CLASS(xrep_dinode_class,
2437 TP_PROTO(struct xfs_scrub *sc, struct xfs_dinode *dip),
2438 TP_ARGS(sc, dip),
2439 TP_STRUCT__entry(
2440 __field(dev_t, dev)
2441 __field(xfs_ino_t, ino)
2442 __field(uint16_t, mode)
2443 __field(uint8_t, version)
2444 __field(uint8_t, format)
2445 __field(uint32_t, uid)
2446 __field(uint32_t, gid)
2447 __field(uint64_t, size)
2448 __field(uint64_t, nblocks)
2449 __field(uint32_t, extsize)
2450 __field(uint32_t, nextents)
2451 __field(uint16_t, anextents)
2452 __field(uint8_t, forkoff)
2453 __field(uint8_t, aformat)
2454 __field(uint16_t, flags)
2455 __field(uint32_t, gen)
2456 __field(uint64_t, flags2)
2457 __field(uint32_t, cowextsize)
2458 ),
2459 TP_fast_assign(
2460 __entry->dev = sc->mp->m_super->s_dev;
2461 __entry->ino = sc->sm->sm_ino;
2462 __entry->mode = be16_to_cpu(dip->di_mode);
2463 __entry->version = dip->di_version;
2464 __entry->format = dip->di_format;
2465 __entry->uid = be32_to_cpu(dip->di_uid);
2466 __entry->gid = be32_to_cpu(dip->di_gid);
2467 __entry->size = be64_to_cpu(dip->di_size);
2468 __entry->nblocks = be64_to_cpu(dip->di_nblocks);
2469 __entry->extsize = be32_to_cpu(dip->di_extsize);
2470 __entry->nextents = be32_to_cpu(dip->di_nextents);
2471 __entry->anextents = be16_to_cpu(dip->di_anextents);
2472 __entry->forkoff = dip->di_forkoff;
2473 __entry->aformat = dip->di_aformat;
2474 __entry->flags = be16_to_cpu(dip->di_flags);
2475 __entry->gen = be32_to_cpu(dip->di_gen);
2476 __entry->flags2 = be64_to_cpu(dip->di_flags2);
2477 __entry->cowextsize = be32_to_cpu(dip->di_cowextsize);
2478 ),
2479 TP_printk("dev %d:%d ino 0x%llx mode 0x%x version %u format %u uid %u gid %u disize 0x%llx nblocks 0x%llx extsize %u nextents %u anextents %u forkoff 0x%x aformat %u flags 0x%x gen 0x%x flags2 0x%llx cowextsize %u",
2480 MAJOR(__entry->dev), MINOR(__entry->dev),
2481 __entry->ino,
2482 __entry->mode,
2483 __entry->version,
2484 __entry->format,
2485 __entry->uid,
2486 __entry->gid,
2487 __entry->size,
2488 __entry->nblocks,
2489 __entry->extsize,
2490 __entry->nextents,
2491 __entry->anextents,
2492 __entry->forkoff,
2493 __entry->aformat,
2494 __entry->flags,
2495 __entry->gen,
2496 __entry->flags2,
2497 __entry->cowextsize)
2498)
2499
2500#define DEFINE_REPAIR_DINODE_EVENT(name) \
2501DEFINE_EVENT(xrep_dinode_class, name, \
2502 TP_PROTO(struct xfs_scrub *sc, struct xfs_dinode *dip), \
2503 TP_ARGS(sc, dip))
2504DEFINE_REPAIR_DINODE_EVENT(xrep_dinode_header);
2505DEFINE_REPAIR_DINODE_EVENT(xrep_dinode_mode);
2506DEFINE_REPAIR_DINODE_EVENT(xrep_dinode_flags);
2507DEFINE_REPAIR_DINODE_EVENT(xrep_dinode_size);
2508DEFINE_REPAIR_DINODE_EVENT(xrep_dinode_extsize_hints);
2509DEFINE_REPAIR_DINODE_EVENT(xrep_dinode_zap_symlink);
2510DEFINE_REPAIR_DINODE_EVENT(xrep_dinode_zap_dir);
2511DEFINE_REPAIR_DINODE_EVENT(xrep_dinode_fixed);
2512DEFINE_REPAIR_DINODE_EVENT(xrep_dinode_zap_forks);
2513DEFINE_REPAIR_DINODE_EVENT(xrep_dinode_zap_dfork);
2514DEFINE_REPAIR_DINODE_EVENT(xrep_dinode_zap_afork);
2515DEFINE_REPAIR_DINODE_EVENT(xrep_dinode_ensure_forkoff);
2516
2517DECLARE_EVENT_CLASS(xrep_inode_class,
2518 TP_PROTO(struct xfs_scrub *sc),
2519 TP_ARGS(sc),
2520 TP_STRUCT__entry(
2521 __field(dev_t, dev)
2522 __field(xfs_ino_t, ino)
2523 __field(xfs_fsize_t, size)
2524 __field(xfs_rfsblock_t, nblocks)
2525 __field(uint16_t, flags)
2526 __field(uint64_t, flags2)
2527 __field(uint32_t, nextents)
2528 __field(uint8_t, format)
2529 __field(uint32_t, anextents)
2530 __field(uint8_t, aformat)
2531 ),
2532 TP_fast_assign(
2533 __entry->dev = sc->mp->m_super->s_dev;
2534 __entry->ino = sc->sm->sm_ino;
2535 __entry->size = sc->ip->i_disk_size;
2536 __entry->nblocks = sc->ip->i_nblocks;
2537 __entry->flags = sc->ip->i_diflags;
2538 __entry->flags2 = sc->ip->i_diflags2;
2539 __entry->nextents = sc->ip->i_df.if_nextents;
2540 __entry->format = sc->ip->i_df.if_format;
2541 __entry->anextents = sc->ip->i_af.if_nextents;
2542 __entry->aformat = sc->ip->i_af.if_format;
2543 ),
2544 TP_printk("dev %d:%d ino 0x%llx disize 0x%llx nblocks 0x%llx flags 0x%x flags2 0x%llx nextents %u format %u anextents %u aformat %u",
2545 MAJOR(__entry->dev), MINOR(__entry->dev),
2546 __entry->ino,
2547 __entry->size,
2548 __entry->nblocks,
2549 __entry->flags,
2550 __entry->flags2,
2551 __entry->nextents,
2552 __entry->format,
2553 __entry->anextents,
2554 __entry->aformat)
2555)
2556
2557#define DEFINE_REPAIR_INODE_EVENT(name) \
2558DEFINE_EVENT(xrep_inode_class, name, \
2559 TP_PROTO(struct xfs_scrub *sc), \
2560 TP_ARGS(sc))
2561DEFINE_REPAIR_INODE_EVENT(xrep_inode_blockcounts);
2562DEFINE_REPAIR_INODE_EVENT(xrep_inode_ids);
2563DEFINE_REPAIR_INODE_EVENT(xrep_inode_flags);
2564DEFINE_REPAIR_INODE_EVENT(xrep_inode_blockdir_size);
2565DEFINE_REPAIR_INODE_EVENT(xrep_inode_sfdir_size);
2566DEFINE_REPAIR_INODE_EVENT(xrep_inode_dir_size);
2567DEFINE_REPAIR_INODE_EVENT(xrep_inode_fixed);
2568
2569TRACE_EVENT(xrep_dinode_count_rmaps,
2570 TP_PROTO(struct xfs_scrub *sc, xfs_rfsblock_t data_blocks,
2571 xfs_rfsblock_t rt_blocks, xfs_rfsblock_t attr_blocks,
2572 xfs_extnum_t data_extents, xfs_extnum_t rt_extents,
2573 xfs_aextnum_t attr_extents),
2574 TP_ARGS(sc, data_blocks, rt_blocks, attr_blocks, data_extents,
2575 rt_extents, attr_extents),
2576 TP_STRUCT__entry(
2577 __field(dev_t, dev)
2578 __field(xfs_ino_t, ino)
2579 __field(xfs_rfsblock_t, data_blocks)
2580 __field(xfs_rfsblock_t, rt_blocks)
2581 __field(xfs_rfsblock_t, attr_blocks)
2582 __field(xfs_extnum_t, data_extents)
2583 __field(xfs_extnum_t, rt_extents)
2584 __field(xfs_aextnum_t, attr_extents)
2585 ),
2586 TP_fast_assign(
2587 __entry->dev = sc->mp->m_super->s_dev;
2588 __entry->ino = sc->sm->sm_ino;
2589 __entry->data_blocks = data_blocks;
2590 __entry->rt_blocks = rt_blocks;
2591 __entry->attr_blocks = attr_blocks;
2592 __entry->data_extents = data_extents;
2593 __entry->rt_extents = rt_extents;
2594 __entry->attr_extents = attr_extents;
2595 ),
2596 TP_printk("dev %d:%d ino 0x%llx dblocks 0x%llx rtblocks 0x%llx ablocks 0x%llx dextents %llu rtextents %llu aextents %u",
2597 MAJOR(__entry->dev), MINOR(__entry->dev),
2598 __entry->ino,
2599 __entry->data_blocks,
2600 __entry->rt_blocks,
2601 __entry->attr_blocks,
2602 __entry->data_extents,
2603 __entry->rt_extents,
2604 __entry->attr_extents)
2605);
2606
2607TRACE_EVENT(xrep_dinode_findmode_dirent,
2608 TP_PROTO(struct xfs_scrub *sc, struct xfs_inode *dp,
2609 unsigned int ftype),
2610 TP_ARGS(sc, dp, ftype),
2611 TP_STRUCT__entry(
2612 __field(dev_t, dev)
2613 __field(xfs_ino_t, ino)
2614 __field(xfs_ino_t, parent_ino)
2615 __field(unsigned int, ftype)
2616 ),
2617 TP_fast_assign(
2618 __entry->dev = sc->mp->m_super->s_dev;
2619 __entry->ino = sc->sm->sm_ino;
2620 __entry->parent_ino = dp->i_ino;
2621 __entry->ftype = ftype;
2622 ),
2623 TP_printk("dev %d:%d ino 0x%llx parent_ino 0x%llx ftype '%s'",
2624 MAJOR(__entry->dev), MINOR(__entry->dev),
2625 __entry->ino,
2626 __entry->parent_ino,
2627 __print_symbolic(__entry->ftype, XFS_DIR3_FTYPE_STR))
2628);
2629
2630TRACE_EVENT(xrep_dinode_findmode_dirent_inval,
2631 TP_PROTO(struct xfs_scrub *sc, struct xfs_inode *dp,
2632 unsigned int ftype, unsigned int found_ftype),
2633 TP_ARGS(sc, dp, ftype, found_ftype),
2634 TP_STRUCT__entry(
2635 __field(dev_t, dev)
2636 __field(xfs_ino_t, ino)
2637 __field(xfs_ino_t, parent_ino)
2638 __field(unsigned int, ftype)
2639 __field(unsigned int, found_ftype)
2640 ),
2641 TP_fast_assign(
2642 __entry->dev = sc->mp->m_super->s_dev;
2643 __entry->ino = sc->sm->sm_ino;
2644 __entry->parent_ino = dp->i_ino;
2645 __entry->ftype = ftype;
2646 __entry->found_ftype = found_ftype;
2647 ),
2648 TP_printk("dev %d:%d ino 0x%llx parent_ino 0x%llx ftype '%s' found_ftype '%s'",
2649 MAJOR(__entry->dev), MINOR(__entry->dev),
2650 __entry->ino,
2651 __entry->parent_ino,
2652 __print_symbolic(__entry->ftype, XFS_DIR3_FTYPE_STR),
2653 __print_symbolic(__entry->found_ftype, XFS_DIR3_FTYPE_STR))
2654);
2655
2656TRACE_EVENT(xrep_cow_mark_file_range,
2657 TP_PROTO(struct xfs_inode *ip, xfs_fsblock_t startblock,
2658 xfs_fileoff_t startoff, xfs_filblks_t blockcount),
2659 TP_ARGS(ip, startblock, startoff, blockcount),
2660 TP_STRUCT__entry(
2661 __field(dev_t, dev)
2662 __field(xfs_ino_t, ino)
2663 __field(xfs_fsblock_t, startblock)
2664 __field(xfs_fileoff_t, startoff)
2665 __field(xfs_filblks_t, blockcount)
2666 ),
2667 TP_fast_assign(
2668 __entry->dev = ip->i_mount->m_super->s_dev;
2669 __entry->ino = ip->i_ino;
2670 __entry->startoff = startoff;
2671 __entry->startblock = startblock;
2672 __entry->blockcount = blockcount;
2673 ),
2674 TP_printk("dev %d:%d ino 0x%llx fileoff 0x%llx startblock 0x%llx fsbcount 0x%llx",
2675 MAJOR(__entry->dev), MINOR(__entry->dev),
2676 __entry->ino,
2677 __entry->startoff,
2678 __entry->startblock,
2679 __entry->blockcount)
2680);
2681
2682TRACE_EVENT(xrep_cow_replace_mapping,
2683 TP_PROTO(struct xfs_inode *ip, const struct xfs_bmbt_irec *irec,
2684 xfs_fsblock_t new_startblock, xfs_extlen_t new_blockcount),
2685 TP_ARGS(ip, irec, new_startblock, new_blockcount),
2686 TP_STRUCT__entry(
2687 __field(dev_t, dev)
2688 __field(xfs_ino_t, ino)
2689 __field(xfs_fsblock_t, startblock)
2690 __field(xfs_fileoff_t, startoff)
2691 __field(xfs_filblks_t, blockcount)
2692 __field(xfs_exntst_t, state)
2693 __field(xfs_fsblock_t, new_startblock)
2694 __field(xfs_extlen_t, new_blockcount)
2695 ),
2696 TP_fast_assign(
2697 __entry->dev = ip->i_mount->m_super->s_dev;
2698 __entry->ino = ip->i_ino;
2699 __entry->startoff = irec->br_startoff;
2700 __entry->startblock = irec->br_startblock;
2701 __entry->blockcount = irec->br_blockcount;
2702 __entry->state = irec->br_state;
2703 __entry->new_startblock = new_startblock;
2704 __entry->new_blockcount = new_blockcount;
2705 ),
2706 TP_printk("dev %d:%d ino 0x%llx startoff 0x%llx startblock 0x%llx fsbcount 0x%llx state 0x%x new_startblock 0x%llx new_fsbcount 0x%x",
2707 MAJOR(__entry->dev), MINOR(__entry->dev),
2708 __entry->ino,
2709 __entry->startoff,
2710 __entry->startblock,
2711 __entry->blockcount,
2712 __entry->state,
2713 __entry->new_startblock,
2714 __entry->new_blockcount)
2715);
2716
2717TRACE_EVENT(xrep_cow_free_staging,
2718 TP_PROTO(const struct xfs_perag *pag, xfs_agblock_t agbno,
2719 xfs_extlen_t blockcount),
2720 TP_ARGS(pag, agbno, blockcount),
2721 TP_STRUCT__entry(
2722 __field(dev_t, dev)
2723 __field(xfs_agnumber_t, agno)
2724 __field(xfs_agblock_t, agbno)
2725 __field(xfs_extlen_t, blockcount)
2726 ),
2727 TP_fast_assign(
2728 __entry->dev = pag_mount(pag)->m_super->s_dev;
2729 __entry->agno = pag_agno(pag);
2730 __entry->agbno = agbno;
2731 __entry->blockcount = blockcount;
2732 ),
2733 TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x",
2734 MAJOR(__entry->dev), MINOR(__entry->dev),
2735 __entry->agno,
2736 __entry->agbno,
2737 __entry->blockcount)
2738);
2739
2740#ifdef CONFIG_XFS_QUOTA
2741DECLARE_EVENT_CLASS(xrep_dquot_class,
2742 TP_PROTO(struct xfs_mount *mp, uint8_t type, uint32_t id),
2743 TP_ARGS(mp, type, id),
2744 TP_STRUCT__entry(
2745 __field(dev_t, dev)
2746 __field(uint8_t, type)
2747 __field(uint32_t, id)
2748 ),
2749 TP_fast_assign(
2750 __entry->dev = mp->m_super->s_dev;
2751 __entry->id = id;
2752 __entry->type = type;
2753 ),
2754 TP_printk("dev %d:%d type %s id 0x%x",
2755 MAJOR(__entry->dev), MINOR(__entry->dev),
2756 __print_flags(__entry->type, "|", XFS_DQTYPE_STRINGS),
2757 __entry->id)
2758);
2759
2760#define DEFINE_XREP_DQUOT_EVENT(name) \
2761DEFINE_EVENT(xrep_dquot_class, name, \
2762 TP_PROTO(struct xfs_mount *mp, uint8_t type, uint32_t id), \
2763 TP_ARGS(mp, type, id))
2764DEFINE_XREP_DQUOT_EVENT(xrep_dquot_item);
2765DEFINE_XREP_DQUOT_EVENT(xrep_disk_dquot);
2766DEFINE_XREP_DQUOT_EVENT(xrep_dquot_item_fill_bmap_hole);
2767DEFINE_XREP_DQUOT_EVENT(xrep_quotacheck_dquot);
2768#endif /* CONFIG_XFS_QUOTA */
2769
2770DEFINE_SCRUB_NLINKS_DIFF_EVENT(xrep_nlinks_update_inode);
2771DEFINE_SCRUB_NLINKS_DIFF_EVENT(xrep_nlinks_unfixable_inode);
2772
2773TRACE_EVENT(xrep_rmap_live_update,
2774 TP_PROTO(const struct xfs_group *xg, unsigned int op,
2775 const struct xfs_rmap_update_params *p),
2776 TP_ARGS(xg, op, p),
2777 TP_STRUCT__entry(
2778 __field(dev_t, dev)
2779 __field(enum xfs_group_type, type)
2780 __field(xfs_agnumber_t, agno)
2781 __field(unsigned int, op)
2782 __field(xfs_agblock_t, agbno)
2783 __field(xfs_extlen_t, len)
2784 __field(uint64_t, owner)
2785 __field(uint64_t, offset)
2786 __field(unsigned int, flags)
2787 ),
2788 TP_fast_assign(
2789 __entry->dev = xg->xg_mount->m_super->s_dev;
2790 __entry->type = xg->xg_type;
2791 __entry->agno = xg->xg_gno;
2792 __entry->op = op;
2793 __entry->agbno = p->startblock;
2794 __entry->len = p->blockcount;
2795 xfs_owner_info_unpack(&p->oinfo, &__entry->owner,
2796 &__entry->offset, &__entry->flags);
2797 if (p->unwritten)
2798 __entry->flags |= XFS_RMAP_UNWRITTEN;
2799 ),
2800 TP_printk("dev %d:%d %sno 0x%x op %d %sbno 0x%x fsbcount 0x%x owner 0x%llx fileoff 0x%llx flags 0x%x",
2801 MAJOR(__entry->dev), MINOR(__entry->dev),
2802 __print_symbolic(__entry->type, XG_TYPE_STRINGS),
2803 __entry->agno,
2804 __entry->op,
2805 __print_symbolic(__entry->type, XG_TYPE_STRINGS),
2806 __entry->agbno,
2807 __entry->len,
2808 __entry->owner,
2809 __entry->offset,
2810 __entry->flags)
2811);
2812
2813TRACE_EVENT(xrep_tempfile_create,
2814 TP_PROTO(struct xfs_scrub *sc),
2815 TP_ARGS(sc),
2816 TP_STRUCT__entry(
2817 __field(dev_t, dev)
2818 __field(xfs_ino_t, ino)
2819 __field(unsigned int, type)
2820 __field(xfs_agnumber_t, agno)
2821 __field(xfs_ino_t, inum)
2822 __field(unsigned int, gen)
2823 __field(unsigned int, flags)
2824 __field(xfs_ino_t, temp_inum)
2825 ),
2826 TP_fast_assign(
2827 __entry->dev = sc->mp->m_super->s_dev;
2828 __entry->ino = sc->file ? XFS_I(file_inode(sc->file))->i_ino : 0;
2829 __entry->type = sc->sm->sm_type;
2830 __entry->agno = sc->sm->sm_agno;
2831 __entry->inum = sc->sm->sm_ino;
2832 __entry->gen = sc->sm->sm_gen;
2833 __entry->flags = sc->sm->sm_flags;
2834 __entry->temp_inum = sc->tempip->i_ino;
2835 ),
2836 TP_printk("dev %d:%d ino 0x%llx type %s inum 0x%llx gen 0x%x flags 0x%x temp_inum 0x%llx",
2837 MAJOR(__entry->dev), MINOR(__entry->dev),
2838 __entry->ino,
2839 __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),
2840 __entry->inum,
2841 __entry->gen,
2842 __entry->flags,
2843 __entry->temp_inum)
2844);
2845
2846DECLARE_EVENT_CLASS(xrep_tempfile_class,
2847 TP_PROTO(struct xfs_scrub *sc, int whichfork,
2848 struct xfs_bmbt_irec *irec),
2849 TP_ARGS(sc, whichfork, irec),
2850 TP_STRUCT__entry(
2851 __field(dev_t, dev)
2852 __field(xfs_ino_t, ino)
2853 __field(int, whichfork)
2854 __field(xfs_fileoff_t, lblk)
2855 __field(xfs_filblks_t, len)
2856 __field(xfs_fsblock_t, pblk)
2857 __field(int, state)
2858 ),
2859 TP_fast_assign(
2860 __entry->dev = sc->mp->m_super->s_dev;
2861 __entry->ino = sc->tempip->i_ino;
2862 __entry->whichfork = whichfork;
2863 __entry->lblk = irec->br_startoff;
2864 __entry->len = irec->br_blockcount;
2865 __entry->pblk = irec->br_startblock;
2866 __entry->state = irec->br_state;
2867 ),
2868 TP_printk("dev %d:%d ino 0x%llx whichfork %s fileoff 0x%llx fsbcount 0x%llx startblock 0x%llx state %d",
2869 MAJOR(__entry->dev), MINOR(__entry->dev),
2870 __entry->ino,
2871 __print_symbolic(__entry->whichfork, XFS_WHICHFORK_STRINGS),
2872 __entry->lblk,
2873 __entry->len,
2874 __entry->pblk,
2875 __entry->state)
2876);
2877#define DEFINE_XREP_TEMPFILE_EVENT(name) \
2878DEFINE_EVENT(xrep_tempfile_class, name, \
2879 TP_PROTO(struct xfs_scrub *sc, int whichfork, \
2880 struct xfs_bmbt_irec *irec), \
2881 TP_ARGS(sc, whichfork, irec))
2882DEFINE_XREP_TEMPFILE_EVENT(xrep_tempfile_prealloc);
2883DEFINE_XREP_TEMPFILE_EVENT(xrep_tempfile_copyin);
2884
2885TRACE_EVENT(xreap_ifork_extent,
2886 TP_PROTO(struct xfs_scrub *sc, struct xfs_inode *ip, int whichfork,
2887 const struct xfs_bmbt_irec *irec),
2888 TP_ARGS(sc, ip, whichfork, irec),
2889 TP_STRUCT__entry(
2890 __field(dev_t, dev)
2891 __field(xfs_ino_t, ino)
2892 __field(int, whichfork)
2893 __field(xfs_fileoff_t, fileoff)
2894 __field(xfs_filblks_t, len)
2895 __field(xfs_agnumber_t, agno)
2896 __field(xfs_agblock_t, agbno)
2897 __field(int, state)
2898 ),
2899 TP_fast_assign(
2900 __entry->dev = sc->mp->m_super->s_dev;
2901 __entry->ino = ip->i_ino;
2902 __entry->whichfork = whichfork;
2903 __entry->fileoff = irec->br_startoff;
2904 __entry->len = irec->br_blockcount;
2905 __entry->agno = XFS_FSB_TO_AGNO(sc->mp, irec->br_startblock);
2906 __entry->agbno = XFS_FSB_TO_AGBNO(sc->mp, irec->br_startblock);
2907 __entry->state = irec->br_state;
2908 ),
2909 TP_printk("dev %d:%d ip 0x%llx whichfork %s agno 0x%x agbno 0x%x fileoff 0x%llx fsbcount 0x%llx state 0x%x",
2910 MAJOR(__entry->dev), MINOR(__entry->dev),
2911 __entry->ino,
2912 __print_symbolic(__entry->whichfork, XFS_WHICHFORK_STRINGS),
2913 __entry->agno,
2914 __entry->agbno,
2915 __entry->fileoff,
2916 __entry->len,
2917 __entry->state)
2918);
2919
2920TRACE_EVENT(xreap_bmapi_binval_scan,
2921 TP_PROTO(struct xfs_scrub *sc, const struct xfs_bmbt_irec *irec,
2922 xfs_extlen_t scan_blocks),
2923 TP_ARGS(sc, irec, scan_blocks),
2924 TP_STRUCT__entry(
2925 __field(dev_t, dev)
2926 __field(xfs_filblks_t, len)
2927 __field(xfs_agnumber_t, agno)
2928 __field(xfs_agblock_t, agbno)
2929 __field(xfs_extlen_t, scan_blocks)
2930 ),
2931 TP_fast_assign(
2932 __entry->dev = sc->mp->m_super->s_dev;
2933 __entry->len = irec->br_blockcount;
2934 __entry->agno = XFS_FSB_TO_AGNO(sc->mp, irec->br_startblock);
2935 __entry->agbno = XFS_FSB_TO_AGBNO(sc->mp, irec->br_startblock);
2936 __entry->scan_blocks = scan_blocks;
2937 ),
2938 TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%llx scan_blocks 0x%x",
2939 MAJOR(__entry->dev), MINOR(__entry->dev),
2940 __entry->agno,
2941 __entry->agbno,
2942 __entry->len,
2943 __entry->scan_blocks)
2944);
2945
2946TRACE_EVENT(xrep_xattr_recover_leafblock,
2947 TP_PROTO(struct xfs_inode *ip, xfs_dablk_t dabno, uint16_t magic),
2948 TP_ARGS(ip, dabno, magic),
2949 TP_STRUCT__entry(
2950 __field(dev_t, dev)
2951 __field(xfs_ino_t, ino)
2952 __field(xfs_dablk_t, dabno)
2953 __field(uint16_t, magic)
2954 ),
2955 TP_fast_assign(
2956 __entry->dev = ip->i_mount->m_super->s_dev;
2957 __entry->ino = ip->i_ino;
2958 __entry->dabno = dabno;
2959 __entry->magic = magic;
2960 ),
2961 TP_printk("dev %d:%d ino 0x%llx dablk 0x%x magic 0x%x",
2962 MAJOR(__entry->dev), MINOR(__entry->dev),
2963 __entry->ino,
2964 __entry->dabno,
2965 __entry->magic)
2966);
2967
2968DECLARE_EVENT_CLASS(xrep_xattr_salvage_class,
2969 TP_PROTO(struct xfs_inode *ip, unsigned int flags, char *name,
2970 unsigned int namelen, unsigned int valuelen),
2971 TP_ARGS(ip, flags, name, namelen, valuelen),
2972 TP_STRUCT__entry(
2973 __field(dev_t, dev)
2974 __field(xfs_ino_t, ino)
2975 __field(unsigned int, flags)
2976 __field(unsigned int, namelen)
2977 __dynamic_array(char, name, namelen)
2978 __field(unsigned int, valuelen)
2979 ),
2980 TP_fast_assign(
2981 __entry->dev = ip->i_mount->m_super->s_dev;
2982 __entry->ino = ip->i_ino;
2983 __entry->flags = flags;
2984 __entry->namelen = namelen;
2985 memcpy(__get_str(name), name, namelen);
2986 __entry->valuelen = valuelen;
2987 ),
2988 TP_printk("dev %d:%d ino 0x%llx flags %s name '%.*s' valuelen 0x%x",
2989 MAJOR(__entry->dev), MINOR(__entry->dev),
2990 __entry->ino,
2991 __print_flags(__entry->flags, "|", XFS_ATTR_NAMESPACE_STR),
2992 __entry->namelen,
2993 __get_str(name),
2994 __entry->valuelen)
2995);
2996#define DEFINE_XREP_XATTR_SALVAGE_EVENT(name) \
2997DEFINE_EVENT(xrep_xattr_salvage_class, name, \
2998 TP_PROTO(struct xfs_inode *ip, unsigned int flags, char *name, \
2999 unsigned int namelen, unsigned int valuelen), \
3000 TP_ARGS(ip, flags, name, namelen, valuelen))
3001DEFINE_XREP_XATTR_SALVAGE_EVENT(xrep_xattr_salvage_rec);
3002DEFINE_XREP_XATTR_SALVAGE_EVENT(xrep_xattr_insert_rec);
3003DEFINE_XREP_XATTR_SALVAGE_EVENT(xrep_parent_stash_xattr);
3004DEFINE_XREP_XATTR_SALVAGE_EVENT(xrep_parent_insert_xattr);
3005
3006DECLARE_EVENT_CLASS(xrep_pptr_salvage_class,
3007 TP_PROTO(struct xfs_inode *ip, unsigned int flags, const void *name,
3008 unsigned int namelen, const void *value, unsigned int valuelen),
3009 TP_ARGS(ip, flags, name, namelen, value, valuelen),
3010 TP_STRUCT__entry(
3011 __field(dev_t, dev)
3012 __field(xfs_ino_t, ino)
3013 __field(xfs_ino_t, parent_ino)
3014 __field(unsigned int, parent_gen)
3015 __field(unsigned int, namelen)
3016 __dynamic_array(char, name, namelen)
3017 ),
3018 TP_fast_assign(
3019 const struct xfs_parent_rec *rec = value;
3020
3021 __entry->dev = ip->i_mount->m_super->s_dev;
3022 __entry->ino = ip->i_ino;
3023 __entry->parent_ino = be64_to_cpu(rec->p_ino);
3024 __entry->parent_gen = be32_to_cpu(rec->p_gen);
3025 __entry->namelen = namelen;
3026 memcpy(__get_str(name), name, namelen);
3027 ),
3028 TP_printk("dev %d:%d ino 0x%llx parent_ino 0x%llx parent_gen 0x%x name '%.*s'",
3029 MAJOR(__entry->dev), MINOR(__entry->dev),
3030 __entry->ino,
3031 __entry->parent_ino,
3032 __entry->parent_gen,
3033 __entry->namelen,
3034 __get_str(name))
3035)
3036#define DEFINE_XREP_PPTR_SALVAGE_EVENT(name) \
3037DEFINE_EVENT(xrep_pptr_salvage_class, name, \
3038 TP_PROTO(struct xfs_inode *ip, unsigned int flags, const void *name, \
3039 unsigned int namelen, const void *value, unsigned int valuelen), \
3040 TP_ARGS(ip, flags, name, namelen, value, valuelen))
3041DEFINE_XREP_PPTR_SALVAGE_EVENT(xrep_xattr_salvage_pptr);
3042DEFINE_XREP_PPTR_SALVAGE_EVENT(xrep_xattr_insert_pptr);
3043
3044DECLARE_EVENT_CLASS(xrep_xattr_class,
3045 TP_PROTO(struct xfs_inode *ip, struct xfs_inode *arg_ip),
3046 TP_ARGS(ip, arg_ip),
3047 TP_STRUCT__entry(
3048 __field(dev_t, dev)
3049 __field(xfs_ino_t, ino)
3050 __field(xfs_ino_t, src_ino)
3051 ),
3052 TP_fast_assign(
3053 __entry->dev = ip->i_mount->m_super->s_dev;
3054 __entry->ino = ip->i_ino;
3055 __entry->src_ino = arg_ip->i_ino;
3056 ),
3057 TP_printk("dev %d:%d ino 0x%llx src 0x%llx",
3058 MAJOR(__entry->dev), MINOR(__entry->dev),
3059 __entry->ino,
3060 __entry->src_ino)
3061)
3062#define DEFINE_XREP_XATTR_EVENT(name) \
3063DEFINE_EVENT(xrep_xattr_class, name, \
3064 TP_PROTO(struct xfs_inode *ip, struct xfs_inode *arg_ip), \
3065 TP_ARGS(ip, arg_ip))
3066DEFINE_XREP_XATTR_EVENT(xrep_xattr_rebuild_tree);
3067DEFINE_XREP_XATTR_EVENT(xrep_xattr_reset_fork);
3068DEFINE_XREP_XATTR_EVENT(xrep_xattr_full_reset);
3069
3070DECLARE_EVENT_CLASS(xrep_xattr_pptr_scan_class,
3071 TP_PROTO(struct xfs_inode *ip, const struct xfs_inode *dp,
3072 const struct xfs_name *name),
3073 TP_ARGS(ip, dp, name),
3074 TP_STRUCT__entry(
3075 __field(dev_t, dev)
3076 __field(xfs_ino_t, ino)
3077 __field(xfs_ino_t, parent_ino)
3078 __field(unsigned int, parent_gen)
3079 __field(unsigned int, namelen)
3080 __dynamic_array(char, name, name->len)
3081 ),
3082 TP_fast_assign(
3083 __entry->dev = ip->i_mount->m_super->s_dev;
3084 __entry->ino = ip->i_ino;
3085 __entry->parent_ino = dp->i_ino;
3086 __entry->parent_gen = VFS_IC(dp)->i_generation;
3087 __entry->namelen = name->len;
3088 memcpy(__get_str(name), name->name, name->len);
3089 ),
3090 TP_printk("dev %d:%d ino 0x%llx parent_ino 0x%llx parent_gen 0x%x name '%.*s'",
3091 MAJOR(__entry->dev), MINOR(__entry->dev),
3092 __entry->ino,
3093 __entry->parent_ino,
3094 __entry->parent_gen,
3095 __entry->namelen,
3096 __get_str(name))
3097)
3098#define DEFINE_XREP_XATTR_PPTR_SCAN_EVENT(name) \
3099DEFINE_EVENT(xrep_xattr_pptr_scan_class, name, \
3100 TP_PROTO(struct xfs_inode *ip, const struct xfs_inode *dp, \
3101 const struct xfs_name *name), \
3102 TP_ARGS(ip, dp, name))
3103DEFINE_XREP_XATTR_PPTR_SCAN_EVENT(xrep_xattr_stash_parentadd);
3104DEFINE_XREP_XATTR_PPTR_SCAN_EVENT(xrep_xattr_stash_parentremove);
3105
3106TRACE_EVENT(xrep_dir_recover_dirblock,
3107 TP_PROTO(struct xfs_inode *dp, xfs_dablk_t dabno, uint32_t magic,
3108 uint32_t magic_guess),
3109 TP_ARGS(dp, dabno, magic, magic_guess),
3110 TP_STRUCT__entry(
3111 __field(dev_t, dev)
3112 __field(xfs_ino_t, dir_ino)
3113 __field(xfs_dablk_t, dabno)
3114 __field(uint32_t, magic)
3115 __field(uint32_t, magic_guess)
3116 ),
3117 TP_fast_assign(
3118 __entry->dev = dp->i_mount->m_super->s_dev;
3119 __entry->dir_ino = dp->i_ino;
3120 __entry->dabno = dabno;
3121 __entry->magic = magic;
3122 __entry->magic_guess = magic_guess;
3123 ),
3124 TP_printk("dev %d:%d dir 0x%llx dablk 0x%x magic 0x%x magic_guess 0x%x",
3125 MAJOR(__entry->dev), MINOR(__entry->dev),
3126 __entry->dir_ino,
3127 __entry->dabno,
3128 __entry->magic,
3129 __entry->magic_guess)
3130);
3131
3132DECLARE_EVENT_CLASS(xrep_dir_class,
3133 TP_PROTO(struct xfs_inode *dp, xfs_ino_t parent_ino),
3134 TP_ARGS(dp, parent_ino),
3135 TP_STRUCT__entry(
3136 __field(dev_t, dev)
3137 __field(xfs_ino_t, dir_ino)
3138 __field(xfs_ino_t, parent_ino)
3139 ),
3140 TP_fast_assign(
3141 __entry->dev = dp->i_mount->m_super->s_dev;
3142 __entry->dir_ino = dp->i_ino;
3143 __entry->parent_ino = parent_ino;
3144 ),
3145 TP_printk("dev %d:%d dir 0x%llx parent 0x%llx",
3146 MAJOR(__entry->dev), MINOR(__entry->dev),
3147 __entry->dir_ino,
3148 __entry->parent_ino)
3149)
3150#define DEFINE_XREP_DIR_EVENT(name) \
3151DEFINE_EVENT(xrep_dir_class, name, \
3152 TP_PROTO(struct xfs_inode *dp, xfs_ino_t parent_ino), \
3153 TP_ARGS(dp, parent_ino))
3154DEFINE_XREP_DIR_EVENT(xrep_dir_rebuild_tree);
3155DEFINE_XREP_DIR_EVENT(xrep_dir_reset_fork);
3156DEFINE_XREP_DIR_EVENT(xrep_parent_reset_dotdot);
3157
3158DECLARE_EVENT_CLASS(xrep_dirent_class,
3159 TP_PROTO(struct xfs_inode *dp, const struct xfs_name *name,
3160 xfs_ino_t ino),
3161 TP_ARGS(dp, name, ino),
3162 TP_STRUCT__entry(
3163 __field(dev_t, dev)
3164 __field(xfs_ino_t, dir_ino)
3165 __field(unsigned int, namelen)
3166 __dynamic_array(char, name, name->len)
3167 __field(xfs_ino_t, ino)
3168 __field(uint8_t, ftype)
3169 ),
3170 TP_fast_assign(
3171 __entry->dev = dp->i_mount->m_super->s_dev;
3172 __entry->dir_ino = dp->i_ino;
3173 __entry->namelen = name->len;
3174 memcpy(__get_str(name), name->name, name->len);
3175 __entry->ino = ino;
3176 __entry->ftype = name->type;
3177 ),
3178 TP_printk("dev %d:%d dir 0x%llx ftype %s name '%.*s' ino 0x%llx",
3179 MAJOR(__entry->dev), MINOR(__entry->dev),
3180 __entry->dir_ino,
3181 __print_symbolic(__entry->ftype, XFS_DIR3_FTYPE_STR),
3182 __entry->namelen,
3183 __get_str(name),
3184 __entry->ino)
3185)
3186#define DEFINE_XREP_DIRENT_EVENT(name) \
3187DEFINE_EVENT(xrep_dirent_class, name, \
3188 TP_PROTO(struct xfs_inode *dp, const struct xfs_name *name, \
3189 xfs_ino_t ino), \
3190 TP_ARGS(dp, name, ino))
3191DEFINE_XREP_DIRENT_EVENT(xrep_dir_salvage_entry);
3192DEFINE_XREP_DIRENT_EVENT(xrep_dir_stash_createname);
3193DEFINE_XREP_DIRENT_EVENT(xrep_dir_replay_createname);
3194DEFINE_XREP_DIRENT_EVENT(xrep_adoption_reparent);
3195DEFINE_XREP_DIRENT_EVENT(xrep_dir_stash_removename);
3196DEFINE_XREP_DIRENT_EVENT(xrep_dir_replay_removename);
3197
3198DECLARE_EVENT_CLASS(xrep_adoption_class,
3199 TP_PROTO(struct xfs_inode *dp, struct xfs_inode *ip, bool moved),
3200 TP_ARGS(dp, ip, moved),
3201 TP_STRUCT__entry(
3202 __field(dev_t, dev)
3203 __field(xfs_ino_t, dir_ino)
3204 __field(xfs_ino_t, child_ino)
3205 __field(bool, moved)
3206 ),
3207 TP_fast_assign(
3208 __entry->dev = dp->i_mount->m_super->s_dev;
3209 __entry->dir_ino = dp->i_ino;
3210 __entry->child_ino = ip->i_ino;
3211 __entry->moved = moved;
3212 ),
3213 TP_printk("dev %d:%d dir 0x%llx child 0x%llx moved? %d",
3214 MAJOR(__entry->dev), MINOR(__entry->dev),
3215 __entry->dir_ino,
3216 __entry->child_ino,
3217 __entry->moved)
3218);
3219#define DEFINE_XREP_ADOPTION_EVENT(name) \
3220DEFINE_EVENT(xrep_adoption_class, name, \
3221 TP_PROTO(struct xfs_inode *dp, struct xfs_inode *ip, bool moved), \
3222 TP_ARGS(dp, ip, moved))
3223DEFINE_XREP_ADOPTION_EVENT(xrep_adoption_trans_roll);
3224
3225DECLARE_EVENT_CLASS(xrep_parent_salvage_class,
3226 TP_PROTO(struct xfs_inode *dp, xfs_ino_t ino),
3227 TP_ARGS(dp, ino),
3228 TP_STRUCT__entry(
3229 __field(dev_t, dev)
3230 __field(xfs_ino_t, dir_ino)
3231 __field(xfs_ino_t, ino)
3232 ),
3233 TP_fast_assign(
3234 __entry->dev = dp->i_mount->m_super->s_dev;
3235 __entry->dir_ino = dp->i_ino;
3236 __entry->ino = ino;
3237 ),
3238 TP_printk("dev %d:%d dir 0x%llx parent 0x%llx",
3239 MAJOR(__entry->dev), MINOR(__entry->dev),
3240 __entry->dir_ino,
3241 __entry->ino)
3242)
3243#define DEFINE_XREP_PARENT_SALVAGE_EVENT(name) \
3244DEFINE_EVENT(xrep_parent_salvage_class, name, \
3245 TP_PROTO(struct xfs_inode *dp, xfs_ino_t ino), \
3246 TP_ARGS(dp, ino))
3247DEFINE_XREP_PARENT_SALVAGE_EVENT(xrep_dir_salvaged_parent);
3248DEFINE_XREP_PARENT_SALVAGE_EVENT(xrep_findparent_dirent);
3249DEFINE_XREP_PARENT_SALVAGE_EVENT(xrep_findparent_from_dcache);
3250
3251DECLARE_EVENT_CLASS(xrep_pptr_class,
3252 TP_PROTO(struct xfs_inode *ip, const struct xfs_name *name,
3253 const struct xfs_parent_rec *pptr),
3254 TP_ARGS(ip, name, pptr),
3255 TP_STRUCT__entry(
3256 __field(dev_t, dev)
3257 __field(xfs_ino_t, ino)
3258 __field(xfs_ino_t, parent_ino)
3259 __field(unsigned int, parent_gen)
3260 __field(unsigned int, namelen)
3261 __dynamic_array(char, name, name->len)
3262 ),
3263 TP_fast_assign(
3264 __entry->dev = ip->i_mount->m_super->s_dev;
3265 __entry->ino = ip->i_ino;
3266 __entry->parent_ino = be64_to_cpu(pptr->p_ino);
3267 __entry->parent_gen = be32_to_cpu(pptr->p_gen);
3268 __entry->namelen = name->len;
3269 memcpy(__get_str(name), name->name, name->len);
3270 ),
3271 TP_printk("dev %d:%d ino 0x%llx parent_ino 0x%llx parent_gen 0x%x name '%.*s'",
3272 MAJOR(__entry->dev), MINOR(__entry->dev),
3273 __entry->ino,
3274 __entry->parent_ino,
3275 __entry->parent_gen,
3276 __entry->namelen,
3277 __get_str(name))
3278)
3279#define DEFINE_XREP_PPTR_EVENT(name) \
3280DEFINE_EVENT(xrep_pptr_class, name, \
3281 TP_PROTO(struct xfs_inode *ip, const struct xfs_name *name, \
3282 const struct xfs_parent_rec *pptr), \
3283 TP_ARGS(ip, name, pptr))
3284DEFINE_XREP_PPTR_EVENT(xrep_xattr_replay_parentadd);
3285DEFINE_XREP_PPTR_EVENT(xrep_xattr_replay_parentremove);
3286DEFINE_XREP_PPTR_EVENT(xrep_parent_replay_parentadd);
3287DEFINE_XREP_PPTR_EVENT(xrep_parent_replay_parentremove);
3288
3289DECLARE_EVENT_CLASS(xrep_pptr_scan_class,
3290 TP_PROTO(struct xfs_inode *ip, const struct xfs_inode *dp,
3291 const struct xfs_name *name),
3292 TP_ARGS(ip, dp, name),
3293 TP_STRUCT__entry(
3294 __field(dev_t, dev)
3295 __field(xfs_ino_t, ino)
3296 __field(xfs_ino_t, parent_ino)
3297 __field(unsigned int, parent_gen)
3298 __field(unsigned int, namelen)
3299 __dynamic_array(char, name, name->len)
3300 ),
3301 TP_fast_assign(
3302 __entry->dev = ip->i_mount->m_super->s_dev;
3303 __entry->ino = ip->i_ino;
3304 __entry->parent_ino = dp->i_ino;
3305 __entry->parent_gen = VFS_IC(dp)->i_generation;
3306 __entry->namelen = name->len;
3307 memcpy(__get_str(name), name->name, name->len);
3308 ),
3309 TP_printk("dev %d:%d ino 0x%llx parent_ino 0x%llx parent_gen 0x%x name '%.*s'",
3310 MAJOR(__entry->dev), MINOR(__entry->dev),
3311 __entry->ino,
3312 __entry->parent_ino,
3313 __entry->parent_gen,
3314 __entry->namelen,
3315 __get_str(name))
3316)
3317#define DEFINE_XREP_PPTR_SCAN_EVENT(name) \
3318DEFINE_EVENT(xrep_pptr_scan_class, name, \
3319 TP_PROTO(struct xfs_inode *ip, const struct xfs_inode *dp, \
3320 const struct xfs_name *name), \
3321 TP_ARGS(ip, dp, name))
3322DEFINE_XREP_PPTR_SCAN_EVENT(xrep_parent_stash_parentadd);
3323DEFINE_XREP_PPTR_SCAN_EVENT(xrep_parent_stash_parentremove);
3324
3325TRACE_EVENT(xrep_nlinks_set_record,
3326 TP_PROTO(struct xfs_mount *mp, xfs_ino_t ino,
3327 const struct xchk_nlink *obs),
3328 TP_ARGS(mp, ino, obs),
3329 TP_STRUCT__entry(
3330 __field(dev_t, dev)
3331 __field(xfs_ino_t, ino)
3332 __field(xfs_nlink_t, parents)
3333 __field(xfs_nlink_t, backrefs)
3334 __field(xfs_nlink_t, children)
3335 ),
3336 TP_fast_assign(
3337 __entry->dev = mp->m_super->s_dev;
3338 __entry->ino = ino;
3339 __entry->parents = obs->parents;
3340 __entry->backrefs = obs->backrefs;
3341 __entry->children = obs->children;
3342 ),
3343 TP_printk("dev %d:%d ino 0x%llx parents %u backrefs %u children %u",
3344 MAJOR(__entry->dev), MINOR(__entry->dev),
3345 __entry->ino,
3346 __entry->parents,
3347 __entry->backrefs,
3348 __entry->children)
3349);
3350
3351DECLARE_EVENT_CLASS(xrep_dentry_class,
3352 TP_PROTO(struct xfs_mount *mp, const struct dentry *dentry),
3353 TP_ARGS(mp, dentry),
3354 TP_STRUCT__entry(
3355 __field(dev_t, dev)
3356 __field(unsigned int, flags)
3357 __field(unsigned long, ino)
3358 __field(bool, positive)
3359 __field(unsigned long, parent_ino)
3360 __field(unsigned int, namelen)
3361 __dynamic_array(char, name, dentry->d_name.len)
3362 ),
3363 TP_fast_assign(
3364 __entry->dev = mp->m_super->s_dev;
3365 __entry->flags = dentry->d_flags;
3366 __entry->positive = d_is_positive(dentry);
3367 if (dentry->d_parent && d_inode(dentry->d_parent))
3368 __entry->parent_ino = d_inode(dentry->d_parent)->i_ino;
3369 else
3370 __entry->parent_ino = -1UL;
3371 __entry->ino = d_inode(dentry) ? d_inode(dentry)->i_ino : 0;
3372 __entry->namelen = dentry->d_name.len;
3373 memcpy(__get_str(name), dentry->d_name.name, dentry->d_name.len);
3374 ),
3375 TP_printk("dev %d:%d flags 0x%x positive? %d parent_ino 0x%lx ino 0x%lx name '%.*s'",
3376 MAJOR(__entry->dev), MINOR(__entry->dev),
3377 __entry->flags,
3378 __entry->positive,
3379 __entry->parent_ino,
3380 __entry->ino,
3381 __entry->namelen,
3382 __get_str(name))
3383);
3384#define DEFINE_REPAIR_DENTRY_EVENT(name) \
3385DEFINE_EVENT(xrep_dentry_class, name, \
3386 TP_PROTO(struct xfs_mount *mp, const struct dentry *dentry), \
3387 TP_ARGS(mp, dentry))
3388DEFINE_REPAIR_DENTRY_EVENT(xrep_adoption_check_child);
3389DEFINE_REPAIR_DENTRY_EVENT(xrep_adoption_invalidate_child);
3390DEFINE_REPAIR_DENTRY_EVENT(xrep_dirtree_delete_child);
3391
3392TRACE_EVENT(xrep_symlink_salvage_target,
3393 TP_PROTO(struct xfs_inode *ip, char *target, unsigned int targetlen),
3394 TP_ARGS(ip, target, targetlen),
3395 TP_STRUCT__entry(
3396 __field(dev_t, dev)
3397 __field(xfs_ino_t, ino)
3398 __field(unsigned int, targetlen)
3399 __dynamic_array(char, target, targetlen + 1)
3400 ),
3401 TP_fast_assign(
3402 __entry->dev = ip->i_mount->m_super->s_dev;
3403 __entry->ino = ip->i_ino;
3404 __entry->targetlen = targetlen;
3405 memcpy(__get_str(target), target, targetlen);
3406 __get_str(target)[targetlen] = 0;
3407 ),
3408 TP_printk("dev %d:%d ip 0x%llx target '%.*s'",
3409 MAJOR(__entry->dev), MINOR(__entry->dev),
3410 __entry->ino,
3411 __entry->targetlen,
3412 __get_str(target))
3413);
3414
3415DECLARE_EVENT_CLASS(xrep_symlink_class,
3416 TP_PROTO(struct xfs_inode *ip),
3417 TP_ARGS(ip),
3418 TP_STRUCT__entry(
3419 __field(dev_t, dev)
3420 __field(xfs_ino_t, ino)
3421 ),
3422 TP_fast_assign(
3423 __entry->dev = ip->i_mount->m_super->s_dev;
3424 __entry->ino = ip->i_ino;
3425 ),
3426 TP_printk("dev %d:%d ip 0x%llx",
3427 MAJOR(__entry->dev), MINOR(__entry->dev),
3428 __entry->ino)
3429);
3430
3431#define DEFINE_XREP_SYMLINK_EVENT(name) \
3432DEFINE_EVENT(xrep_symlink_class, name, \
3433 TP_PROTO(struct xfs_inode *ip), \
3434 TP_ARGS(ip))
3435DEFINE_XREP_SYMLINK_EVENT(xrep_symlink_rebuild);
3436DEFINE_XREP_SYMLINK_EVENT(xrep_symlink_reset_fork);
3437
3438TRACE_EVENT(xrep_iunlink_visit,
3439 TP_PROTO(const struct xfs_perag *pag, unsigned int bucket,
3440 xfs_agino_t bucket_agino, struct xfs_inode *ip),
3441 TP_ARGS(pag, bucket, bucket_agino, ip),
3442 TP_STRUCT__entry(
3443 __field(dev_t, dev)
3444 __field(xfs_agnumber_t, agno)
3445 __field(xfs_agino_t, agino)
3446 __field(unsigned int, bucket)
3447 __field(xfs_agino_t, bucket_agino)
3448 __field(xfs_agino_t, prev_agino)
3449 __field(xfs_agino_t, next_agino)
3450 ),
3451 TP_fast_assign(
3452 __entry->dev = pag_mount(pag)->m_super->s_dev;
3453 __entry->agno = pag_agno(pag);
3454 __entry->agino = XFS_INO_TO_AGINO(pag_mount(pag), ip->i_ino);
3455 __entry->bucket = bucket;
3456 __entry->bucket_agino = bucket_agino;
3457 __entry->prev_agino = ip->i_prev_unlinked;
3458 __entry->next_agino = ip->i_next_unlinked;
3459 ),
3460 TP_printk("dev %d:%d agno 0x%x bucket %u agino 0x%x bucket_agino 0x%x prev_agino 0x%x next_agino 0x%x",
3461 MAJOR(__entry->dev), MINOR(__entry->dev),
3462 __entry->agno,
3463 __entry->bucket,
3464 __entry->agino,
3465 __entry->bucket_agino,
3466 __entry->prev_agino,
3467 __entry->next_agino)
3468);
3469
3470TRACE_EVENT(xrep_iunlink_reload_next,
3471 TP_PROTO(struct xfs_inode *ip, xfs_agino_t prev_agino),
3472 TP_ARGS(ip, prev_agino),
3473 TP_STRUCT__entry(
3474 __field(dev_t, dev)
3475 __field(xfs_agnumber_t, agno)
3476 __field(xfs_agino_t, agino)
3477 __field(xfs_agino_t, old_prev_agino)
3478 __field(xfs_agino_t, prev_agino)
3479 __field(xfs_agino_t, next_agino)
3480 __field(unsigned int, nlink)
3481 ),
3482 TP_fast_assign(
3483 __entry->dev = ip->i_mount->m_super->s_dev;
3484 __entry->agno = XFS_INO_TO_AGNO(ip->i_mount, ip->i_ino);
3485 __entry->agino = XFS_INO_TO_AGINO(ip->i_mount, ip->i_ino);
3486 __entry->old_prev_agino = ip->i_prev_unlinked;
3487 __entry->prev_agino = prev_agino;
3488 __entry->next_agino = ip->i_next_unlinked;
3489 __entry->nlink = VFS_I(ip)->i_nlink;
3490 ),
3491 TP_printk("dev %d:%d agno 0x%x bucket %u agino 0x%x nlink %u old_prev_agino %u prev_agino 0x%x next_agino 0x%x",
3492 MAJOR(__entry->dev), MINOR(__entry->dev),
3493 __entry->agno,
3494 __entry->agino % XFS_AGI_UNLINKED_BUCKETS,
3495 __entry->agino,
3496 __entry->nlink,
3497 __entry->old_prev_agino,
3498 __entry->prev_agino,
3499 __entry->next_agino)
3500);
3501
3502TRACE_EVENT(xrep_iunlink_reload_ondisk,
3503 TP_PROTO(struct xfs_inode *ip),
3504 TP_ARGS(ip),
3505 TP_STRUCT__entry(
3506 __field(dev_t, dev)
3507 __field(xfs_agnumber_t, agno)
3508 __field(xfs_agino_t, agino)
3509 __field(unsigned int, nlink)
3510 __field(xfs_agino_t, next_agino)
3511 ),
3512 TP_fast_assign(
3513 __entry->dev = ip->i_mount->m_super->s_dev;
3514 __entry->agno = XFS_INO_TO_AGNO(ip->i_mount, ip->i_ino);
3515 __entry->agino = XFS_INO_TO_AGINO(ip->i_mount, ip->i_ino);
3516 __entry->nlink = VFS_I(ip)->i_nlink;
3517 __entry->next_agino = ip->i_next_unlinked;
3518 ),
3519 TP_printk("dev %d:%d agno 0x%x bucket %u agino 0x%x nlink %u next_agino 0x%x",
3520 MAJOR(__entry->dev), MINOR(__entry->dev),
3521 __entry->agno,
3522 __entry->agino % XFS_AGI_UNLINKED_BUCKETS,
3523 __entry->agino,
3524 __entry->nlink,
3525 __entry->next_agino)
3526);
3527
3528TRACE_EVENT(xrep_iunlink_walk_ondisk_bucket,
3529 TP_PROTO(const struct xfs_perag *pag, unsigned int bucket,
3530 xfs_agino_t prev_agino, xfs_agino_t next_agino),
3531 TP_ARGS(pag, bucket, prev_agino, next_agino),
3532 TP_STRUCT__entry(
3533 __field(dev_t, dev)
3534 __field(xfs_agnumber_t, agno)
3535 __field(unsigned int, bucket)
3536 __field(xfs_agino_t, prev_agino)
3537 __field(xfs_agino_t, next_agino)
3538 ),
3539 TP_fast_assign(
3540 __entry->dev = pag_mount(pag)->m_super->s_dev;
3541 __entry->agno = pag_agno(pag);
3542 __entry->bucket = bucket;
3543 __entry->prev_agino = prev_agino;
3544 __entry->next_agino = next_agino;
3545 ),
3546 TP_printk("dev %d:%d agno 0x%x bucket %u prev_agino 0x%x next_agino 0x%x",
3547 MAJOR(__entry->dev), MINOR(__entry->dev),
3548 __entry->agno,
3549 __entry->bucket,
3550 __entry->prev_agino,
3551 __entry->next_agino)
3552);
3553
3554DECLARE_EVENT_CLASS(xrep_iunlink_resolve_class,
3555 TP_PROTO(const struct xfs_perag *pag, unsigned int bucket,
3556 xfs_agino_t prev_agino, xfs_agino_t next_agino),
3557 TP_ARGS(pag, bucket, prev_agino, next_agino),
3558 TP_STRUCT__entry(
3559 __field(dev_t, dev)
3560 __field(xfs_agnumber_t, agno)
3561 __field(unsigned int, bucket)
3562 __field(xfs_agino_t, prev_agino)
3563 __field(xfs_agino_t, next_agino)
3564 ),
3565 TP_fast_assign(
3566 __entry->dev = pag_mount(pag)->m_super->s_dev;
3567 __entry->agno = pag_agno(pag);
3568 __entry->bucket = bucket;
3569 __entry->prev_agino = prev_agino;
3570 __entry->next_agino = next_agino;
3571 ),
3572 TP_printk("dev %d:%d agno 0x%x bucket %u prev_agino 0x%x next_agino 0x%x",
3573 MAJOR(__entry->dev), MINOR(__entry->dev),
3574 __entry->agno,
3575 __entry->bucket,
3576 __entry->prev_agino,
3577 __entry->next_agino)
3578);
3579#define DEFINE_REPAIR_IUNLINK_RESOLVE_EVENT(name) \
3580DEFINE_EVENT(xrep_iunlink_resolve_class, name, \
3581 TP_PROTO(const struct xfs_perag *pag, unsigned int bucket, \
3582 xfs_agino_t prev_agino, xfs_agino_t next_agino), \
3583 TP_ARGS(pag, bucket, prev_agino, next_agino))
3584DEFINE_REPAIR_IUNLINK_RESOLVE_EVENT(xrep_iunlink_resolve_uncached);
3585DEFINE_REPAIR_IUNLINK_RESOLVE_EVENT(xrep_iunlink_resolve_wronglist);
3586DEFINE_REPAIR_IUNLINK_RESOLVE_EVENT(xrep_iunlink_resolve_nolist);
3587DEFINE_REPAIR_IUNLINK_RESOLVE_EVENT(xrep_iunlink_resolve_ok);
3588
3589TRACE_EVENT(xrep_iunlink_relink_next,
3590 TP_PROTO(struct xfs_inode *ip, xfs_agino_t next_agino),
3591 TP_ARGS(ip, next_agino),
3592 TP_STRUCT__entry(
3593 __field(dev_t, dev)
3594 __field(xfs_agnumber_t, agno)
3595 __field(xfs_agino_t, agino)
3596 __field(xfs_agino_t, next_agino)
3597 __field(xfs_agino_t, new_next_agino)
3598 ),
3599 TP_fast_assign(
3600 __entry->dev = ip->i_mount->m_super->s_dev;
3601 __entry->agno = XFS_INO_TO_AGNO(ip->i_mount, ip->i_ino);
3602 __entry->agino = XFS_INO_TO_AGINO(ip->i_mount, ip->i_ino);
3603 __entry->next_agino = ip->i_next_unlinked;
3604 __entry->new_next_agino = next_agino;
3605 ),
3606 TP_printk("dev %d:%d agno 0x%x bucket %u agino 0x%x next_agino 0x%x -> 0x%x",
3607 MAJOR(__entry->dev), MINOR(__entry->dev),
3608 __entry->agno,
3609 __entry->agino % XFS_AGI_UNLINKED_BUCKETS,
3610 __entry->agino,
3611 __entry->next_agino,
3612 __entry->new_next_agino)
3613);
3614
3615TRACE_EVENT(xrep_iunlink_relink_prev,
3616 TP_PROTO(struct xfs_inode *ip, xfs_agino_t prev_agino),
3617 TP_ARGS(ip, prev_agino),
3618 TP_STRUCT__entry(
3619 __field(dev_t, dev)
3620 __field(xfs_agnumber_t, agno)
3621 __field(xfs_agino_t, agino)
3622 __field(xfs_agino_t, prev_agino)
3623 __field(xfs_agino_t, new_prev_agino)
3624 ),
3625 TP_fast_assign(
3626 __entry->dev = ip->i_mount->m_super->s_dev;
3627 __entry->agno = XFS_INO_TO_AGNO(ip->i_mount, ip->i_ino);
3628 __entry->agino = XFS_INO_TO_AGINO(ip->i_mount, ip->i_ino);
3629 __entry->prev_agino = ip->i_prev_unlinked;
3630 __entry->new_prev_agino = prev_agino;
3631 ),
3632 TP_printk("dev %d:%d agno 0x%x bucket %u agino 0x%x prev_agino 0x%x -> 0x%x",
3633 MAJOR(__entry->dev), MINOR(__entry->dev),
3634 __entry->agno,
3635 __entry->agino % XFS_AGI_UNLINKED_BUCKETS,
3636 __entry->agino,
3637 __entry->prev_agino,
3638 __entry->new_prev_agino)
3639);
3640
3641TRACE_EVENT(xrep_iunlink_add_to_bucket,
3642 TP_PROTO(const struct xfs_perag *pag, unsigned int bucket,
3643 xfs_agino_t agino, xfs_agino_t curr_head),
3644 TP_ARGS(pag, bucket, agino, curr_head),
3645 TP_STRUCT__entry(
3646 __field(dev_t, dev)
3647 __field(xfs_agnumber_t, agno)
3648 __field(unsigned int, bucket)
3649 __field(xfs_agino_t, agino)
3650 __field(xfs_agino_t, next_agino)
3651 ),
3652 TP_fast_assign(
3653 __entry->dev = pag_mount(pag)->m_super->s_dev;
3654 __entry->agno = pag_agno(pag);
3655 __entry->bucket = bucket;
3656 __entry->agino = agino;
3657 __entry->next_agino = curr_head;
3658 ),
3659 TP_printk("dev %d:%d agno 0x%x bucket %u agino 0x%x next_agino 0x%x",
3660 MAJOR(__entry->dev), MINOR(__entry->dev),
3661 __entry->agno,
3662 __entry->bucket,
3663 __entry->agino,
3664 __entry->next_agino)
3665);
3666
3667TRACE_EVENT(xrep_iunlink_commit_bucket,
3668 TP_PROTO(const struct xfs_perag *pag, unsigned int bucket,
3669 xfs_agino_t old_agino, xfs_agino_t agino),
3670 TP_ARGS(pag, bucket, old_agino, agino),
3671 TP_STRUCT__entry(
3672 __field(dev_t, dev)
3673 __field(xfs_agnumber_t, agno)
3674 __field(unsigned int, bucket)
3675 __field(xfs_agino_t, old_agino)
3676 __field(xfs_agino_t, agino)
3677 ),
3678 TP_fast_assign(
3679 __entry->dev = pag_mount(pag)->m_super->s_dev;
3680 __entry->agno = pag_agno(pag);
3681 __entry->bucket = bucket;
3682 __entry->old_agino = old_agino;
3683 __entry->agino = agino;
3684 ),
3685 TP_printk("dev %d:%d agno 0x%x bucket %u agino 0x%x -> 0x%x",
3686 MAJOR(__entry->dev), MINOR(__entry->dev),
3687 __entry->agno,
3688 __entry->bucket,
3689 __entry->old_agino,
3690 __entry->agino)
3691);
3692
3693DEFINE_XCHK_DIRPATH_OUTCOME_EVENT(xrep_dirpath_set_outcome);
3694DEFINE_XCHK_DIRTREE_EVENT(xrep_dirtree_delete_path);
3695DEFINE_XCHK_DIRTREE_EVENT(xrep_dirtree_create_adoption);
3696DEFINE_XCHK_DIRTREE_EVALUATE_EVENT(xrep_dirtree_decided_fate);
3697
3698DEFINE_XCHK_METAPATH_EVENT(xrep_metapath_lookup);
3699DEFINE_XCHK_METAPATH_EVENT(xrep_metapath_try_unlink);
3700DEFINE_XCHK_METAPATH_EVENT(xrep_metapath_unlink);
3701DEFINE_XCHK_METAPATH_EVENT(xrep_metapath_link);
3702
3703#ifdef CONFIG_XFS_RT
3704DECLARE_EVENT_CLASS(xrep_rtbitmap_class,
3705 TP_PROTO(struct xfs_mount *mp, xfs_rtxnum_t start, xfs_rtxnum_t end),
3706 TP_ARGS(mp, start, end),
3707 TP_STRUCT__entry(
3708 __field(dev_t, dev)
3709 __field(dev_t, rtdev)
3710 __field(xfs_rtxnum_t, start)
3711 __field(xfs_rtxnum_t, end)
3712 ),
3713 TP_fast_assign(
3714 __entry->dev = mp->m_super->s_dev;
3715 __entry->rtdev = mp->m_rtdev_targp->bt_dev;
3716 __entry->start = start;
3717 __entry->end = end;
3718 ),
3719 TP_printk("dev %d:%d rtdev %d:%d startrtx 0x%llx endrtx 0x%llx",
3720 MAJOR(__entry->dev), MINOR(__entry->dev),
3721 MAJOR(__entry->rtdev), MINOR(__entry->rtdev),
3722 __entry->start,
3723 __entry->end)
3724);
3725#define DEFINE_REPAIR_RGBITMAP_EVENT(name) \
3726DEFINE_EVENT(xrep_rtbitmap_class, name, \
3727 TP_PROTO(struct xfs_mount *mp, xfs_rtxnum_t start, \
3728 xfs_rtxnum_t end), \
3729 TP_ARGS(mp, start, end))
3730DEFINE_REPAIR_RGBITMAP_EVENT(xrep_rtbitmap_record_free);
3731DEFINE_REPAIR_RGBITMAP_EVENT(xrep_rtbitmap_record_free_bulk);
3732
3733TRACE_EVENT(xrep_rtbitmap_or,
3734 TP_PROTO(struct xfs_mount *mp, unsigned long long wordoff,
3735 xfs_rtword_t mask, xfs_rtword_t word),
3736 TP_ARGS(mp, wordoff, mask, word),
3737 TP_STRUCT__entry(
3738 __field(dev_t, dev)
3739 __field(dev_t, rtdev)
3740 __field(unsigned long long, wordoff)
3741 __field(unsigned int, mask)
3742 __field(unsigned int, word)
3743 ),
3744 TP_fast_assign(
3745 __entry->dev = mp->m_super->s_dev;
3746 __entry->rtdev = mp->m_rtdev_targp->bt_dev;
3747 __entry->wordoff = wordoff;
3748 __entry->mask = mask;
3749 __entry->word = word;
3750 ),
3751 TP_printk("dev %d:%d rtdev %d:%d wordoff 0x%llx mask 0x%x word 0x%x",
3752 MAJOR(__entry->dev), MINOR(__entry->dev),
3753 MAJOR(__entry->rtdev), MINOR(__entry->rtdev),
3754 __entry->wordoff,
3755 __entry->mask,
3756 __entry->word)
3757);
3758
3759TRACE_EVENT(xrep_rtbitmap_load,
3760 TP_PROTO(struct xfs_rtgroup *rtg, xfs_fileoff_t rbmoff,
3761 xfs_rtxnum_t rtx, xfs_rtxnum_t len),
3762 TP_ARGS(rtg, rbmoff, rtx, len),
3763 TP_STRUCT__entry(
3764 __field(dev_t, dev)
3765 __field(dev_t, rtdev)
3766 __field(xfs_rgnumber_t, rgno)
3767 __field(xfs_fileoff_t, rbmoff)
3768 __field(xfs_rtxnum_t, rtx)
3769 __field(xfs_rtxnum_t, len)
3770 ),
3771 TP_fast_assign(
3772 __entry->dev = rtg_mount(rtg)->m_super->s_dev;
3773 __entry->rtdev = rtg_mount(rtg)->m_rtdev_targp->bt_dev;
3774 __entry->rgno = rtg_rgno(rtg);
3775 __entry->rbmoff = rbmoff;
3776 __entry->rtx = rtx;
3777 __entry->len = len;
3778 ),
3779 TP_printk("dev %d:%d rtdev %d:%d rgno 0x%x rbmoff 0x%llx rtx 0x%llx rtxcount 0x%llx",
3780 MAJOR(__entry->dev), MINOR(__entry->dev),
3781 MAJOR(__entry->rtdev), MINOR(__entry->rtdev),
3782 __entry->rgno,
3783 __entry->rbmoff,
3784 __entry->rtx,
3785 __entry->len)
3786);
3787
3788TRACE_EVENT(xrep_rtbitmap_load_words,
3789 TP_PROTO(struct xfs_mount *mp, xfs_fileoff_t rbmoff,
3790 unsigned long long wordoff, unsigned int wordcnt),
3791 TP_ARGS(mp, rbmoff, wordoff, wordcnt),
3792 TP_STRUCT__entry(
3793 __field(dev_t, dev)
3794 __field(dev_t, rtdev)
3795 __field(xfs_fileoff_t, rbmoff)
3796 __field(unsigned long long, wordoff)
3797 __field(unsigned int, wordcnt)
3798 ),
3799 TP_fast_assign(
3800 __entry->dev = mp->m_super->s_dev;
3801 __entry->rtdev = mp->m_rtdev_targp->bt_dev;
3802 __entry->rbmoff = rbmoff;
3803 __entry->wordoff = wordoff;
3804 __entry->wordcnt = wordcnt;
3805 ),
3806 TP_printk("dev %d:%d rtdev %d:%d rbmoff 0x%llx wordoff 0x%llx wordcnt 0x%x",
3807 MAJOR(__entry->dev), MINOR(__entry->dev),
3808 MAJOR(__entry->rtdev), MINOR(__entry->rtdev),
3809 __entry->rbmoff,
3810 __entry->wordoff,
3811 __entry->wordcnt)
3812);
3813
3814TRACE_EVENT(xrep_rtbitmap_load_word,
3815 TP_PROTO(struct xfs_mount *mp, unsigned long long wordoff,
3816 unsigned int bit, xfs_rtword_t ondisk_word,
3817 xfs_rtword_t xfile_word, xfs_rtword_t word_mask),
3818 TP_ARGS(mp, wordoff, bit, ondisk_word, xfile_word, word_mask),
3819 TP_STRUCT__entry(
3820 __field(dev_t, dev)
3821 __field(dev_t, rtdev)
3822 __field(unsigned long long, wordoff)
3823 __field(unsigned int, bit)
3824 __field(xfs_rtword_t, ondisk_word)
3825 __field(xfs_rtword_t, xfile_word)
3826 __field(xfs_rtword_t, word_mask)
3827 ),
3828 TP_fast_assign(
3829 __entry->dev = mp->m_super->s_dev;
3830 __entry->rtdev = mp->m_rtdev_targp->bt_dev;
3831 __entry->wordoff = wordoff;
3832 __entry->bit = bit;
3833 __entry->ondisk_word = ondisk_word;
3834 __entry->xfile_word = xfile_word;
3835 __entry->word_mask = word_mask;
3836 ),
3837 TP_printk("dev %d:%d rtdev %d:%d wordoff 0x%llx bit %u ondisk 0x%x(0x%x) inmem 0x%x(0x%x) result 0x%x mask 0x%x",
3838 MAJOR(__entry->dev), MINOR(__entry->dev),
3839 MAJOR(__entry->rtdev), MINOR(__entry->rtdev),
3840 __entry->wordoff,
3841 __entry->bit,
3842 __entry->ondisk_word,
3843 __entry->ondisk_word & __entry->word_mask,
3844 __entry->xfile_word,
3845 __entry->xfile_word & ~__entry->word_mask,
3846 (__entry->xfile_word & ~__entry->word_mask) |
3847 (__entry->ondisk_word & __entry->word_mask),
3848 __entry->word_mask)
3849);
3850
3851TRACE_EVENT(xrep_rtrmap_found,
3852 TP_PROTO(struct xfs_mount *mp, const struct xfs_rmap_irec *rec),
3853 TP_ARGS(mp, rec),
3854 TP_STRUCT__entry(
3855 __field(dev_t, dev)
3856 __field(dev_t, rtdev)
3857 __field(xfs_rgblock_t, rgbno)
3858 __field(xfs_extlen_t, len)
3859 __field(uint64_t, owner)
3860 __field(uint64_t, offset)
3861 __field(unsigned int, flags)
3862 ),
3863 TP_fast_assign(
3864 __entry->dev = mp->m_super->s_dev;
3865 __entry->rtdev = mp->m_rtdev_targp->bt_dev;
3866 __entry->rgbno = rec->rm_startblock;
3867 __entry->len = rec->rm_blockcount;
3868 __entry->owner = rec->rm_owner;
3869 __entry->offset = rec->rm_offset;
3870 __entry->flags = rec->rm_flags;
3871 ),
3872 TP_printk("dev %d:%d rtdev %d:%d rgbno 0x%x fsbcount 0x%x owner 0x%llx fileoff 0x%llx flags 0x%x",
3873 MAJOR(__entry->dev), MINOR(__entry->dev),
3874 MAJOR(__entry->rtdev), MINOR(__entry->rtdev),
3875 __entry->rgbno,
3876 __entry->len,
3877 __entry->owner,
3878 __entry->offset,
3879 __entry->flags)
3880);
3881#endif /* CONFIG_XFS_RT */
3882
3883#endif /* IS_ENABLED(CONFIG_XFS_ONLINE_REPAIR) */
3884
3885#endif /* _TRACE_XFS_SCRUB_TRACE_H */
3886
3887#undef TRACE_INCLUDE_PATH
3888#define TRACE_INCLUDE_PATH .
3889#define TRACE_INCLUDE_FILE scrub/trace
3890#include <trace/define_trace.h>
3891

Warning: This file is not a C or C++ file. It does not have highlighting.

source code of linux/fs/xfs/scrub/trace.h