xfs: implement live updates for directory repairs
[linux-2.6-block.git] / fs / xfs / scrub / trace.h
CommitLineData
739a2fe0 1// SPDX-License-Identifier: GPL-2.0-or-later
36fd6e86 2/*
ecc73f8a 3 * Copyright (C) 2017-2023 Oracle. All Rights Reserved.
739a2fe0 4 * Author: Darrick J. Wong <djwong@kernel.org>
e5f2e54a
DW
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.
36fd6e86
DW
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>
4700d229 17#include "xfs_bit.h"
48dd9117 18#include "xfs_quota_defs.h"
36fd6e86 19
8660c7b7 20struct xfs_scrub;
3934e8eb
DW
21struct xfile;
22struct xfarray;
232ea052 23struct xfarray_sortinfo;
21d75009 24struct xchk_dqiter;
8660c7b7 25struct xchk_iscan;
f1184081 26struct xchk_nlink;
4ed080cd 27struct xchk_fscounters;
7e1b84b2 28struct xfs_rmap_update_params;
77ede5f4 29struct xfs_parent_rec;
3934e8eb 30
c494213f
DW
31/*
32 * ftrace's __print_symbolic requires that all enum values be wrapped in the
33 * TRACE_DEFINE_ENUM macro so that the enum value can be encoded in the ftrace
34 * ring buffer. Somehow this was only worth mentioning in the ftrace sample
35 * code.
36 */
90148903
DW
37TRACE_DEFINE_ENUM(XFS_REFC_DOMAIN_SHARED);
38TRACE_DEFINE_ENUM(XFS_REFC_DOMAIN_COW);
39
86d163db
DW
40TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_PROBE);
41TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_SB);
42TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_AGF);
43TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_AGFL);
44TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_AGI);
45TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_BNOBT);
46TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_CNTBT);
47TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_INOBT);
48TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_FINOBT);
49TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_RMAPBT);
50TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_REFCNTBT);
51TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_INODE);
52TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_BMBTD);
53TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_BMBTA);
54TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_BMBTC);
55TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_DIR);
56TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_XATTR);
57TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_SYMLINK);
58TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_PARENT);
59TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_RTBITMAP);
60TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_RTSUM);
61TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_UQUOTA);
62TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_GQUOTA);
63TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_PQUOTA);
75efa57d 64TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_FSCOUNTERS);
48dd9117 65TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_QUOTACHECK);
f1184081 66TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_NLINKS);
a1f3e0cc 67TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_HEALTHY);
86d163db
DW
68
69#define XFS_SCRUB_TYPE_STRINGS \
70 { XFS_SCRUB_TYPE_PROBE, "probe" }, \
71 { XFS_SCRUB_TYPE_SB, "sb" }, \
72 { XFS_SCRUB_TYPE_AGF, "agf" }, \
73 { XFS_SCRUB_TYPE_AGFL, "agfl" }, \
74 { XFS_SCRUB_TYPE_AGI, "agi" }, \
75 { XFS_SCRUB_TYPE_BNOBT, "bnobt" }, \
76 { XFS_SCRUB_TYPE_CNTBT, "cntbt" }, \
77 { XFS_SCRUB_TYPE_INOBT, "inobt" }, \
78 { XFS_SCRUB_TYPE_FINOBT, "finobt" }, \
79 { XFS_SCRUB_TYPE_RMAPBT, "rmapbt" }, \
80 { XFS_SCRUB_TYPE_REFCNTBT, "refcountbt" }, \
81 { XFS_SCRUB_TYPE_INODE, "inode" }, \
82 { XFS_SCRUB_TYPE_BMBTD, "bmapbtd" }, \
83 { XFS_SCRUB_TYPE_BMBTA, "bmapbta" }, \
84 { XFS_SCRUB_TYPE_BMBTC, "bmapbtc" }, \
85 { XFS_SCRUB_TYPE_DIR, "directory" }, \
86 { XFS_SCRUB_TYPE_XATTR, "xattr" }, \
87 { XFS_SCRUB_TYPE_SYMLINK, "symlink" }, \
88 { XFS_SCRUB_TYPE_PARENT, "parent" }, \
89 { XFS_SCRUB_TYPE_RTBITMAP, "rtbitmap" }, \
90 { XFS_SCRUB_TYPE_RTSUM, "rtsummary" }, \
91 { XFS_SCRUB_TYPE_UQUOTA, "usrquota" }, \
92 { XFS_SCRUB_TYPE_GQUOTA, "grpquota" }, \
75efa57d 93 { XFS_SCRUB_TYPE_PQUOTA, "prjquota" }, \
48dd9117 94 { XFS_SCRUB_TYPE_FSCOUNTERS, "fscounters" }, \
f1184081 95 { XFS_SCRUB_TYPE_QUOTACHECK, "quotacheck" }, \
a1f3e0cc
DW
96 { XFS_SCRUB_TYPE_NLINKS, "nlinks" }, \
97 { XFS_SCRUB_TYPE_HEALTHY, "healthy" }
86d163db 98
c03e4b9e
DW
99#define XFS_SCRUB_FLAG_STRINGS \
100 { XFS_SCRUB_IFLAG_REPAIR, "repair" }, \
101 { XFS_SCRUB_OFLAG_CORRUPT, "corrupt" }, \
102 { XFS_SCRUB_OFLAG_PREEN, "preen" }, \
103 { XFS_SCRUB_OFLAG_XFAIL, "xfail" }, \
104 { XFS_SCRUB_OFLAG_XCORRUPT, "xcorrupt" }, \
105 { XFS_SCRUB_OFLAG_INCOMPLETE, "incomplete" }, \
106 { XFS_SCRUB_OFLAG_WARNING, "warning" }, \
5c83df2e
DW
107 { XFS_SCRUB_OFLAG_NO_REPAIR_NEEDED, "norepair" }, \
108 { XFS_SCRUB_IFLAG_FORCE_REBUILD, "rebuild" }
c03e4b9e 109
466c525d
DW
110#define XFS_SCRUB_STATE_STRINGS \
111 { XCHK_TRY_HARDER, "try_harder" }, \
ce85a1e0 112 { XCHK_HAVE_FREEZE_PROT, "nofreeze" }, \
466c525d 113 { XCHK_FSGATES_DRAIN, "fsgates_drain" }, \
88accf17 114 { XCHK_NEED_DRAIN, "need_drain" }, \
20049187 115 { XCHK_FSGATES_QUOTA, "fsgates_quota" }, \
86a1746e 116 { XCHK_FSGATES_DIRENTS, "fsgates_dirents" }, \
7e1b84b2 117 { XCHK_FSGATES_RMAP, "fsgates_rmap" }, \
56596d8b 118 { XREP_FSGATES_EXCHANGE_RANGE, "fsgates_exchrange" }, \
dbfbf3bd 119 { XREP_RESET_PERAG_RESV, "reset_perag_resv" }, \
466c525d
DW
120 { XREP_ALREADY_FIXED, "already_fixed" }
121
7e1b84b2
DW
122TRACE_DEFINE_ENUM(XFS_RMAP_MAP);
123TRACE_DEFINE_ENUM(XFS_RMAP_MAP_SHARED);
124TRACE_DEFINE_ENUM(XFS_RMAP_UNMAP);
125TRACE_DEFINE_ENUM(XFS_RMAP_UNMAP_SHARED);
126TRACE_DEFINE_ENUM(XFS_RMAP_CONVERT);
127TRACE_DEFINE_ENUM(XFS_RMAP_CONVERT_SHARED);
128TRACE_DEFINE_ENUM(XFS_RMAP_ALLOC);
129TRACE_DEFINE_ENUM(XFS_RMAP_FREE);
130
c517b3aa 131DECLARE_EVENT_CLASS(xchk_class,
a5637186
DW
132 TP_PROTO(struct xfs_inode *ip, struct xfs_scrub_metadata *sm,
133 int error),
134 TP_ARGS(ip, sm, error),
135 TP_STRUCT__entry(
136 __field(dev_t, dev)
137 __field(xfs_ino_t, ino)
138 __field(unsigned int, type)
139 __field(xfs_agnumber_t, agno)
140 __field(xfs_ino_t, inum)
141 __field(unsigned int, gen)
142 __field(unsigned int, flags)
143 __field(int, error)
144 ),
145 TP_fast_assign(
146 __entry->dev = ip->i_mount->m_super->s_dev;
147 __entry->ino = ip->i_ino;
148 __entry->type = sm->sm_type;
149 __entry->agno = sm->sm_agno;
150 __entry->inum = sm->sm_ino;
151 __entry->gen = sm->sm_gen;
152 __entry->flags = sm->sm_flags;
153 __entry->error = error;
154 ),
c03e4b9e 155 TP_printk("dev %d:%d ino 0x%llx type %s agno 0x%x inum 0x%llx gen 0x%x flags (%s) error %d",
a5637186
DW
156 MAJOR(__entry->dev), MINOR(__entry->dev),
157 __entry->ino,
86d163db 158 __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),
a5637186
DW
159 __entry->agno,
160 __entry->inum,
161 __entry->gen,
c03e4b9e 162 __print_flags(__entry->flags, "|", XFS_SCRUB_FLAG_STRINGS),
a5637186
DW
163 __entry->error)
164)
165#define DEFINE_SCRUB_EVENT(name) \
c517b3aa 166DEFINE_EVENT(xchk_class, name, \
a5637186
DW
167 TP_PROTO(struct xfs_inode *ip, struct xfs_scrub_metadata *sm, \
168 int error), \
169 TP_ARGS(ip, sm, error))
170
c517b3aa
DW
171DEFINE_SCRUB_EVENT(xchk_start);
172DEFINE_SCRUB_EVENT(xchk_done);
173DEFINE_SCRUB_EVENT(xchk_deadlock_retry);
b5e2196e
DW
174DEFINE_SCRUB_EVENT(xrep_attempt);
175DEFINE_SCRUB_EVENT(xrep_done);
4700d229 176
466c525d
DW
177DECLARE_EVENT_CLASS(xchk_fsgate_class,
178 TP_PROTO(struct xfs_scrub *sc, unsigned int fsgate_flags),
179 TP_ARGS(sc, fsgate_flags),
180 TP_STRUCT__entry(
181 __field(dev_t, dev)
182 __field(unsigned int, type)
183 __field(unsigned int, fsgate_flags)
184 ),
185 TP_fast_assign(
186 __entry->dev = sc->mp->m_super->s_dev;
187 __entry->type = sc->sm->sm_type;
188 __entry->fsgate_flags = fsgate_flags;
189 ),
190 TP_printk("dev %d:%d type %s fsgates '%s'",
191 MAJOR(__entry->dev), MINOR(__entry->dev),
192 __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),
193 __print_flags(__entry->fsgate_flags, "|", XFS_SCRUB_STATE_STRINGS))
194)
195
196#define DEFINE_SCRUB_FSHOOK_EVENT(name) \
197DEFINE_EVENT(xchk_fsgate_class, name, \
198 TP_PROTO(struct xfs_scrub *sc, unsigned int fsgates_flags), \
199 TP_ARGS(sc, fsgates_flags))
200
201DEFINE_SCRUB_FSHOOK_EVENT(xchk_fsgates_enable);
202DEFINE_SCRUB_FSHOOK_EVENT(xchk_fsgates_disable);
203
c517b3aa 204TRACE_EVENT(xchk_op_error,
1d8a748a 205 TP_PROTO(struct xfs_scrub *sc, xfs_agnumber_t agno,
4700d229
DW
206 xfs_agblock_t bno, int error, void *ret_ip),
207 TP_ARGS(sc, agno, bno, error, ret_ip),
208 TP_STRUCT__entry(
209 __field(dev_t, dev)
210 __field(unsigned int, type)
211 __field(xfs_agnumber_t, agno)
212 __field(xfs_agblock_t, bno)
213 __field(int, error)
214 __field(void *, ret_ip)
215 ),
216 TP_fast_assign(
217 __entry->dev = sc->mp->m_super->s_dev;
218 __entry->type = sc->sm->sm_type;
219 __entry->agno = agno;
220 __entry->bno = bno;
221 __entry->error = error;
222 __entry->ret_ip = ret_ip;
223 ),
f7b08163 224 TP_printk("dev %d:%d type %s agno 0x%x agbno 0x%x error %d ret_ip %pS",
4700d229 225 MAJOR(__entry->dev), MINOR(__entry->dev),
86d163db 226 __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),
4700d229
DW
227 __entry->agno,
228 __entry->bno,
229 __entry->error,
230 __entry->ret_ip)
231);
232
c517b3aa 233TRACE_EVENT(xchk_file_op_error,
1d8a748a 234 TP_PROTO(struct xfs_scrub *sc, int whichfork,
4700d229
DW
235 xfs_fileoff_t offset, int error, void *ret_ip),
236 TP_ARGS(sc, whichfork, offset, error, ret_ip),
237 TP_STRUCT__entry(
238 __field(dev_t, dev)
239 __field(xfs_ino_t, ino)
240 __field(int, whichfork)
241 __field(unsigned int, type)
242 __field(xfs_fileoff_t, offset)
243 __field(int, error)
244 __field(void *, ret_ip)
245 ),
246 TP_fast_assign(
247 __entry->dev = sc->ip->i_mount->m_super->s_dev;
248 __entry->ino = sc->ip->i_ino;
249 __entry->whichfork = whichfork;
250 __entry->type = sc->sm->sm_type;
251 __entry->offset = offset;
252 __entry->error = error;
253 __entry->ret_ip = ret_ip;
254 ),
f93f85f7 255 TP_printk("dev %d:%d ino 0x%llx fork %s type %s fileoff 0x%llx error %d ret_ip %pS",
4700d229
DW
256 MAJOR(__entry->dev), MINOR(__entry->dev),
257 __entry->ino,
f93f85f7 258 __print_symbolic(__entry->whichfork, XFS_WHICHFORK_STRINGS),
86d163db 259 __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),
4700d229
DW
260 __entry->offset,
261 __entry->error,
262 __entry->ret_ip)
263);
264
c517b3aa 265DECLARE_EVENT_CLASS(xchk_block_error_class,
1d8a748a 266 TP_PROTO(struct xfs_scrub *sc, xfs_daddr_t daddr, void *ret_ip),
4700d229
DW
267 TP_ARGS(sc, daddr, ret_ip),
268 TP_STRUCT__entry(
269 __field(dev_t, dev)
270 __field(unsigned int, type)
271 __field(xfs_agnumber_t, agno)
3fd7cb84 272 __field(xfs_agblock_t, agbno)
4700d229
DW
273 __field(void *, ret_ip)
274 ),
275 TP_fast_assign(
4700d229
DW
276 __entry->dev = sc->mp->m_super->s_dev;
277 __entry->type = sc->sm->sm_type;
3fd7cb84
DW
278 __entry->agno = xfs_daddr_to_agno(sc->mp, daddr);
279 __entry->agbno = xfs_daddr_to_agbno(sc->mp, daddr);
4700d229
DW
280 __entry->ret_ip = ret_ip;
281 ),
f7b08163 282 TP_printk("dev %d:%d type %s agno 0x%x agbno 0x%x ret_ip %pS",
4700d229 283 MAJOR(__entry->dev), MINOR(__entry->dev),
86d163db 284 __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),
4700d229 285 __entry->agno,
3fd7cb84 286 __entry->agbno,
4700d229
DW
287 __entry->ret_ip)
288)
289
290#define DEFINE_SCRUB_BLOCK_ERROR_EVENT(name) \
c517b3aa 291DEFINE_EVENT(xchk_block_error_class, name, \
1d8a748a 292 TP_PROTO(struct xfs_scrub *sc, xfs_daddr_t daddr, \
4700d229
DW
293 void *ret_ip), \
294 TP_ARGS(sc, daddr, ret_ip))
295
75efa57d 296DEFINE_SCRUB_BLOCK_ERROR_EVENT(xchk_fs_error);
c517b3aa
DW
297DEFINE_SCRUB_BLOCK_ERROR_EVENT(xchk_block_error);
298DEFINE_SCRUB_BLOCK_ERROR_EVENT(xchk_block_preen);
4700d229 299
c517b3aa 300DECLARE_EVENT_CLASS(xchk_ino_error_class,
1d8a748a 301 TP_PROTO(struct xfs_scrub *sc, xfs_ino_t ino, void *ret_ip),
7e56d9ea 302 TP_ARGS(sc, ino, ret_ip),
4700d229
DW
303 TP_STRUCT__entry(
304 __field(dev_t, dev)
305 __field(xfs_ino_t, ino)
306 __field(unsigned int, type)
4700d229
DW
307 __field(void *, ret_ip)
308 ),
309 TP_fast_assign(
4700d229
DW
310 __entry->dev = sc->mp->m_super->s_dev;
311 __entry->ino = ino;
312 __entry->type = sc->sm->sm_type;
4700d229
DW
313 __entry->ret_ip = ret_ip;
314 ),
86d163db 315 TP_printk("dev %d:%d ino 0x%llx type %s ret_ip %pS",
4700d229
DW
316 MAJOR(__entry->dev), MINOR(__entry->dev),
317 __entry->ino,
86d163db 318 __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),
4700d229
DW
319 __entry->ret_ip)
320)
321
322#define DEFINE_SCRUB_INO_ERROR_EVENT(name) \
c517b3aa 323DEFINE_EVENT(xchk_ino_error_class, name, \
1d8a748a 324 TP_PROTO(struct xfs_scrub *sc, xfs_ino_t ino, \
7e56d9ea
DW
325 void *ret_ip), \
326 TP_ARGS(sc, ino, ret_ip))
4700d229 327
c517b3aa
DW
328DEFINE_SCRUB_INO_ERROR_EVENT(xchk_ino_error);
329DEFINE_SCRUB_INO_ERROR_EVENT(xchk_ino_preen);
330DEFINE_SCRUB_INO_ERROR_EVENT(xchk_ino_warning);
4700d229 331
c517b3aa 332DECLARE_EVENT_CLASS(xchk_fblock_error_class,
1d8a748a 333 TP_PROTO(struct xfs_scrub *sc, int whichfork,
4700d229
DW
334 xfs_fileoff_t offset, void *ret_ip),
335 TP_ARGS(sc, whichfork, offset, ret_ip),
336 TP_STRUCT__entry(
337 __field(dev_t, dev)
338 __field(xfs_ino_t, ino)
339 __field(int, whichfork)
340 __field(unsigned int, type)
341 __field(xfs_fileoff_t, offset)
342 __field(void *, ret_ip)
343 ),
344 TP_fast_assign(
345 __entry->dev = sc->ip->i_mount->m_super->s_dev;
346 __entry->ino = sc->ip->i_ino;
347 __entry->whichfork = whichfork;
348 __entry->type = sc->sm->sm_type;
349 __entry->offset = offset;
350 __entry->ret_ip = ret_ip;
351 ),
f93f85f7 352 TP_printk("dev %d:%d ino 0x%llx fork %s type %s fileoff 0x%llx ret_ip %pS",
4700d229
DW
353 MAJOR(__entry->dev), MINOR(__entry->dev),
354 __entry->ino,
f93f85f7 355 __print_symbolic(__entry->whichfork, XFS_WHICHFORK_STRINGS),
86d163db 356 __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),
4700d229
DW
357 __entry->offset,
358 __entry->ret_ip)
359);
360
361#define DEFINE_SCRUB_FBLOCK_ERROR_EVENT(name) \
c517b3aa 362DEFINE_EVENT(xchk_fblock_error_class, name, \
1d8a748a 363 TP_PROTO(struct xfs_scrub *sc, int whichfork, \
4700d229
DW
364 xfs_fileoff_t offset, void *ret_ip), \
365 TP_ARGS(sc, whichfork, offset, ret_ip))
366
c517b3aa
DW
367DEFINE_SCRUB_FBLOCK_ERROR_EVENT(xchk_fblock_error);
368DEFINE_SCRUB_FBLOCK_ERROR_EVENT(xchk_fblock_warning);
0ee230de 369DEFINE_SCRUB_FBLOCK_ERROR_EVENT(xchk_fblock_preen);
4700d229 370
21d75009
DW
371#ifdef CONFIG_XFS_QUOTA
372DECLARE_EVENT_CLASS(xchk_dqiter_class,
373 TP_PROTO(struct xchk_dqiter *cursor, uint64_t id),
374 TP_ARGS(cursor, id),
375 TP_STRUCT__entry(
376 __field(dev_t, dev)
377 __field(xfs_dqtype_t, dqtype)
378 __field(xfs_ino_t, ino)
379 __field(unsigned long long, cur_id)
380 __field(unsigned long long, id)
381 __field(xfs_fileoff_t, startoff)
382 __field(xfs_fsblock_t, startblock)
383 __field(xfs_filblks_t, blockcount)
384 __field(xfs_exntst_t, state)
385 ),
386 TP_fast_assign(
387 __entry->dev = cursor->sc->ip->i_mount->m_super->s_dev;
388 __entry->dqtype = cursor->dqtype;
389 __entry->ino = cursor->quota_ip->i_ino;
390 __entry->cur_id = cursor->id;
391 __entry->startoff = cursor->bmap.br_startoff;
392 __entry->startblock = cursor->bmap.br_startblock;
393 __entry->blockcount = cursor->bmap.br_blockcount;
394 __entry->state = cursor->bmap.br_state;
395 __entry->id = id;
396 ),
397 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",
398 MAJOR(__entry->dev), MINOR(__entry->dev),
399 __print_symbolic(__entry->dqtype, XFS_DQTYPE_STRINGS),
400 __entry->ino,
401 __entry->cur_id,
402 __entry->startoff,
403 __entry->startblock,
404 __entry->blockcount,
405 __entry->state,
406 __entry->id)
407);
408
409#define DEFINE_SCRUB_DQITER_EVENT(name) \
410DEFINE_EVENT(xchk_dqiter_class, name, \
411 TP_PROTO(struct xchk_dqiter *cursor, uint64_t id), \
412 TP_ARGS(cursor, id))
413DEFINE_SCRUB_DQITER_EVENT(xchk_dquot_iter_revalidate_bmap);
414DEFINE_SCRUB_DQITER_EVENT(xchk_dquot_iter_advance_bmap);
415DEFINE_SCRUB_DQITER_EVENT(xchk_dquot_iter_advance_incore);
416DEFINE_SCRUB_DQITER_EVENT(xchk_dquot_iter);
48dd9117
DW
417
418TRACE_EVENT(xchk_qcheck_error,
419 TP_PROTO(struct xfs_scrub *sc, xfs_dqtype_t dqtype, xfs_dqid_t id,
420 void *ret_ip),
421 TP_ARGS(sc, dqtype, id, ret_ip),
422 TP_STRUCT__entry(
423 __field(dev_t, dev)
424 __field(xfs_dqtype_t, dqtype)
425 __field(xfs_dqid_t, id)
426 __field(void *, ret_ip)
427 ),
428 TP_fast_assign(
429 __entry->dev = sc->mp->m_super->s_dev;
430 __entry->dqtype = dqtype;
431 __entry->id = id;
432 __entry->ret_ip = ret_ip;
433 ),
434 TP_printk("dev %d:%d dquot type %s id 0x%x ret_ip %pS",
435 MAJOR(__entry->dev), MINOR(__entry->dev),
436 __print_symbolic(__entry->dqtype, XFS_DQTYPE_STRINGS),
437 __entry->id,
438 __entry->ret_ip)
439);
21d75009
DW
440#endif /* CONFIG_XFS_QUOTA */
441
c517b3aa 442TRACE_EVENT(xchk_incomplete,
1d8a748a 443 TP_PROTO(struct xfs_scrub *sc, void *ret_ip),
4700d229
DW
444 TP_ARGS(sc, ret_ip),
445 TP_STRUCT__entry(
446 __field(dev_t, dev)
447 __field(unsigned int, type)
448 __field(void *, ret_ip)
449 ),
450 TP_fast_assign(
451 __entry->dev = sc->mp->m_super->s_dev;
452 __entry->type = sc->sm->sm_type;
453 __entry->ret_ip = ret_ip;
454 ),
86d163db 455 TP_printk("dev %d:%d type %s ret_ip %pS",
4700d229 456 MAJOR(__entry->dev), MINOR(__entry->dev),
86d163db 457 __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),
4700d229
DW
458 __entry->ret_ip)
459);
a5637186 460
c517b3aa 461TRACE_EVENT(xchk_btree_op_error,
1d8a748a 462 TP_PROTO(struct xfs_scrub *sc, struct xfs_btree_cur *cur,
537964bc
DW
463 int level, int error, void *ret_ip),
464 TP_ARGS(sc, cur, level, error, ret_ip),
465 TP_STRUCT__entry(
466 __field(dev_t, dev)
467 __field(unsigned int, type)
77953b97 468 __string(name, cur->bc_ops->name)
537964bc
DW
469 __field(int, level)
470 __field(xfs_agnumber_t, agno)
471 __field(xfs_agblock_t, bno)
04ae87a5 472 __field(int, ptr)
537964bc
DW
473 __field(int, error)
474 __field(void *, ret_ip)
475 ),
476 TP_fast_assign(
c517b3aa 477 xfs_fsblock_t fsbno = xchk_btree_cur_fsbno(cur, level);
537964bc
DW
478
479 __entry->dev = sc->mp->m_super->s_dev;
480 __entry->type = sc->sm->sm_type;
77953b97 481 __assign_str(name, cur->bc_ops->name);
537964bc
DW
482 __entry->level = level;
483 __entry->agno = XFS_FSB_TO_AGNO(cur->bc_mp, fsbno);
484 __entry->bno = XFS_FSB_TO_AGBNO(cur->bc_mp, fsbno);
6ca444cf 485 __entry->ptr = cur->bc_levels[level].ptr;
537964bc
DW
486 __entry->error = error;
487 __entry->ret_ip = ret_ip;
488 ),
77953b97 489 TP_printk("dev %d:%d type %s %sbt level %d ptr %d agno 0x%x agbno 0x%x error %d ret_ip %pS",
537964bc 490 MAJOR(__entry->dev), MINOR(__entry->dev),
86d163db 491 __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),
77953b97 492 __get_str(name),
537964bc
DW
493 __entry->level,
494 __entry->ptr,
495 __entry->agno,
496 __entry->bno,
497 __entry->error,
498 __entry->ret_ip)
499);
500
c517b3aa 501TRACE_EVENT(xchk_ifork_btree_op_error,
1d8a748a 502 TP_PROTO(struct xfs_scrub *sc, struct xfs_btree_cur *cur,
537964bc
DW
503 int level, int error, void *ret_ip),
504 TP_ARGS(sc, cur, level, error, ret_ip),
505 TP_STRUCT__entry(
506 __field(dev_t, dev)
507 __field(xfs_ino_t, ino)
508 __field(int, whichfork)
509 __field(unsigned int, type)
77953b97 510 __string(name, cur->bc_ops->name)
537964bc
DW
511 __field(int, level)
512 __field(int, ptr)
513 __field(xfs_agnumber_t, agno)
514 __field(xfs_agblock_t, bno)
515 __field(int, error)
516 __field(void *, ret_ip)
517 ),
518 TP_fast_assign(
c517b3aa 519 xfs_fsblock_t fsbno = xchk_btree_cur_fsbno(cur, level);
537964bc
DW
520 __entry->dev = sc->mp->m_super->s_dev;
521 __entry->ino = sc->ip->i_ino;
92219c29 522 __entry->whichfork = cur->bc_ino.whichfork;
537964bc 523 __entry->type = sc->sm->sm_type;
77953b97 524 __assign_str(name, cur->bc_ops->name);
537964bc 525 __entry->level = level;
6ca444cf 526 __entry->ptr = cur->bc_levels[level].ptr;
537964bc
DW
527 __entry->agno = XFS_FSB_TO_AGNO(cur->bc_mp, fsbno);
528 __entry->bno = XFS_FSB_TO_AGBNO(cur->bc_mp, fsbno);
529 __entry->error = error;
530 __entry->ret_ip = ret_ip;
531 ),
77953b97 532 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",
537964bc
DW
533 MAJOR(__entry->dev), MINOR(__entry->dev),
534 __entry->ino,
f93f85f7 535 __print_symbolic(__entry->whichfork, XFS_WHICHFORK_STRINGS),
86d163db 536 __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),
77953b97 537 __get_str(name),
537964bc
DW
538 __entry->level,
539 __entry->ptr,
540 __entry->agno,
541 __entry->bno,
542 __entry->error,
543 __entry->ret_ip)
544);
545
c517b3aa 546TRACE_EVENT(xchk_btree_error,
1d8a748a 547 TP_PROTO(struct xfs_scrub *sc, struct xfs_btree_cur *cur,
537964bc
DW
548 int level, void *ret_ip),
549 TP_ARGS(sc, cur, level, ret_ip),
550 TP_STRUCT__entry(
551 __field(dev_t, dev)
552 __field(unsigned int, type)
77953b97 553 __string(name, cur->bc_ops->name)
537964bc
DW
554 __field(int, level)
555 __field(xfs_agnumber_t, agno)
556 __field(xfs_agblock_t, bno)
04ae87a5 557 __field(int, ptr)
537964bc
DW
558 __field(void *, ret_ip)
559 ),
560 TP_fast_assign(
c517b3aa 561 xfs_fsblock_t fsbno = xchk_btree_cur_fsbno(cur, level);
537964bc
DW
562 __entry->dev = sc->mp->m_super->s_dev;
563 __entry->type = sc->sm->sm_type;
77953b97 564 __assign_str(name, cur->bc_ops->name);
537964bc
DW
565 __entry->level = level;
566 __entry->agno = XFS_FSB_TO_AGNO(cur->bc_mp, fsbno);
567 __entry->bno = XFS_FSB_TO_AGBNO(cur->bc_mp, fsbno);
6ca444cf 568 __entry->ptr = cur->bc_levels[level].ptr;
537964bc
DW
569 __entry->ret_ip = ret_ip;
570 ),
77953b97 571 TP_printk("dev %d:%d type %s %sbt level %d ptr %d agno 0x%x agbno 0x%x ret_ip %pS",
537964bc 572 MAJOR(__entry->dev), MINOR(__entry->dev),
86d163db 573 __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),
77953b97 574 __get_str(name),
537964bc
DW
575 __entry->level,
576 __entry->ptr,
577 __entry->agno,
578 __entry->bno,
579 __entry->ret_ip)
580);
581
c517b3aa 582TRACE_EVENT(xchk_ifork_btree_error,
1d8a748a 583 TP_PROTO(struct xfs_scrub *sc, struct xfs_btree_cur *cur,
537964bc
DW
584 int level, void *ret_ip),
585 TP_ARGS(sc, cur, level, ret_ip),
586 TP_STRUCT__entry(
587 __field(dev_t, dev)
588 __field(xfs_ino_t, ino)
589 __field(int, whichfork)
590 __field(unsigned int, type)
77953b97 591 __string(name, cur->bc_ops->name)
537964bc
DW
592 __field(int, level)
593 __field(xfs_agnumber_t, agno)
594 __field(xfs_agblock_t, bno)
04ae87a5 595 __field(int, ptr)
537964bc
DW
596 __field(void *, ret_ip)
597 ),
598 TP_fast_assign(
c517b3aa 599 xfs_fsblock_t fsbno = xchk_btree_cur_fsbno(cur, level);
537964bc
DW
600 __entry->dev = sc->mp->m_super->s_dev;
601 __entry->ino = sc->ip->i_ino;
92219c29 602 __entry->whichfork = cur->bc_ino.whichfork;
537964bc 603 __entry->type = sc->sm->sm_type;
77953b97 604 __assign_str(name, cur->bc_ops->name);
537964bc
DW
605 __entry->level = level;
606 __entry->agno = XFS_FSB_TO_AGNO(cur->bc_mp, fsbno);
607 __entry->bno = XFS_FSB_TO_AGBNO(cur->bc_mp, fsbno);
6ca444cf 608 __entry->ptr = cur->bc_levels[level].ptr;
537964bc
DW
609 __entry->ret_ip = ret_ip;
610 ),
77953b97 611 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",
537964bc
DW
612 MAJOR(__entry->dev), MINOR(__entry->dev),
613 __entry->ino,
f93f85f7 614 __print_symbolic(__entry->whichfork, XFS_WHICHFORK_STRINGS),
86d163db 615 __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),
77953b97 616 __get_str(name),
537964bc
DW
617 __entry->level,
618 __entry->ptr,
619 __entry->agno,
620 __entry->bno,
621 __entry->ret_ip)
622);
623
c517b3aa 624DECLARE_EVENT_CLASS(xchk_sbtree_class,
1d8a748a 625 TP_PROTO(struct xfs_scrub *sc, struct xfs_btree_cur *cur,
37f3fa7f
DW
626 int level),
627 TP_ARGS(sc, cur, level),
628 TP_STRUCT__entry(
629 __field(dev_t, dev)
630 __field(int, type)
77953b97 631 __string(name, cur->bc_ops->name)
37f3fa7f
DW
632 __field(xfs_agnumber_t, agno)
633 __field(xfs_agblock_t, bno)
634 __field(int, level)
635 __field(int, nlevels)
636 __field(int, ptr)
637 ),
638 TP_fast_assign(
c517b3aa 639 xfs_fsblock_t fsbno = xchk_btree_cur_fsbno(cur, level);
37f3fa7f
DW
640
641 __entry->dev = sc->mp->m_super->s_dev;
642 __entry->type = sc->sm->sm_type;
77953b97 643 __assign_str(name, cur->bc_ops->name);
37f3fa7f
DW
644 __entry->agno = XFS_FSB_TO_AGNO(cur->bc_mp, fsbno);
645 __entry->bno = XFS_FSB_TO_AGBNO(cur->bc_mp, fsbno);
646 __entry->level = level;
647 __entry->nlevels = cur->bc_nlevels;
6ca444cf 648 __entry->ptr = cur->bc_levels[level].ptr;
37f3fa7f 649 ),
77953b97 650 TP_printk("dev %d:%d type %s %sbt agno 0x%x agbno 0x%x level %d nlevels %d ptr %d",
37f3fa7f 651 MAJOR(__entry->dev), MINOR(__entry->dev),
86d163db 652 __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),
77953b97 653 __get_str(name),
37f3fa7f
DW
654 __entry->agno,
655 __entry->bno,
656 __entry->level,
657 __entry->nlevels,
658 __entry->ptr)
659)
660#define DEFINE_SCRUB_SBTREE_EVENT(name) \
c517b3aa 661DEFINE_EVENT(xchk_sbtree_class, name, \
1d8a748a 662 TP_PROTO(struct xfs_scrub *sc, struct xfs_btree_cur *cur, \
37f3fa7f
DW
663 int level), \
664 TP_ARGS(sc, cur, level))
665
c517b3aa
DW
666DEFINE_SCRUB_SBTREE_EVENT(xchk_btree_rec);
667DEFINE_SCRUB_SBTREE_EVENT(xchk_btree_key);
37f3fa7f 668
c517b3aa 669TRACE_EVENT(xchk_xref_error,
1d8a748a 670 TP_PROTO(struct xfs_scrub *sc, int error, void *ret_ip),
64b12563
DW
671 TP_ARGS(sc, error, ret_ip),
672 TP_STRUCT__entry(
673 __field(dev_t, dev)
674 __field(int, type)
675 __field(int, error)
676 __field(void *, ret_ip)
677 ),
678 TP_fast_assign(
679 __entry->dev = sc->mp->m_super->s_dev;
680 __entry->type = sc->sm->sm_type;
681 __entry->error = error;
682 __entry->ret_ip = ret_ip;
683 ),
86d163db 684 TP_printk("dev %d:%d type %s xref error %d ret_ip %pS",
64b12563 685 MAJOR(__entry->dev), MINOR(__entry->dev),
86d163db 686 __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),
64b12563
DW
687 __entry->error,
688 __entry->ret_ip)
689);
690
b9454fe0
DW
691TRACE_EVENT(xchk_iallocbt_check_cluster,
692 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,
693 xfs_agino_t startino, xfs_daddr_t map_daddr,
694 unsigned short map_len, unsigned int chunk_ino,
695 unsigned int nr_inodes, uint16_t cluster_mask,
696 uint16_t holemask, unsigned int cluster_ino),
697 TP_ARGS(mp, agno, startino, map_daddr, map_len, chunk_ino, nr_inodes,
698 cluster_mask, holemask, cluster_ino),
699 TP_STRUCT__entry(
700 __field(dev_t, dev)
701 __field(xfs_agnumber_t, agno)
702 __field(xfs_agino_t, startino)
703 __field(xfs_daddr_t, map_daddr)
704 __field(unsigned short, map_len)
705 __field(unsigned int, chunk_ino)
706 __field(unsigned int, nr_inodes)
707 __field(unsigned int, cluster_ino)
708 __field(uint16_t, cluster_mask)
709 __field(uint16_t, holemask)
710 ),
711 TP_fast_assign(
712 __entry->dev = mp->m_super->s_dev;
713 __entry->agno = agno;
714 __entry->startino = startino;
715 __entry->map_daddr = map_daddr;
716 __entry->map_len = map_len;
717 __entry->chunk_ino = chunk_ino;
718 __entry->nr_inodes = nr_inodes;
719 __entry->cluster_mask = cluster_mask;
720 __entry->holemask = holemask;
721 __entry->cluster_ino = cluster_ino;
722 ),
7989accc 723 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",
b9454fe0
DW
724 MAJOR(__entry->dev), MINOR(__entry->dev),
725 __entry->agno,
726 __entry->startino,
727 __entry->map_daddr,
728 __entry->map_len,
729 __entry->chunk_ino,
730 __entry->nr_inodes,
731 __entry->cluster_mask,
732 __entry->holemask,
733 __entry->cluster_ino)
734)
735
369c001b
DW
736TRACE_EVENT(xchk_inode_is_allocated,
737 TP_PROTO(struct xfs_inode *ip),
738 TP_ARGS(ip),
739 TP_STRUCT__entry(
740 __field(dev_t, dev)
741 __field(xfs_ino_t, ino)
742 __field(unsigned long, iflags)
743 __field(umode_t, mode)
744 ),
745 TP_fast_assign(
746 __entry->dev = VFS_I(ip)->i_sb->s_dev;
747 __entry->ino = ip->i_ino;
748 __entry->iflags = ip->i_flags;
749 __entry->mode = VFS_I(ip)->i_mode;
750 ),
751 TP_printk("dev %d:%d ino 0x%llx iflags 0x%lx mode 0x%x",
752 MAJOR(__entry->dev), MINOR(__entry->dev),
753 __entry->ino,
754 __entry->iflags,
755 __entry->mode)
756);
757
75efa57d
DW
758TRACE_EVENT(xchk_fscounters_calc,
759 TP_PROTO(struct xfs_mount *mp, uint64_t icount, uint64_t ifree,
760 uint64_t fdblocks, uint64_t delalloc),
761 TP_ARGS(mp, icount, ifree, fdblocks, delalloc),
762 TP_STRUCT__entry(
763 __field(dev_t, dev)
764 __field(int64_t, icount_sb)
765 __field(uint64_t, icount_calculated)
766 __field(int64_t, ifree_sb)
767 __field(uint64_t, ifree_calculated)
768 __field(int64_t, fdblocks_sb)
769 __field(uint64_t, fdblocks_calculated)
770 __field(uint64_t, delalloc)
771 ),
772 TP_fast_assign(
773 __entry->dev = mp->m_super->s_dev;
774 __entry->icount_sb = mp->m_sb.sb_icount;
775 __entry->icount_calculated = icount;
776 __entry->ifree_sb = mp->m_sb.sb_ifree;
777 __entry->ifree_calculated = ifree;
778 __entry->fdblocks_sb = mp->m_sb.sb_fdblocks;
779 __entry->fdblocks_calculated = fdblocks;
780 __entry->delalloc = delalloc;
781 ),
782 TP_printk("dev %d:%d icount %lld:%llu ifree %lld::%llu fdblocks %lld::%llu delalloc %llu",
783 MAJOR(__entry->dev), MINOR(__entry->dev),
784 __entry->icount_sb,
785 __entry->icount_calculated,
786 __entry->ifree_sb,
787 __entry->ifree_calculated,
788 __entry->fdblocks_sb,
789 __entry->fdblocks_calculated,
790 __entry->delalloc)
791)
792
793TRACE_EVENT(xchk_fscounters_within_range,
794 TP_PROTO(struct xfs_mount *mp, uint64_t expected, int64_t curr_value,
795 int64_t old_value),
796 TP_ARGS(mp, expected, curr_value, old_value),
797 TP_STRUCT__entry(
798 __field(dev_t, dev)
799 __field(uint64_t, expected)
800 __field(int64_t, curr_value)
801 __field(int64_t, old_value)
802 ),
803 TP_fast_assign(
804 __entry->dev = mp->m_super->s_dev;
805 __entry->expected = expected;
806 __entry->curr_value = curr_value;
807 __entry->old_value = old_value;
808 ),
809 TP_printk("dev %d:%d expected %llu curr_value %lld old_value %lld",
810 MAJOR(__entry->dev), MINOR(__entry->dev),
811 __entry->expected,
812 __entry->curr_value,
813 __entry->old_value)
814)
815
ce85a1e0
DW
816DECLARE_EVENT_CLASS(xchk_fsfreeze_class,
817 TP_PROTO(struct xfs_scrub *sc, int error),
818 TP_ARGS(sc, error),
819 TP_STRUCT__entry(
820 __field(dev_t, dev)
821 __field(unsigned int, type)
822 __field(int, error)
823 ),
824 TP_fast_assign(
825 __entry->dev = sc->mp->m_super->s_dev;
826 __entry->type = sc->sm->sm_type;
827 __entry->error = error;
828 ),
829 TP_printk("dev %d:%d type %s error %d",
830 MAJOR(__entry->dev), MINOR(__entry->dev),
831 __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),
832 __entry->error)
833);
834#define DEFINE_XCHK_FSFREEZE_EVENT(name) \
835DEFINE_EVENT(xchk_fsfreeze_class, name, \
836 TP_PROTO(struct xfs_scrub *sc, int error), \
837 TP_ARGS(sc, error))
838DEFINE_XCHK_FSFREEZE_EVENT(xchk_fsfreeze);
839DEFINE_XCHK_FSFREEZE_EVENT(xchk_fsthaw);
840
90148903
DW
841TRACE_EVENT(xchk_refcount_incorrect,
842 TP_PROTO(struct xfs_perag *pag, const struct xfs_refcount_irec *irec,
843 xfs_nlink_t seen),
844 TP_ARGS(pag, irec, seen),
845 TP_STRUCT__entry(
846 __field(dev_t, dev)
847 __field(xfs_agnumber_t, agno)
848 __field(enum xfs_refc_domain, domain)
849 __field(xfs_agblock_t, startblock)
850 __field(xfs_extlen_t, blockcount)
851 __field(xfs_nlink_t, refcount)
852 __field(xfs_nlink_t, seen)
853 ),
854 TP_fast_assign(
855 __entry->dev = pag->pag_mount->m_super->s_dev;
856 __entry->agno = pag->pag_agno;
857 __entry->domain = irec->rc_domain;
858 __entry->startblock = irec->rc_startblock;
859 __entry->blockcount = irec->rc_blockcount;
860 __entry->refcount = irec->rc_refcount;
861 __entry->seen = seen;
862 ),
863 TP_printk("dev %d:%d agno 0x%x dom %s agbno 0x%x fsbcount 0x%x refcount %u seen %u",
864 MAJOR(__entry->dev), MINOR(__entry->dev),
865 __entry->agno,
866 __print_symbolic(__entry->domain, XFS_REFC_DOMAIN_STRINGS),
867 __entry->startblock,
868 __entry->blockcount,
869 __entry->refcount,
870 __entry->seen)
871)
872
3934e8eb
DW
873TRACE_EVENT(xfile_create,
874 TP_PROTO(struct xfile *xf),
875 TP_ARGS(xf),
876 TP_STRUCT__entry(
877 __field(dev_t, dev)
878 __field(unsigned long, ino)
879 __array(char, pathname, 256)
880 ),
881 TP_fast_assign(
882 char pathname[257];
883 char *path;
884
885 __entry->ino = file_inode(xf->file)->i_ino;
886 memset(pathname, 0, sizeof(pathname));
887 path = file_path(xf->file, pathname, sizeof(pathname) - 1);
888 if (IS_ERR(path))
889 path = "(unknown)";
890 strncpy(__entry->pathname, path, sizeof(__entry->pathname));
891 ),
892 TP_printk("xfino 0x%lx path '%s'",
893 __entry->ino,
894 __entry->pathname)
895);
896
897TRACE_EVENT(xfile_destroy,
898 TP_PROTO(struct xfile *xf),
899 TP_ARGS(xf),
900 TP_STRUCT__entry(
901 __field(unsigned long, ino)
902 __field(unsigned long long, bytes)
903 __field(loff_t, size)
904 ),
905 TP_fast_assign(
0473635d
CH
906 struct inode *inode = file_inode(xf->file);
907
908 __entry->ino = inode->i_ino;
909 __entry->bytes = inode->i_blocks << SECTOR_SHIFT;
910 __entry->size = i_size_read(inode);
3934e8eb
DW
911 ),
912 TP_printk("xfino 0x%lx mem_bytes 0x%llx isize 0x%llx",
913 __entry->ino,
914 __entry->bytes,
915 __entry->size)
916);
917
918DECLARE_EVENT_CLASS(xfile_class,
919 TP_PROTO(struct xfile *xf, loff_t pos, unsigned long long bytecount),
920 TP_ARGS(xf, pos, bytecount),
921 TP_STRUCT__entry(
922 __field(unsigned long, ino)
923 __field(unsigned long long, bytes_used)
924 __field(loff_t, pos)
925 __field(loff_t, size)
926 __field(unsigned long long, bytecount)
927 ),
928 TP_fast_assign(
0473635d
CH
929 struct inode *inode = file_inode(xf->file);
930
931 __entry->ino = inode->i_ino;
932 __entry->bytes_used = inode->i_blocks << SECTOR_SHIFT;
3934e8eb 933 __entry->pos = pos;
0473635d 934 __entry->size = i_size_read(inode);
3934e8eb
DW
935 __entry->bytecount = bytecount;
936 ),
937 TP_printk("xfino 0x%lx mem_bytes 0x%llx pos 0x%llx bytecount 0x%llx isize 0x%llx",
938 __entry->ino,
939 __entry->bytes_used,
940 __entry->pos,
941 __entry->bytecount,
942 __entry->size)
943);
944#define DEFINE_XFILE_EVENT(name) \
945DEFINE_EVENT(xfile_class, name, \
946 TP_PROTO(struct xfile *xf, loff_t pos, unsigned long long bytecount), \
947 TP_ARGS(xf, pos, bytecount))
e47e2e0b
CH
948DEFINE_XFILE_EVENT(xfile_load);
949DEFINE_XFILE_EVENT(xfile_store);
3934e8eb 950DEFINE_XFILE_EVENT(xfile_seek_data);
6907e3c0
DW
951DEFINE_XFILE_EVENT(xfile_get_folio);
952DEFINE_XFILE_EVENT(xfile_put_folio);
98339edf 953DEFINE_XFILE_EVENT(xfile_discard);
3934e8eb
DW
954
955TRACE_EVENT(xfarray_create,
956 TP_PROTO(struct xfarray *xfa, unsigned long long required_capacity),
957 TP_ARGS(xfa, required_capacity),
958 TP_STRUCT__entry(
959 __field(unsigned long, ino)
960 __field(uint64_t, max_nr)
961 __field(size_t, obj_size)
962 __field(int, obj_size_log)
963 __field(unsigned long long, required_capacity)
964 ),
965 TP_fast_assign(
966 __entry->max_nr = xfa->max_nr;
967 __entry->obj_size = xfa->obj_size;
968 __entry->obj_size_log = xfa->obj_size_log;
969 __entry->ino = file_inode(xfa->xfile->file)->i_ino;
970 __entry->required_capacity = required_capacity;
971 ),
972 TP_printk("xfino 0x%lx max_nr %llu reqd_nr %llu objsz %zu objszlog %d",
973 __entry->ino,
974 __entry->max_nr,
975 __entry->required_capacity,
976 __entry->obj_size,
977 __entry->obj_size_log)
978);
979
232ea052
DW
980TRACE_EVENT(xfarray_isort,
981 TP_PROTO(struct xfarray_sortinfo *si, uint64_t lo, uint64_t hi),
e5b46c75
DW
982 TP_ARGS(si, lo, hi),
983 TP_STRUCT__entry(
984 __field(unsigned long, ino)
985 __field(unsigned long long, lo)
986 __field(unsigned long long, hi)
987 ),
988 TP_fast_assign(
989 __entry->ino = file_inode(si->array->xfile->file)->i_ino;
990 __entry->lo = lo;
991 __entry->hi = hi;
992 ),
993 TP_printk("xfino 0x%lx lo %llu hi %llu elts %llu",
994 __entry->ino,
995 __entry->lo,
996 __entry->hi,
997 __entry->hi - __entry->lo)
998);
999
ee13fc67 1000TRACE_EVENT(xfarray_foliosort,
e5b46c75 1001 TP_PROTO(struct xfarray_sortinfo *si, uint64_t lo, uint64_t hi),
232ea052
DW
1002 TP_ARGS(si, lo, hi),
1003 TP_STRUCT__entry(
1004 __field(unsigned long, ino)
1005 __field(unsigned long long, lo)
1006 __field(unsigned long long, hi)
1007 ),
1008 TP_fast_assign(
1009 __entry->ino = file_inode(si->array->xfile->file)->i_ino;
1010 __entry->lo = lo;
1011 __entry->hi = hi;
1012 ),
1013 TP_printk("xfino 0x%lx lo %llu hi %llu elts %llu",
1014 __entry->ino,
1015 __entry->lo,
1016 __entry->hi,
1017 __entry->hi - __entry->lo)
1018);
1019
1020TRACE_EVENT(xfarray_qsort,
1021 TP_PROTO(struct xfarray_sortinfo *si, uint64_t lo, uint64_t hi),
1022 TP_ARGS(si, lo, hi),
1023 TP_STRUCT__entry(
1024 __field(unsigned long, ino)
1025 __field(unsigned long long, lo)
1026 __field(unsigned long long, hi)
1027 __field(int, stack_depth)
1028 __field(int, max_stack_depth)
1029 ),
1030 TP_fast_assign(
1031 __entry->ino = file_inode(si->array->xfile->file)->i_ino;
1032 __entry->lo = lo;
1033 __entry->hi = hi;
1034 __entry->stack_depth = si->stack_depth;
1035 __entry->max_stack_depth = si->max_stack_depth;
1036 ),
1037 TP_printk("xfino 0x%lx lo %llu hi %llu elts %llu stack %d/%d",
1038 __entry->ino,
1039 __entry->lo,
1040 __entry->hi,
1041 __entry->hi - __entry->lo,
1042 __entry->stack_depth,
1043 __entry->max_stack_depth)
1044);
1045
1046TRACE_EVENT(xfarray_sort,
1047 TP_PROTO(struct xfarray_sortinfo *si, size_t bytes),
1048 TP_ARGS(si, bytes),
1049 TP_STRUCT__entry(
1050 __field(unsigned long, ino)
1051 __field(unsigned long long, nr)
1052 __field(size_t, obj_size)
1053 __field(size_t, bytes)
1054 __field(unsigned int, max_stack_depth)
1055 ),
1056 TP_fast_assign(
1057 __entry->nr = si->array->nr;
1058 __entry->obj_size = si->array->obj_size;
1059 __entry->ino = file_inode(si->array->xfile->file)->i_ino;
1060 __entry->bytes = bytes;
1061 __entry->max_stack_depth = si->max_stack_depth;
1062 ),
1063 TP_printk("xfino 0x%lx nr %llu objsz %zu stack %u bytes %zu",
1064 __entry->ino,
1065 __entry->nr,
1066 __entry->obj_size,
1067 __entry->max_stack_depth,
1068 __entry->bytes)
1069);
1070
ee13fc67
DW
1071TRACE_EVENT(xfarray_sort_scan,
1072 TP_PROTO(struct xfarray_sortinfo *si, unsigned long long idx),
1073 TP_ARGS(si, idx),
1074 TP_STRUCT__entry(
1075 __field(unsigned long, ino)
1076 __field(unsigned long long, nr)
1077 __field(size_t, obj_size)
1078 __field(unsigned long long, idx)
1079 __field(unsigned long long, folio_pos)
1080 __field(unsigned long, folio_bytes)
1081 __field(unsigned long long, first_idx)
1082 __field(unsigned long long, last_idx)
1083 ),
1084 TP_fast_assign(
1085 __entry->nr = si->array->nr;
1086 __entry->obj_size = si->array->obj_size;
1087 __entry->ino = file_inode(si->array->xfile->file)->i_ino;
1088 __entry->idx = idx;
1089 if (si->folio) {
1090 __entry->folio_pos = folio_pos(si->folio);
1091 __entry->folio_bytes = folio_size(si->folio);
1092 __entry->first_idx = si->first_folio_idx;
1093 __entry->last_idx = si->last_folio_idx;
1094 } else {
1095 __entry->folio_pos = 0;
1096 __entry->folio_bytes = 0;
1097 __entry->first_idx = 0;
1098 __entry->last_idx = 0;
1099 }
1100 ),
1101 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",
1102 __entry->ino,
1103 __entry->nr,
1104 __entry->obj_size,
1105 __entry->idx,
1106 __entry->folio_pos,
1107 __entry->folio_bytes,
1108 __entry->first_idx,
1109 __entry->last_idx)
1110);
1111
232ea052
DW
1112TRACE_EVENT(xfarray_sort_stats,
1113 TP_PROTO(struct xfarray_sortinfo *si, int error),
1114 TP_ARGS(si, error),
1115 TP_STRUCT__entry(
1116 __field(unsigned long, ino)
1117#ifdef DEBUG
1118 __field(unsigned long long, loads)
1119 __field(unsigned long long, stores)
1120 __field(unsigned long long, compares)
c390c645 1121 __field(unsigned long long, heapsorts)
232ea052
DW
1122#endif
1123 __field(unsigned int, max_stack_depth)
1124 __field(unsigned int, max_stack_used)
1125 __field(int, error)
1126 ),
1127 TP_fast_assign(
1128 __entry->ino = file_inode(si->array->xfile->file)->i_ino;
1129#ifdef DEBUG
1130 __entry->loads = si->loads;
1131 __entry->stores = si->stores;
1132 __entry->compares = si->compares;
c390c645 1133 __entry->heapsorts = si->heapsorts;
232ea052
DW
1134#endif
1135 __entry->max_stack_depth = si->max_stack_depth;
1136 __entry->max_stack_used = si->max_stack_used;
1137 __entry->error = error;
1138 ),
1139 TP_printk(
1140#ifdef DEBUG
c390c645 1141 "xfino 0x%lx loads %llu stores %llu compares %llu heapsorts %llu stack_depth %u/%u error %d",
232ea052
DW
1142#else
1143 "xfino 0x%lx stack_depth %u/%u error %d",
1144#endif
1145 __entry->ino,
1146#ifdef DEBUG
1147 __entry->loads,
1148 __entry->stores,
1149 __entry->compares,
c390c645 1150 __entry->heapsorts,
232ea052
DW
1151#endif
1152 __entry->max_stack_used,
1153 __entry->max_stack_depth,
1154 __entry->error)
1155);
1156
526aab5f
DW
1157#ifdef CONFIG_XFS_RT
1158TRACE_EVENT(xchk_rtsum_record_free,
2d5f216b 1159 TP_PROTO(struct xfs_mount *mp, xfs_rtxnum_t start,
f29c3e74 1160 xfs_rtbxlen_t len, unsigned int log, loff_t pos,
663b8db7
DW
1161 xfs_suminfo_t value),
1162 TP_ARGS(mp, start, len, log, pos, value),
526aab5f
DW
1163 TP_STRUCT__entry(
1164 __field(dev_t, dev)
1165 __field(dev_t, rtdev)
2d5f216b 1166 __field(xfs_rtxnum_t, start)
526aab5f
DW
1167 __field(unsigned long long, len)
1168 __field(unsigned int, log)
1169 __field(loff_t, pos)
663b8db7 1170 __field(xfs_suminfo_t, value)
526aab5f
DW
1171 ),
1172 TP_fast_assign(
1173 __entry->dev = mp->m_super->s_dev;
1174 __entry->rtdev = mp->m_rtdev_targp->bt_dev;
1175 __entry->start = start;
1176 __entry->len = len;
1177 __entry->log = log;
1178 __entry->pos = pos;
663b8db7 1179 __entry->value = value;
526aab5f
DW
1180 ),
1181 TP_printk("dev %d:%d rtdev %d:%d rtx 0x%llx rtxcount 0x%llx log %u rsumpos 0x%llx sumcount %u",
1182 MAJOR(__entry->dev), MINOR(__entry->dev),
1183 MAJOR(__entry->rtdev), MINOR(__entry->rtdev),
1184 __entry->start,
1185 __entry->len,
1186 __entry->log,
1187 __entry->pos,
663b8db7 1188 __entry->value)
526aab5f
DW
1189);
1190#endif /* CONFIG_XFS_RT */
1191
8660c7b7
DW
1192DECLARE_EVENT_CLASS(xchk_iscan_class,
1193 TP_PROTO(struct xchk_iscan *iscan),
1194 TP_ARGS(iscan),
1195 TP_STRUCT__entry(
1196 __field(dev_t, dev)
1197 __field(xfs_ino_t, cursor)
1198 __field(xfs_ino_t, visited)
1199 ),
1200 TP_fast_assign(
1201 __entry->dev = iscan->sc->mp->m_super->s_dev;
1202 __entry->cursor = iscan->cursor_ino;
1203 __entry->visited = iscan->__visited_ino;
1204 ),
1205 TP_printk("dev %d:%d iscan cursor 0x%llx visited 0x%llx",
1206 MAJOR(__entry->dev), MINOR(__entry->dev),
1207 __entry->cursor,
1208 __entry->visited)
1209)
1210#define DEFINE_ISCAN_EVENT(name) \
1211DEFINE_EVENT(xchk_iscan_class, name, \
1212 TP_PROTO(struct xchk_iscan *iscan), \
1213 TP_ARGS(iscan))
1214DEFINE_ISCAN_EVENT(xchk_iscan_move_cursor);
1215DEFINE_ISCAN_EVENT(xchk_iscan_visit);
82334a79 1216DEFINE_ISCAN_EVENT(xchk_iscan_skip);
8660c7b7 1217DEFINE_ISCAN_EVENT(xchk_iscan_advance_ag);
8660c7b7
DW
1218
1219DECLARE_EVENT_CLASS(xchk_iscan_ino_class,
1220 TP_PROTO(struct xchk_iscan *iscan, xfs_ino_t ino),
1221 TP_ARGS(iscan, ino),
1222 TP_STRUCT__entry(
1223 __field(dev_t, dev)
c473a332 1224 __field(xfs_ino_t, startino)
8660c7b7
DW
1225 __field(xfs_ino_t, cursor)
1226 __field(xfs_ino_t, visited)
1227 __field(xfs_ino_t, ino)
1228 ),
1229 TP_fast_assign(
1230 __entry->dev = iscan->sc->mp->m_super->s_dev;
c473a332 1231 __entry->startino = iscan->scan_start_ino;
8660c7b7
DW
1232 __entry->cursor = iscan->cursor_ino;
1233 __entry->visited = iscan->__visited_ino;
1234 __entry->ino = ino;
1235 ),
c473a332 1236 TP_printk("dev %d:%d iscan start 0x%llx cursor 0x%llx visited 0x%llx ino 0x%llx",
8660c7b7 1237 MAJOR(__entry->dev), MINOR(__entry->dev),
c473a332 1238 __entry->startino,
8660c7b7
DW
1239 __entry->cursor,
1240 __entry->visited,
1241 __entry->ino)
1242)
1243#define DEFINE_ISCAN_INO_EVENT(name) \
1244DEFINE_EVENT(xchk_iscan_ino_class, name, \
1245 TP_PROTO(struct xchk_iscan *iscan, xfs_ino_t ino), \
1246 TP_ARGS(iscan, ino))
1247DEFINE_ISCAN_INO_EVENT(xchk_iscan_want_live_update);
c473a332 1248DEFINE_ISCAN_INO_EVENT(xchk_iscan_start);
8660c7b7
DW
1249
1250TRACE_EVENT(xchk_iscan_iget,
1251 TP_PROTO(struct xchk_iscan *iscan, int error),
1252 TP_ARGS(iscan, error),
1253 TP_STRUCT__entry(
1254 __field(dev_t, dev)
1255 __field(xfs_ino_t, cursor)
1256 __field(xfs_ino_t, visited)
1257 __field(int, error)
1258 ),
1259 TP_fast_assign(
1260 __entry->dev = iscan->sc->mp->m_super->s_dev;
1261 __entry->cursor = iscan->cursor_ino;
1262 __entry->visited = iscan->__visited_ino;
1263 __entry->error = error;
1264 ),
1265 TP_printk("dev %d:%d iscan cursor 0x%llx visited 0x%llx error %d",
1266 MAJOR(__entry->dev), MINOR(__entry->dev),
1267 __entry->cursor,
1268 __entry->visited,
1269 __entry->error)
1270);
1271
a7a686cb
DW
1272TRACE_EVENT(xchk_iscan_iget_batch,
1273 TP_PROTO(struct xfs_mount *mp, struct xchk_iscan *iscan,
82334a79
DW
1274 unsigned int nr, unsigned int avail),
1275 TP_ARGS(mp, iscan, nr, avail),
a7a686cb
DW
1276 TP_STRUCT__entry(
1277 __field(dev_t, dev)
1278 __field(xfs_ino_t, cursor)
1279 __field(xfs_ino_t, visited)
1280 __field(unsigned int, nr)
82334a79
DW
1281 __field(unsigned int, avail)
1282 __field(unsigned int, unavail)
1283 __field(xfs_ino_t, batch_ino)
1284 __field(unsigned long long, skipmask)
a7a686cb
DW
1285 ),
1286 TP_fast_assign(
1287 __entry->dev = mp->m_super->s_dev;
1288 __entry->cursor = iscan->cursor_ino;
1289 __entry->visited = iscan->__visited_ino;
1290 __entry->nr = nr;
82334a79
DW
1291 __entry->avail = avail;
1292 __entry->unavail = hweight64(iscan->__skipped_inomask);
1293 __entry->batch_ino = iscan->__batch_ino;
1294 __entry->skipmask = iscan->__skipped_inomask;
a7a686cb 1295 ),
82334a79 1296 TP_printk("dev %d:%d iscan cursor 0x%llx visited 0x%llx batchino 0x%llx skipmask 0x%llx nr %u avail %u unavail %u",
a7a686cb
DW
1297 MAJOR(__entry->dev), MINOR(__entry->dev),
1298 __entry->cursor,
1299 __entry->visited,
82334a79
DW
1300 __entry->batch_ino,
1301 __entry->skipmask,
1302 __entry->nr,
1303 __entry->avail,
1304 __entry->unavail)
a7a686cb
DW
1305);
1306
2afd5276 1307DECLARE_EVENT_CLASS(xchk_iscan_retry_wait_class,
8660c7b7
DW
1308 TP_PROTO(struct xchk_iscan *iscan),
1309 TP_ARGS(iscan),
1310 TP_STRUCT__entry(
1311 __field(dev_t, dev)
1312 __field(xfs_ino_t, cursor)
1313 __field(xfs_ino_t, visited)
1314 __field(unsigned int, retry_delay)
1315 __field(unsigned long, remaining)
1316 __field(unsigned int, iget_timeout)
1317 ),
1318 TP_fast_assign(
1319 __entry->dev = iscan->sc->mp->m_super->s_dev;
1320 __entry->cursor = iscan->cursor_ino;
1321 __entry->visited = iscan->__visited_ino;
1322 __entry->retry_delay = iscan->iget_retry_delay;
1323 __entry->remaining = jiffies_to_msecs(iscan->__iget_deadline - jiffies);
1324 __entry->iget_timeout = iscan->iget_timeout;
1325 ),
1326 TP_printk("dev %d:%d iscan cursor 0x%llx visited 0x%llx remaining %lu timeout %u delay %u",
1327 MAJOR(__entry->dev), MINOR(__entry->dev),
1328 __entry->cursor,
1329 __entry->visited,
1330 __entry->remaining,
1331 __entry->iget_timeout,
1332 __entry->retry_delay)
2afd5276
DW
1333)
1334#define DEFINE_ISCAN_RETRY_WAIT_EVENT(name) \
1335DEFINE_EVENT(xchk_iscan_retry_wait_class, name, \
1336 TP_PROTO(struct xchk_iscan *iscan), \
1337 TP_ARGS(iscan))
1338DEFINE_ISCAN_RETRY_WAIT_EVENT(xchk_iscan_iget_retry_wait);
1339DEFINE_ISCAN_RETRY_WAIT_EVENT(xchk_iscan_agi_retry_wait);
8660c7b7 1340
f1184081
DW
1341TRACE_EVENT(xchk_nlinks_collect_dirent,
1342 TP_PROTO(struct xfs_mount *mp, struct xfs_inode *dp,
1343 xfs_ino_t ino, const struct xfs_name *name),
1344 TP_ARGS(mp, dp, ino, name),
1345 TP_STRUCT__entry(
1346 __field(dev_t, dev)
1347 __field(xfs_ino_t, dir)
1348 __field(xfs_ino_t, ino)
1349 __field(unsigned int, namelen)
1350 __dynamic_array(char, name, name->len)
1351 ),
1352 TP_fast_assign(
1353 __entry->dev = mp->m_super->s_dev;
1354 __entry->dir = dp->i_ino;
1355 __entry->ino = ino;
1356 __entry->namelen = name->len;
1357 memcpy(__get_str(name), name->name, name->len);
1358 ),
1359 TP_printk("dev %d:%d dir 0x%llx -> ino 0x%llx name '%.*s'",
1360 MAJOR(__entry->dev), MINOR(__entry->dev),
1361 __entry->dir,
1362 __entry->ino,
1363 __entry->namelen,
1364 __get_str(name))
1365);
1366
77ede5f4
DW
1367TRACE_EVENT(xchk_nlinks_collect_pptr,
1368 TP_PROTO(struct xfs_mount *mp, struct xfs_inode *dp,
1369 const struct xfs_name *name,
1370 const struct xfs_parent_rec *pptr),
1371 TP_ARGS(mp, dp, name, pptr),
1372 TP_STRUCT__entry(
1373 __field(dev_t, dev)
1374 __field(xfs_ino_t, dir)
1375 __field(xfs_ino_t, ino)
1376 __field(unsigned int, namelen)
1377 __dynamic_array(char, name, name->len)
1378 ),
1379 TP_fast_assign(
1380 __entry->dev = mp->m_super->s_dev;
1381 __entry->dir = dp->i_ino;
1382 __entry->ino = be64_to_cpu(pptr->p_ino);
1383 __entry->namelen = name->len;
1384 memcpy(__get_str(name), name->name, name->len);
1385 ),
1386 TP_printk("dev %d:%d dir 0x%llx -> ino 0x%llx name '%.*s'",
1387 MAJOR(__entry->dev), MINOR(__entry->dev),
1388 __entry->dir,
1389 __entry->ino,
1390 __entry->namelen,
1391 __get_str(name))
1392);
1393
f1184081
DW
1394TRACE_EVENT(xchk_nlinks_collect_metafile,
1395 TP_PROTO(struct xfs_mount *mp, xfs_ino_t ino),
1396 TP_ARGS(mp, ino),
1397 TP_STRUCT__entry(
1398 __field(dev_t, dev)
1399 __field(xfs_ino_t, ino)
1400 ),
1401 TP_fast_assign(
1402 __entry->dev = mp->m_super->s_dev;
1403 __entry->ino = ino;
1404 ),
1405 TP_printk("dev %d:%d ino 0x%llx",
1406 MAJOR(__entry->dev), MINOR(__entry->dev),
1407 __entry->ino)
1408);
1409
86a1746e
DW
1410TRACE_EVENT(xchk_nlinks_live_update,
1411 TP_PROTO(struct xfs_mount *mp, const struct xfs_inode *dp,
1412 int action, xfs_ino_t ino, int delta,
1413 const char *name, unsigned int namelen),
1414 TP_ARGS(mp, dp, action, ino, delta, name, namelen),
1415 TP_STRUCT__entry(
1416 __field(dev_t, dev)
1417 __field(xfs_ino_t, dir)
1418 __field(int, action)
1419 __field(xfs_ino_t, ino)
1420 __field(int, delta)
1421 __field(unsigned int, namelen)
1422 __dynamic_array(char, name, namelen)
1423 ),
1424 TP_fast_assign(
1425 __entry->dev = mp->m_super->s_dev;
1426 __entry->dir = dp ? dp->i_ino : NULLFSINO;
1427 __entry->action = action;
1428 __entry->ino = ino;
1429 __entry->delta = delta;
1430 __entry->namelen = namelen;
1431 memcpy(__get_str(name), name, namelen);
1432 ),
1433 TP_printk("dev %d:%d dir 0x%llx ino 0x%llx nlink_delta %d name '%.*s'",
1434 MAJOR(__entry->dev), MINOR(__entry->dev),
1435 __entry->dir,
1436 __entry->ino,
1437 __entry->delta,
1438 __entry->namelen,
1439 __get_str(name))
1440);
1441
f1184081
DW
1442TRACE_EVENT(xchk_nlinks_check_zero,
1443 TP_PROTO(struct xfs_mount *mp, xfs_ino_t ino,
1444 const struct xchk_nlink *live),
1445 TP_ARGS(mp, ino, live),
1446 TP_STRUCT__entry(
1447 __field(dev_t, dev)
1448 __field(xfs_ino_t, ino)
1449 __field(xfs_nlink_t, parents)
1450 __field(xfs_nlink_t, backrefs)
1451 __field(xfs_nlink_t, children)
1452 ),
1453 TP_fast_assign(
1454 __entry->dev = mp->m_super->s_dev;
1455 __entry->ino = ino;
1456 __entry->parents = live->parents;
1457 __entry->backrefs = live->backrefs;
1458 __entry->children = live->children;
1459 ),
1460 TP_printk("dev %d:%d ino 0x%llx parents %u backrefs %u children %u",
1461 MAJOR(__entry->dev), MINOR(__entry->dev),
1462 __entry->ino,
1463 __entry->parents,
1464 __entry->backrefs,
1465 __entry->children)
1466);
1467
1468TRACE_EVENT(xchk_nlinks_update_incore,
1469 TP_PROTO(struct xfs_mount *mp, xfs_ino_t ino,
1470 const struct xchk_nlink *live, int parents_delta,
1471 int backrefs_delta, int children_delta),
1472 TP_ARGS(mp, ino, live, parents_delta, backrefs_delta, children_delta),
1473 TP_STRUCT__entry(
1474 __field(dev_t, dev)
1475 __field(xfs_ino_t, ino)
1476 __field(xfs_nlink_t, parents)
1477 __field(xfs_nlink_t, backrefs)
1478 __field(xfs_nlink_t, children)
1479 __field(int, parents_delta)
1480 __field(int, backrefs_delta)
1481 __field(int, children_delta)
1482 ),
1483 TP_fast_assign(
1484 __entry->dev = mp->m_super->s_dev;
1485 __entry->ino = ino;
1486 __entry->parents = live->parents;
1487 __entry->backrefs = live->backrefs;
1488 __entry->children = live->children;
1489 __entry->parents_delta = parents_delta;
1490 __entry->backrefs_delta = backrefs_delta;
1491 __entry->children_delta = children_delta;
1492 ),
1493 TP_printk("dev %d:%d ino 0x%llx parents %d:%u backrefs %d:%u children %d:%u",
1494 MAJOR(__entry->dev), MINOR(__entry->dev),
1495 __entry->ino,
1496 __entry->parents_delta,
1497 __entry->parents,
1498 __entry->backrefs_delta,
1499 __entry->backrefs,
1500 __entry->children_delta,
1501 __entry->children)
1502);
1503
1504DECLARE_EVENT_CLASS(xchk_nlinks_diff_class,
1505 TP_PROTO(struct xfs_mount *mp, struct xfs_inode *ip,
1506 const struct xchk_nlink *live),
1507 TP_ARGS(mp, ip, live),
1508 TP_STRUCT__entry(
1509 __field(dev_t, dev)
1510 __field(xfs_ino_t, ino)
1511 __field(uint8_t, ftype)
1512 __field(xfs_nlink_t, nlink)
1513 __field(xfs_nlink_t, parents)
1514 __field(xfs_nlink_t, backrefs)
1515 __field(xfs_nlink_t, children)
1516 ),
1517 TP_fast_assign(
1518 __entry->dev = mp->m_super->s_dev;
1519 __entry->ino = ip->i_ino;
1520 __entry->ftype = xfs_mode_to_ftype(VFS_I(ip)->i_mode);
1521 __entry->nlink = VFS_I(ip)->i_nlink;
1522 __entry->parents = live->parents;
1523 __entry->backrefs = live->backrefs;
1524 __entry->children = live->children;
1525 ),
1526 TP_printk("dev %d:%d ino 0x%llx ftype %s nlink %u parents %u backrefs %u children %u",
1527 MAJOR(__entry->dev), MINOR(__entry->dev),
1528 __entry->ino,
1529 __print_symbolic(__entry->ftype, XFS_DIR3_FTYPE_STR),
1530 __entry->nlink,
1531 __entry->parents,
1532 __entry->backrefs,
1533 __entry->children)
1534);
1535#define DEFINE_SCRUB_NLINKS_DIFF_EVENT(name) \
1536DEFINE_EVENT(xchk_nlinks_diff_class, name, \
1537 TP_PROTO(struct xfs_mount *mp, struct xfs_inode *ip, \
1538 const struct xchk_nlink *live), \
1539 TP_ARGS(mp, ip, live))
1540DEFINE_SCRUB_NLINKS_DIFF_EVENT(xchk_nlinks_compare_inode);
1541
b961c8bf
DW
1542DECLARE_EVENT_CLASS(xchk_pptr_class,
1543 TP_PROTO(struct xfs_inode *ip, const struct xfs_name *name,
1544 xfs_ino_t far_ino),
1545 TP_ARGS(ip, name, far_ino),
1546 TP_STRUCT__entry(
1547 __field(dev_t, dev)
1548 __field(xfs_ino_t, ino)
1549 __field(unsigned int, namelen)
1550 __dynamic_array(char, name, name->len)
1551 __field(xfs_ino_t, far_ino)
1552 ),
1553 TP_fast_assign(
1554 __entry->dev = ip->i_mount->m_super->s_dev;
1555 __entry->ino = ip->i_ino;
1556 __entry->namelen = name->len;
1557 memcpy(__get_str(name), name, name->len);
1558 __entry->far_ino = far_ino;
1559 ),
1560 TP_printk("dev %d:%d ino 0x%llx name '%.*s' far_ino 0x%llx",
1561 MAJOR(__entry->dev), MINOR(__entry->dev),
1562 __entry->ino,
1563 __entry->namelen,
1564 __get_str(name),
1565 __entry->far_ino)
1566)
1567#define DEFINE_XCHK_PPTR_EVENT(name) \
1568DEFINE_EVENT(xchk_pptr_class, name, \
1569 TP_PROTO(struct xfs_inode *ip, const struct xfs_name *name, \
1570 xfs_ino_t far_ino), \
1571 TP_ARGS(ip, name, far_ino))
1572DEFINE_XCHK_PPTR_EVENT(xchk_dir_defer);
1573DEFINE_XCHK_PPTR_EVENT(xchk_dir_slowpath);
1574DEFINE_XCHK_PPTR_EVENT(xchk_dir_ultraslowpath);
8ad34530
DW
1575DEFINE_XCHK_PPTR_EVENT(xchk_parent_defer);
1576DEFINE_XCHK_PPTR_EVENT(xchk_parent_slowpath);
1577DEFINE_XCHK_PPTR_EVENT(xchk_parent_ultraslowpath);
b961c8bf 1578
718fa74b
DW
1579/* repair tracepoints */
1580#if IS_ENABLED(CONFIG_XFS_ONLINE_REPAIR)
1581
b5e2196e 1582DECLARE_EVENT_CLASS(xrep_extent_class,
77a1396f
DW
1583 TP_PROTO(struct xfs_perag *pag, xfs_agblock_t agbno, xfs_extlen_t len),
1584 TP_ARGS(pag, agbno, len),
718fa74b
DW
1585 TP_STRUCT__entry(
1586 __field(dev_t, dev)
1587 __field(xfs_agnumber_t, agno)
1588 __field(xfs_agblock_t, agbno)
1589 __field(xfs_extlen_t, len)
1590 ),
1591 TP_fast_assign(
77a1396f
DW
1592 __entry->dev = pag->pag_mount->m_super->s_dev;
1593 __entry->agno = pag->pag_agno;
718fa74b
DW
1594 __entry->agbno = agbno;
1595 __entry->len = len;
1596 ),
7989accc 1597 TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x",
718fa74b
DW
1598 MAJOR(__entry->dev), MINOR(__entry->dev),
1599 __entry->agno,
1600 __entry->agbno,
1601 __entry->len)
1602);
1603#define DEFINE_REPAIR_EXTENT_EVENT(name) \
b5e2196e 1604DEFINE_EVENT(xrep_extent_class, name, \
77a1396f
DW
1605 TP_PROTO(struct xfs_perag *pag, xfs_agblock_t agbno, xfs_extlen_t len), \
1606 TP_ARGS(pag, agbno, len))
1c7ce115
DW
1607DEFINE_REPAIR_EXTENT_EVENT(xreap_dispose_unmap_extent);
1608DEFINE_REPAIR_EXTENT_EVENT(xreap_dispose_free_extent);
1609DEFINE_REPAIR_EXTENT_EVENT(xreap_agextent_binval);
5befb047 1610DEFINE_REPAIR_EXTENT_EVENT(xreap_bmapi_binval);
b5e2196e 1611DEFINE_REPAIR_EXTENT_EVENT(xrep_agfl_insert);
718fa74b 1612
1c7ce115
DW
1613DECLARE_EVENT_CLASS(xrep_reap_find_class,
1614 TP_PROTO(struct xfs_perag *pag, xfs_agblock_t agbno, xfs_extlen_t len,
1615 bool crosslinked),
1616 TP_ARGS(pag, agbno, len, crosslinked),
1617 TP_STRUCT__entry(
1618 __field(dev_t, dev)
1619 __field(xfs_agnumber_t, agno)
1620 __field(xfs_agblock_t, agbno)
1621 __field(xfs_extlen_t, len)
1622 __field(bool, crosslinked)
1623 ),
1624 TP_fast_assign(
1625 __entry->dev = pag->pag_mount->m_super->s_dev;
1626 __entry->agno = pag->pag_agno;
1627 __entry->agbno = agbno;
1628 __entry->len = len;
1629 __entry->crosslinked = crosslinked;
1630 ),
1631 TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x crosslinked %d",
1632 MAJOR(__entry->dev), MINOR(__entry->dev),
1633 __entry->agno,
1634 __entry->agbno,
1635 __entry->len,
1636 __entry->crosslinked ? 1 : 0)
1637);
1638#define DEFINE_REPAIR_REAP_FIND_EVENT(name) \
1639DEFINE_EVENT(xrep_reap_find_class, name, \
1640 TP_PROTO(struct xfs_perag *pag, xfs_agblock_t agbno, xfs_extlen_t len, \
1641 bool crosslinked), \
1642 TP_ARGS(pag, agbno, len, crosslinked))
1643DEFINE_REPAIR_REAP_FIND_EVENT(xreap_agextent_select);
5befb047 1644DEFINE_REPAIR_REAP_FIND_EVENT(xreap_bmapi_select);
1c7ce115 1645
b5e2196e 1646DECLARE_EVENT_CLASS(xrep_rmap_class,
718fa74b
DW
1647 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,
1648 xfs_agblock_t agbno, xfs_extlen_t len,
1649 uint64_t owner, uint64_t offset, unsigned int flags),
1650 TP_ARGS(mp, agno, agbno, len, owner, offset, flags),
1651 TP_STRUCT__entry(
1652 __field(dev_t, dev)
1653 __field(xfs_agnumber_t, agno)
1654 __field(xfs_agblock_t, agbno)
1655 __field(xfs_extlen_t, len)
1656 __field(uint64_t, owner)
1657 __field(uint64_t, offset)
1658 __field(unsigned int, flags)
1659 ),
1660 TP_fast_assign(
1661 __entry->dev = mp->m_super->s_dev;
1662 __entry->agno = agno;
1663 __entry->agbno = agbno;
1664 __entry->len = len;
1665 __entry->owner = owner;
1666 __entry->offset = offset;
1667 __entry->flags = flags;
1668 ),
7989accc 1669 TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x owner 0x%llx fileoff 0x%llx flags 0x%x",
718fa74b
DW
1670 MAJOR(__entry->dev), MINOR(__entry->dev),
1671 __entry->agno,
1672 __entry->agbno,
1673 __entry->len,
1674 __entry->owner,
1675 __entry->offset,
1676 __entry->flags)
1677);
1678#define DEFINE_REPAIR_RMAP_EVENT(name) \
b5e2196e 1679DEFINE_EVENT(xrep_rmap_class, name, \
718fa74b
DW
1680 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \
1681 xfs_agblock_t agbno, xfs_extlen_t len, \
1682 uint64_t owner, uint64_t offset, unsigned int flags), \
1683 TP_ARGS(mp, agno, agbno, len, owner, offset, flags))
dbfbf3bd 1684DEFINE_REPAIR_RMAP_EVENT(xrep_ibt_walk_rmap);
8f71bede 1685DEFINE_REPAIR_RMAP_EVENT(xrep_bmap_walk_rmap);
718fa74b 1686
4bdfd7d1
DW
1687TRACE_EVENT(xrep_abt_found,
1688 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,
1689 const struct xfs_alloc_rec_incore *rec),
1690 TP_ARGS(mp, agno, rec),
1691 TP_STRUCT__entry(
1692 __field(dev_t, dev)
1693 __field(xfs_agnumber_t, agno)
1694 __field(xfs_agblock_t, startblock)
1695 __field(xfs_extlen_t, blockcount)
1696 ),
1697 TP_fast_assign(
1698 __entry->dev = mp->m_super->s_dev;
1699 __entry->agno = agno;
1700 __entry->startblock = rec->ar_startblock;
1701 __entry->blockcount = rec->ar_blockcount;
1702 ),
1703 TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x",
1704 MAJOR(__entry->dev), MINOR(__entry->dev),
1705 __entry->agno,
1706 __entry->startblock,
1707 __entry->blockcount)
1708)
1709
dbfbf3bd
DW
1710TRACE_EVENT(xrep_ibt_found,
1711 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,
1712 const struct xfs_inobt_rec_incore *rec),
1713 TP_ARGS(mp, agno, rec),
1714 TP_STRUCT__entry(
1715 __field(dev_t, dev)
1716 __field(xfs_agnumber_t, agno)
1717 __field(xfs_agino_t, startino)
1718 __field(uint16_t, holemask)
1719 __field(uint8_t, count)
1720 __field(uint8_t, freecount)
1721 __field(uint64_t, freemask)
1722 ),
1723 TP_fast_assign(
1724 __entry->dev = mp->m_super->s_dev;
1725 __entry->agno = agno;
1726 __entry->startino = rec->ir_startino;
1727 __entry->holemask = rec->ir_holemask;
1728 __entry->count = rec->ir_count;
1729 __entry->freecount = rec->ir_freecount;
1730 __entry->freemask = rec->ir_free;
1731 ),
1732 TP_printk("dev %d:%d agno 0x%x agino 0x%x holemask 0x%x count 0x%x freecount 0x%x freemask 0x%llx",
1733 MAJOR(__entry->dev), MINOR(__entry->dev),
1734 __entry->agno,
1735 __entry->startino,
1736 __entry->holemask,
1737 __entry->count,
1738 __entry->freecount,
1739 __entry->freemask)
1740)
1741
9099cd38
DW
1742TRACE_EVENT(xrep_refc_found,
1743 TP_PROTO(struct xfs_perag *pag, const struct xfs_refcount_irec *rec),
1744 TP_ARGS(pag, rec),
718fa74b
DW
1745 TP_STRUCT__entry(
1746 __field(dev_t, dev)
1747 __field(xfs_agnumber_t, agno)
9099cd38 1748 __field(enum xfs_refc_domain, domain)
718fa74b
DW
1749 __field(xfs_agblock_t, startblock)
1750 __field(xfs_extlen_t, blockcount)
1751 __field(xfs_nlink_t, refcount)
1752 ),
1753 TP_fast_assign(
9099cd38
DW
1754 __entry->dev = pag->pag_mount->m_super->s_dev;
1755 __entry->agno = pag->pag_agno;
1756 __entry->domain = rec->rc_domain;
1757 __entry->startblock = rec->rc_startblock;
1758 __entry->blockcount = rec->rc_blockcount;
1759 __entry->refcount = rec->rc_refcount;
718fa74b 1760 ),
9099cd38 1761 TP_printk("dev %d:%d agno 0x%x dom %s agbno 0x%x fsbcount 0x%x refcount %u",
718fa74b
DW
1762 MAJOR(__entry->dev), MINOR(__entry->dev),
1763 __entry->agno,
9099cd38 1764 __print_symbolic(__entry->domain, XFS_REFC_DOMAIN_STRINGS),
718fa74b
DW
1765 __entry->startblock,
1766 __entry->blockcount,
1767 __entry->refcount)
1768)
1769
8f71bede
DW
1770TRACE_EVENT(xrep_bmap_found,
1771 TP_PROTO(struct xfs_inode *ip, int whichfork,
1772 struct xfs_bmbt_irec *irec),
1773 TP_ARGS(ip, whichfork, irec),
1774 TP_STRUCT__entry(
1775 __field(dev_t, dev)
1776 __field(xfs_ino_t, ino)
1777 __field(int, whichfork)
1778 __field(xfs_fileoff_t, lblk)
1779 __field(xfs_filblks_t, len)
1780 __field(xfs_fsblock_t, pblk)
1781 __field(int, state)
1782 ),
1783 TP_fast_assign(
1784 __entry->dev = VFS_I(ip)->i_sb->s_dev;
1785 __entry->ino = ip->i_ino;
1786 __entry->whichfork = whichfork;
1787 __entry->lblk = irec->br_startoff;
1788 __entry->len = irec->br_blockcount;
1789 __entry->pblk = irec->br_startblock;
1790 __entry->state = irec->br_state;
1791 ),
1792 TP_printk("dev %d:%d ino 0x%llx whichfork %s fileoff 0x%llx fsbcount 0x%llx startblock 0x%llx state %d",
1793 MAJOR(__entry->dev), MINOR(__entry->dev),
1794 __entry->ino,
1795 __print_symbolic(__entry->whichfork, XFS_WHICHFORK_STRINGS),
1796 __entry->lblk,
1797 __entry->len,
1798 __entry->pblk,
1799 __entry->state)
1800);
1801
32080a9b
DW
1802TRACE_EVENT(xrep_rmap_found,
1803 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,
1804 const struct xfs_rmap_irec *rec),
1805 TP_ARGS(mp, agno, rec),
1806 TP_STRUCT__entry(
1807 __field(dev_t, dev)
1808 __field(xfs_agnumber_t, agno)
1809 __field(xfs_agblock_t, agbno)
1810 __field(xfs_extlen_t, len)
1811 __field(uint64_t, owner)
1812 __field(uint64_t, offset)
1813 __field(unsigned int, flags)
1814 ),
1815 TP_fast_assign(
1816 __entry->dev = mp->m_super->s_dev;
1817 __entry->agno = agno;
1818 __entry->agbno = rec->rm_startblock;
1819 __entry->len = rec->rm_blockcount;
1820 __entry->owner = rec->rm_owner;
1821 __entry->offset = rec->rm_offset;
1822 __entry->flags = rec->rm_flags;
1823 ),
1824 TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x owner 0x%llx fileoff 0x%llx flags 0x%x",
1825 MAJOR(__entry->dev), MINOR(__entry->dev),
1826 __entry->agno,
1827 __entry->agbno,
1828 __entry->len,
1829 __entry->owner,
1830 __entry->offset,
1831 __entry->flags)
1832);
1833
b5e2196e 1834TRACE_EVENT(xrep_findroot_block,
718fa74b
DW
1835 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, xfs_agblock_t agbno,
1836 uint32_t magic, uint16_t level),
1837 TP_ARGS(mp, agno, agbno, magic, level),
1838 TP_STRUCT__entry(
1839 __field(dev_t, dev)
1840 __field(xfs_agnumber_t, agno)
1841 __field(xfs_agblock_t, agbno)
1842 __field(uint32_t, magic)
1843 __field(uint16_t, level)
1844 ),
1845 TP_fast_assign(
1846 __entry->dev = mp->m_super->s_dev;
1847 __entry->agno = agno;
1848 __entry->agbno = agbno;
1849 __entry->magic = magic;
1850 __entry->level = level;
1851 ),
f7b08163 1852 TP_printk("dev %d:%d agno 0x%x agbno 0x%x magic 0x%x level %u",
718fa74b
DW
1853 MAJOR(__entry->dev), MINOR(__entry->dev),
1854 __entry->agno,
1855 __entry->agbno,
1856 __entry->magic,
1857 __entry->level)
1858)
b5e2196e 1859TRACE_EVENT(xrep_calc_ag_resblks,
718fa74b
DW
1860 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,
1861 xfs_agino_t icount, xfs_agblock_t aglen, xfs_agblock_t freelen,
1862 xfs_agblock_t usedlen),
1863 TP_ARGS(mp, agno, icount, aglen, freelen, usedlen),
1864 TP_STRUCT__entry(
1865 __field(dev_t, dev)
1866 __field(xfs_agnumber_t, agno)
1867 __field(xfs_agino_t, icount)
1868 __field(xfs_agblock_t, aglen)
1869 __field(xfs_agblock_t, freelen)
1870 __field(xfs_agblock_t, usedlen)
1871 ),
1872 TP_fast_assign(
1873 __entry->dev = mp->m_super->s_dev;
1874 __entry->agno = agno;
1875 __entry->icount = icount;
1876 __entry->aglen = aglen;
1877 __entry->freelen = freelen;
1878 __entry->usedlen = usedlen;
1879 ),
9febf39d 1880 TP_printk("dev %d:%d agno 0x%x icount %u aglen %u freelen %u usedlen %u",
718fa74b
DW
1881 MAJOR(__entry->dev), MINOR(__entry->dev),
1882 __entry->agno,
1883 __entry->icount,
1884 __entry->aglen,
1885 __entry->freelen,
1886 __entry->usedlen)
1887)
b5e2196e 1888TRACE_EVENT(xrep_calc_ag_resblks_btsize,
718fa74b
DW
1889 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,
1890 xfs_agblock_t bnobt_sz, xfs_agblock_t inobt_sz,
1891 xfs_agblock_t rmapbt_sz, xfs_agblock_t refcbt_sz),
1892 TP_ARGS(mp, agno, bnobt_sz, inobt_sz, rmapbt_sz, refcbt_sz),
1893 TP_STRUCT__entry(
1894 __field(dev_t, dev)
1895 __field(xfs_agnumber_t, agno)
1896 __field(xfs_agblock_t, bnobt_sz)
1897 __field(xfs_agblock_t, inobt_sz)
1898 __field(xfs_agblock_t, rmapbt_sz)
1899 __field(xfs_agblock_t, refcbt_sz)
1900 ),
1901 TP_fast_assign(
1902 __entry->dev = mp->m_super->s_dev;
1903 __entry->agno = agno;
1904 __entry->bnobt_sz = bnobt_sz;
1905 __entry->inobt_sz = inobt_sz;
1906 __entry->rmapbt_sz = rmapbt_sz;
1907 __entry->refcbt_sz = refcbt_sz;
1908 ),
9febf39d 1909 TP_printk("dev %d:%d agno 0x%x bnobt %u inobt %u rmapbt %u refcountbt %u",
718fa74b
DW
1910 MAJOR(__entry->dev), MINOR(__entry->dev),
1911 __entry->agno,
1912 __entry->bnobt_sz,
1913 __entry->inobt_sz,
1914 __entry->rmapbt_sz,
1915 __entry->refcbt_sz)
1916)
b5e2196e 1917TRACE_EVENT(xrep_reset_counters,
4ed080cd
DW
1918 TP_PROTO(struct xfs_mount *mp, struct xchk_fscounters *fsc),
1919 TP_ARGS(mp, fsc),
718fa74b
DW
1920 TP_STRUCT__entry(
1921 __field(dev_t, dev)
4ed080cd
DW
1922 __field(uint64_t, icount)
1923 __field(uint64_t, ifree)
1924 __field(uint64_t, fdblocks)
1925 __field(uint64_t, frextents)
718fa74b
DW
1926 ),
1927 TP_fast_assign(
1928 __entry->dev = mp->m_super->s_dev;
4ed080cd
DW
1929 __entry->icount = fsc->icount;
1930 __entry->ifree = fsc->ifree;
1931 __entry->fdblocks = fsc->fdblocks;
1932 __entry->frextents = fsc->frextents;
718fa74b 1933 ),
4ed080cd
DW
1934 TP_printk("dev %d:%d icount %llu ifree %llu fdblocks %llu frextents %llu",
1935 MAJOR(__entry->dev), MINOR(__entry->dev),
1936 __entry->icount,
1937 __entry->ifree,
1938 __entry->fdblocks,
1939 __entry->frextents)
718fa74b
DW
1940)
1941
be408417
DW
1942DECLARE_EVENT_CLASS(xrep_newbt_extent_class,
1943 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno,
1944 xfs_agblock_t agbno, xfs_extlen_t len,
1945 int64_t owner),
1946 TP_ARGS(mp, agno, agbno, len, owner),
1947 TP_STRUCT__entry(
1948 __field(dev_t, dev)
1949 __field(xfs_agnumber_t, agno)
1950 __field(xfs_agblock_t, agbno)
1951 __field(xfs_extlen_t, len)
1952 __field(int64_t, owner)
1953 ),
1954 TP_fast_assign(
1955 __entry->dev = mp->m_super->s_dev;
1956 __entry->agno = agno;
1957 __entry->agbno = agbno;
1958 __entry->len = len;
1959 __entry->owner = owner;
1960 ),
1961 TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x owner 0x%llx",
1962 MAJOR(__entry->dev), MINOR(__entry->dev),
1963 __entry->agno,
1964 __entry->agbno,
1965 __entry->len,
1966 __entry->owner)
1967);
1968#define DEFINE_NEWBT_EXTENT_EVENT(name) \
1969DEFINE_EVENT(xrep_newbt_extent_class, name, \
1970 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, \
1971 xfs_agblock_t agbno, xfs_extlen_t len, \
1972 int64_t owner), \
1973 TP_ARGS(mp, agno, agbno, len, owner))
1974DEFINE_NEWBT_EXTENT_EVENT(xrep_newbt_alloc_ag_blocks);
1975DEFINE_NEWBT_EXTENT_EVENT(xrep_newbt_alloc_file_blocks);
1976DEFINE_NEWBT_EXTENT_EVENT(xrep_newbt_free_blocks);
1977DEFINE_NEWBT_EXTENT_EVENT(xrep_newbt_claim_block);
1978
2d295fe6
DW
1979DECLARE_EVENT_CLASS(xrep_dinode_class,
1980 TP_PROTO(struct xfs_scrub *sc, struct xfs_dinode *dip),
1981 TP_ARGS(sc, dip),
1982 TP_STRUCT__entry(
1983 __field(dev_t, dev)
1984 __field(xfs_ino_t, ino)
1985 __field(uint16_t, mode)
1986 __field(uint8_t, version)
1987 __field(uint8_t, format)
1988 __field(uint32_t, uid)
1989 __field(uint32_t, gid)
1990 __field(uint64_t, size)
1991 __field(uint64_t, nblocks)
1992 __field(uint32_t, extsize)
1993 __field(uint32_t, nextents)
1994 __field(uint16_t, anextents)
1995 __field(uint8_t, forkoff)
1996 __field(uint8_t, aformat)
1997 __field(uint16_t, flags)
1998 __field(uint32_t, gen)
1999 __field(uint64_t, flags2)
2000 __field(uint32_t, cowextsize)
2001 ),
2002 TP_fast_assign(
2003 __entry->dev = sc->mp->m_super->s_dev;
2004 __entry->ino = sc->sm->sm_ino;
2005 __entry->mode = be16_to_cpu(dip->di_mode);
2006 __entry->version = dip->di_version;
2007 __entry->format = dip->di_format;
2008 __entry->uid = be32_to_cpu(dip->di_uid);
2009 __entry->gid = be32_to_cpu(dip->di_gid);
2010 __entry->size = be64_to_cpu(dip->di_size);
2011 __entry->nblocks = be64_to_cpu(dip->di_nblocks);
2012 __entry->extsize = be32_to_cpu(dip->di_extsize);
2013 __entry->nextents = be32_to_cpu(dip->di_nextents);
2014 __entry->anextents = be16_to_cpu(dip->di_anextents);
2015 __entry->forkoff = dip->di_forkoff;
2016 __entry->aformat = dip->di_aformat;
2017 __entry->flags = be16_to_cpu(dip->di_flags);
2018 __entry->gen = be32_to_cpu(dip->di_gen);
2019 __entry->flags2 = be64_to_cpu(dip->di_flags2);
2020 __entry->cowextsize = be32_to_cpu(dip->di_cowextsize);
2021 ),
2022 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",
2023 MAJOR(__entry->dev), MINOR(__entry->dev),
2024 __entry->ino,
2025 __entry->mode,
2026 __entry->version,
2027 __entry->format,
2028 __entry->uid,
2029 __entry->gid,
2030 __entry->size,
2031 __entry->nblocks,
2032 __entry->extsize,
2033 __entry->nextents,
2034 __entry->anextents,
2035 __entry->forkoff,
2036 __entry->aformat,
2037 __entry->flags,
2038 __entry->gen,
2039 __entry->flags2,
2040 __entry->cowextsize)
2041)
2042
2043#define DEFINE_REPAIR_DINODE_EVENT(name) \
2044DEFINE_EVENT(xrep_dinode_class, name, \
2045 TP_PROTO(struct xfs_scrub *sc, struct xfs_dinode *dip), \
2046 TP_ARGS(sc, dip))
2047DEFINE_REPAIR_DINODE_EVENT(xrep_dinode_header);
2048DEFINE_REPAIR_DINODE_EVENT(xrep_dinode_mode);
2049DEFINE_REPAIR_DINODE_EVENT(xrep_dinode_flags);
2050DEFINE_REPAIR_DINODE_EVENT(xrep_dinode_size);
2051DEFINE_REPAIR_DINODE_EVENT(xrep_dinode_extsize_hints);
2052DEFINE_REPAIR_DINODE_EVENT(xrep_dinode_zap_symlink);
2053DEFINE_REPAIR_DINODE_EVENT(xrep_dinode_zap_dir);
2054DEFINE_REPAIR_DINODE_EVENT(xrep_dinode_fixed);
e744cef2
DW
2055DEFINE_REPAIR_DINODE_EVENT(xrep_dinode_zap_forks);
2056DEFINE_REPAIR_DINODE_EVENT(xrep_dinode_zap_dfork);
2057DEFINE_REPAIR_DINODE_EVENT(xrep_dinode_zap_afork);
2058DEFINE_REPAIR_DINODE_EVENT(xrep_dinode_ensure_forkoff);
2d295fe6
DW
2059
2060DECLARE_EVENT_CLASS(xrep_inode_class,
2061 TP_PROTO(struct xfs_scrub *sc),
2062 TP_ARGS(sc),
2063 TP_STRUCT__entry(
2064 __field(dev_t, dev)
2065 __field(xfs_ino_t, ino)
2066 __field(xfs_fsize_t, size)
2067 __field(xfs_rfsblock_t, nblocks)
2068 __field(uint16_t, flags)
2069 __field(uint64_t, flags2)
2070 __field(uint32_t, nextents)
2071 __field(uint8_t, format)
2072 __field(uint32_t, anextents)
2073 __field(uint8_t, aformat)
2074 ),
2075 TP_fast_assign(
2076 __entry->dev = sc->mp->m_super->s_dev;
2077 __entry->ino = sc->sm->sm_ino;
2078 __entry->size = sc->ip->i_disk_size;
2079 __entry->nblocks = sc->ip->i_nblocks;
2080 __entry->flags = sc->ip->i_diflags;
2081 __entry->flags2 = sc->ip->i_diflags2;
2082 __entry->nextents = sc->ip->i_df.if_nextents;
2083 __entry->format = sc->ip->i_df.if_format;
2084 __entry->anextents = sc->ip->i_af.if_nextents;
2085 __entry->aformat = sc->ip->i_af.if_format;
2086 ),
2087 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",
2088 MAJOR(__entry->dev), MINOR(__entry->dev),
2089 __entry->ino,
2090 __entry->size,
2091 __entry->nblocks,
2092 __entry->flags,
2093 __entry->flags2,
2094 __entry->nextents,
2095 __entry->format,
2096 __entry->anextents,
2097 __entry->aformat)
2098)
2099
2100#define DEFINE_REPAIR_INODE_EVENT(name) \
2101DEFINE_EVENT(xrep_inode_class, name, \
2102 TP_PROTO(struct xfs_scrub *sc), \
2103 TP_ARGS(sc))
2104DEFINE_REPAIR_INODE_EVENT(xrep_inode_blockcounts);
2105DEFINE_REPAIR_INODE_EVENT(xrep_inode_ids);
2106DEFINE_REPAIR_INODE_EVENT(xrep_inode_flags);
2107DEFINE_REPAIR_INODE_EVENT(xrep_inode_blockdir_size);
2108DEFINE_REPAIR_INODE_EVENT(xrep_inode_sfdir_size);
2109DEFINE_REPAIR_INODE_EVENT(xrep_inode_dir_size);
2110DEFINE_REPAIR_INODE_EVENT(xrep_inode_fixed);
2111
e744cef2
DW
2112TRACE_EVENT(xrep_dinode_count_rmaps,
2113 TP_PROTO(struct xfs_scrub *sc, xfs_rfsblock_t data_blocks,
2114 xfs_rfsblock_t rt_blocks, xfs_rfsblock_t attr_blocks,
2115 xfs_extnum_t data_extents, xfs_extnum_t rt_extents,
2116 xfs_aextnum_t attr_extents),
2117 TP_ARGS(sc, data_blocks, rt_blocks, attr_blocks, data_extents,
2118 rt_extents, attr_extents),
2119 TP_STRUCT__entry(
2120 __field(dev_t, dev)
2121 __field(xfs_ino_t, ino)
2122 __field(xfs_rfsblock_t, data_blocks)
2123 __field(xfs_rfsblock_t, rt_blocks)
2124 __field(xfs_rfsblock_t, attr_blocks)
2125 __field(xfs_extnum_t, data_extents)
2126 __field(xfs_extnum_t, rt_extents)
2127 __field(xfs_aextnum_t, attr_extents)
2128 ),
2129 TP_fast_assign(
2130 __entry->dev = sc->mp->m_super->s_dev;
2131 __entry->ino = sc->sm->sm_ino;
2132 __entry->data_blocks = data_blocks;
2133 __entry->rt_blocks = rt_blocks;
2134 __entry->attr_blocks = attr_blocks;
2135 __entry->data_extents = data_extents;
2136 __entry->rt_extents = rt_extents;
2137 __entry->attr_extents = attr_extents;
2138 ),
2139 TP_printk("dev %d:%d ino 0x%llx dblocks 0x%llx rtblocks 0x%llx ablocks 0x%llx dextents %llu rtextents %llu aextents %u",
2140 MAJOR(__entry->dev), MINOR(__entry->dev),
2141 __entry->ino,
2142 __entry->data_blocks,
2143 __entry->rt_blocks,
2144 __entry->attr_blocks,
2145 __entry->data_extents,
2146 __entry->rt_extents,
2147 __entry->attr_extents)
2148);
2149
5385f1a6
DW
2150TRACE_EVENT(xrep_dinode_findmode_dirent,
2151 TP_PROTO(struct xfs_scrub *sc, struct xfs_inode *dp,
2152 unsigned int ftype),
2153 TP_ARGS(sc, dp, ftype),
2154 TP_STRUCT__entry(
2155 __field(dev_t, dev)
2156 __field(xfs_ino_t, ino)
2157 __field(xfs_ino_t, parent_ino)
2158 __field(unsigned int, ftype)
2159 ),
2160 TP_fast_assign(
2161 __entry->dev = sc->mp->m_super->s_dev;
2162 __entry->ino = sc->sm->sm_ino;
2163 __entry->parent_ino = dp->i_ino;
2164 __entry->ftype = ftype;
2165 ),
2166 TP_printk("dev %d:%d ino 0x%llx parent_ino 0x%llx ftype '%s'",
2167 MAJOR(__entry->dev), MINOR(__entry->dev),
2168 __entry->ino,
2169 __entry->parent_ino,
2170 __print_symbolic(__entry->ftype, XFS_DIR3_FTYPE_STR))
2171);
2172
2173TRACE_EVENT(xrep_dinode_findmode_dirent_inval,
2174 TP_PROTO(struct xfs_scrub *sc, struct xfs_inode *dp,
2175 unsigned int ftype, unsigned int found_ftype),
2176 TP_ARGS(sc, dp, ftype, found_ftype),
2177 TP_STRUCT__entry(
2178 __field(dev_t, dev)
2179 __field(xfs_ino_t, ino)
2180 __field(xfs_ino_t, parent_ino)
2181 __field(unsigned int, ftype)
2182 __field(unsigned int, found_ftype)
2183 ),
2184 TP_fast_assign(
2185 __entry->dev = sc->mp->m_super->s_dev;
2186 __entry->ino = sc->sm->sm_ino;
2187 __entry->parent_ino = dp->i_ino;
2188 __entry->ftype = ftype;
2189 __entry->found_ftype = found_ftype;
2190 ),
2191 TP_printk("dev %d:%d ino 0x%llx parent_ino 0x%llx ftype '%s' found_ftype '%s'",
2192 MAJOR(__entry->dev), MINOR(__entry->dev),
2193 __entry->ino,
2194 __entry->parent_ino,
2195 __print_symbolic(__entry->ftype, XFS_DIR3_FTYPE_STR),
2196 __print_symbolic(__entry->found_ftype, XFS_DIR3_FTYPE_STR))
2197);
2198
dbbdbd00
DW
2199TRACE_EVENT(xrep_cow_mark_file_range,
2200 TP_PROTO(struct xfs_inode *ip, xfs_fsblock_t startblock,
2201 xfs_fileoff_t startoff, xfs_filblks_t blockcount),
2202 TP_ARGS(ip, startblock, startoff, blockcount),
2203 TP_STRUCT__entry(
2204 __field(dev_t, dev)
2205 __field(xfs_ino_t, ino)
2206 __field(xfs_fsblock_t, startblock)
2207 __field(xfs_fileoff_t, startoff)
2208 __field(xfs_filblks_t, blockcount)
2209 ),
2210 TP_fast_assign(
2211 __entry->dev = ip->i_mount->m_super->s_dev;
2212 __entry->ino = ip->i_ino;
2213 __entry->startoff = startoff;
2214 __entry->startblock = startblock;
2215 __entry->blockcount = blockcount;
2216 ),
2217 TP_printk("dev %d:%d ino 0x%llx fileoff 0x%llx startblock 0x%llx fsbcount 0x%llx",
2218 MAJOR(__entry->dev), MINOR(__entry->dev),
2219 __entry->ino,
2220 __entry->startoff,
2221 __entry->startblock,
2222 __entry->blockcount)
2223);
2224
2225TRACE_EVENT(xrep_cow_replace_mapping,
2226 TP_PROTO(struct xfs_inode *ip, const struct xfs_bmbt_irec *irec,
2227 xfs_fsblock_t new_startblock, xfs_extlen_t new_blockcount),
2228 TP_ARGS(ip, irec, new_startblock, new_blockcount),
2229 TP_STRUCT__entry(
2230 __field(dev_t, dev)
2231 __field(xfs_ino_t, ino)
2232 __field(xfs_fsblock_t, startblock)
2233 __field(xfs_fileoff_t, startoff)
2234 __field(xfs_filblks_t, blockcount)
2235 __field(xfs_exntst_t, state)
2236 __field(xfs_fsblock_t, new_startblock)
2237 __field(xfs_extlen_t, new_blockcount)
2238 ),
2239 TP_fast_assign(
2240 __entry->dev = ip->i_mount->m_super->s_dev;
2241 __entry->ino = ip->i_ino;
2242 __entry->startoff = irec->br_startoff;
2243 __entry->startblock = irec->br_startblock;
2244 __entry->blockcount = irec->br_blockcount;
2245 __entry->state = irec->br_state;
2246 __entry->new_startblock = new_startblock;
2247 __entry->new_blockcount = new_blockcount;
2248 ),
2249 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",
2250 MAJOR(__entry->dev), MINOR(__entry->dev),
2251 __entry->ino,
2252 __entry->startoff,
2253 __entry->startblock,
2254 __entry->blockcount,
2255 __entry->state,
2256 __entry->new_startblock,
2257 __entry->new_blockcount)
2258);
2259
2260TRACE_EVENT(xrep_cow_free_staging,
2261 TP_PROTO(struct xfs_perag *pag, xfs_agblock_t agbno,
2262 xfs_extlen_t blockcount),
2263 TP_ARGS(pag, agbno, blockcount),
2264 TP_STRUCT__entry(
2265 __field(dev_t, dev)
2266 __field(xfs_agnumber_t, agno)
2267 __field(xfs_agblock_t, agbno)
2268 __field(xfs_extlen_t, blockcount)
2269 ),
2270 TP_fast_assign(
2271 __entry->dev = pag->pag_mount->m_super->s_dev;
2272 __entry->agno = pag->pag_agno;
2273 __entry->agbno = agbno;
2274 __entry->blockcount = blockcount;
2275 ),
2276 TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x",
2277 MAJOR(__entry->dev), MINOR(__entry->dev),
2278 __entry->agno,
2279 __entry->agbno,
2280 __entry->blockcount)
2281);
2282
a5b91555
DW
2283#ifdef CONFIG_XFS_QUOTA
2284DECLARE_EVENT_CLASS(xrep_dquot_class,
2285 TP_PROTO(struct xfs_mount *mp, uint8_t type, uint32_t id),
2286 TP_ARGS(mp, type, id),
2287 TP_STRUCT__entry(
2288 __field(dev_t, dev)
2289 __field(uint8_t, type)
2290 __field(uint32_t, id)
2291 ),
2292 TP_fast_assign(
2293 __entry->dev = mp->m_super->s_dev;
2294 __entry->id = id;
2295 __entry->type = type;
2296 ),
2297 TP_printk("dev %d:%d type %s id 0x%x",
2298 MAJOR(__entry->dev), MINOR(__entry->dev),
2299 __print_flags(__entry->type, "|", XFS_DQTYPE_STRINGS),
2300 __entry->id)
2301);
2302
2303#define DEFINE_XREP_DQUOT_EVENT(name) \
2304DEFINE_EVENT(xrep_dquot_class, name, \
2305 TP_PROTO(struct xfs_mount *mp, uint8_t type, uint32_t id), \
2306 TP_ARGS(mp, type, id))
2307DEFINE_XREP_DQUOT_EVENT(xrep_dquot_item);
2308DEFINE_XREP_DQUOT_EVENT(xrep_disk_dquot);
2309DEFINE_XREP_DQUOT_EVENT(xrep_dquot_item_fill_bmap_hole);
96ed2ae4 2310DEFINE_XREP_DQUOT_EVENT(xrep_quotacheck_dquot);
a5b91555
DW
2311#endif /* CONFIG_XFS_QUOTA */
2312
6b631c60
DW
2313DEFINE_SCRUB_NLINKS_DIFF_EVENT(xrep_nlinks_update_inode);
2314DEFINE_SCRUB_NLINKS_DIFF_EVENT(xrep_nlinks_unfixable_inode);
2315
7e1b84b2
DW
2316TRACE_EVENT(xrep_rmap_live_update,
2317 TP_PROTO(struct xfs_mount *mp, xfs_agnumber_t agno, unsigned int op,
2318 const struct xfs_rmap_update_params *p),
2319 TP_ARGS(mp, agno, op, p),
2320 TP_STRUCT__entry(
2321 __field(dev_t, dev)
2322 __field(xfs_agnumber_t, agno)
2323 __field(unsigned int, op)
2324 __field(xfs_agblock_t, agbno)
2325 __field(xfs_extlen_t, len)
2326 __field(uint64_t, owner)
2327 __field(uint64_t, offset)
2328 __field(unsigned int, flags)
2329 ),
2330 TP_fast_assign(
2331 __entry->dev = mp->m_super->s_dev;
2332 __entry->agno = agno;
2333 __entry->op = op;
2334 __entry->agbno = p->startblock;
2335 __entry->len = p->blockcount;
2336 xfs_owner_info_unpack(&p->oinfo, &__entry->owner,
2337 &__entry->offset, &__entry->flags);
2338 if (p->unwritten)
2339 __entry->flags |= XFS_RMAP_UNWRITTEN;
2340 ),
2341 TP_printk("dev %d:%d agno 0x%x op %d agbno 0x%x fsbcount 0x%x owner 0x%llx fileoff 0x%llx flags 0x%x",
2342 MAJOR(__entry->dev), MINOR(__entry->dev),
2343 __entry->agno,
2344 __entry->op,
2345 __entry->agbno,
2346 __entry->len,
2347 __entry->owner,
2348 __entry->offset,
2349 __entry->flags)
2350);
2351
84c14ee3
DW
2352TRACE_EVENT(xrep_tempfile_create,
2353 TP_PROTO(struct xfs_scrub *sc),
2354 TP_ARGS(sc),
2355 TP_STRUCT__entry(
2356 __field(dev_t, dev)
2357 __field(xfs_ino_t, ino)
2358 __field(unsigned int, type)
2359 __field(xfs_agnumber_t, agno)
2360 __field(xfs_ino_t, inum)
2361 __field(unsigned int, gen)
2362 __field(unsigned int, flags)
2363 __field(xfs_ino_t, temp_inum)
2364 ),
2365 TP_fast_assign(
2366 __entry->dev = sc->mp->m_super->s_dev;
2367 __entry->ino = sc->file ? XFS_I(file_inode(sc->file))->i_ino : 0;
2368 __entry->type = sc->sm->sm_type;
2369 __entry->agno = sc->sm->sm_agno;
2370 __entry->inum = sc->sm->sm_ino;
2371 __entry->gen = sc->sm->sm_gen;
2372 __entry->flags = sc->sm->sm_flags;
2373 __entry->temp_inum = sc->tempip->i_ino;
2374 ),
2375 TP_printk("dev %d:%d ino 0x%llx type %s inum 0x%llx gen 0x%x flags 0x%x temp_inum 0x%llx",
2376 MAJOR(__entry->dev), MINOR(__entry->dev),
2377 __entry->ino,
2378 __print_symbolic(__entry->type, XFS_SCRUB_TYPE_STRINGS),
2379 __entry->inum,
2380 __entry->gen,
2381 __entry->flags,
2382 __entry->temp_inum)
2383);
2384
e81ce424
DW
2385DECLARE_EVENT_CLASS(xrep_tempfile_class,
2386 TP_PROTO(struct xfs_scrub *sc, int whichfork,
2387 struct xfs_bmbt_irec *irec),
2388 TP_ARGS(sc, whichfork, irec),
2389 TP_STRUCT__entry(
2390 __field(dev_t, dev)
2391 __field(xfs_ino_t, ino)
2392 __field(int, whichfork)
2393 __field(xfs_fileoff_t, lblk)
2394 __field(xfs_filblks_t, len)
2395 __field(xfs_fsblock_t, pblk)
2396 __field(int, state)
2397 ),
2398 TP_fast_assign(
2399 __entry->dev = sc->mp->m_super->s_dev;
2400 __entry->ino = sc->tempip->i_ino;
2401 __entry->whichfork = whichfork;
2402 __entry->lblk = irec->br_startoff;
2403 __entry->len = irec->br_blockcount;
2404 __entry->pblk = irec->br_startblock;
2405 __entry->state = irec->br_state;
2406 ),
2407 TP_printk("dev %d:%d ino 0x%llx whichfork %s fileoff 0x%llx fsbcount 0x%llx startblock 0x%llx state %d",
2408 MAJOR(__entry->dev), MINOR(__entry->dev),
2409 __entry->ino,
2410 __print_symbolic(__entry->whichfork, XFS_WHICHFORK_STRINGS),
2411 __entry->lblk,
2412 __entry->len,
2413 __entry->pblk,
2414 __entry->state)
2415);
2416#define DEFINE_XREP_TEMPFILE_EVENT(name) \
2417DEFINE_EVENT(xrep_tempfile_class, name, \
2418 TP_PROTO(struct xfs_scrub *sc, int whichfork, \
2419 struct xfs_bmbt_irec *irec), \
2420 TP_ARGS(sc, whichfork, irec))
2421DEFINE_XREP_TEMPFILE_EVENT(xrep_tempfile_prealloc);
2422DEFINE_XREP_TEMPFILE_EVENT(xrep_tempfile_copyin);
2423
5befb047
DW
2424TRACE_EVENT(xreap_ifork_extent,
2425 TP_PROTO(struct xfs_scrub *sc, struct xfs_inode *ip, int whichfork,
2426 const struct xfs_bmbt_irec *irec),
2427 TP_ARGS(sc, ip, whichfork, irec),
2428 TP_STRUCT__entry(
2429 __field(dev_t, dev)
2430 __field(xfs_ino_t, ino)
2431 __field(int, whichfork)
2432 __field(xfs_fileoff_t, fileoff)
2433 __field(xfs_filblks_t, len)
2434 __field(xfs_agnumber_t, agno)
2435 __field(xfs_agblock_t, agbno)
2436 __field(int, state)
2437 ),
2438 TP_fast_assign(
2439 __entry->dev = sc->mp->m_super->s_dev;
2440 __entry->ino = ip->i_ino;
2441 __entry->whichfork = whichfork;
2442 __entry->fileoff = irec->br_startoff;
2443 __entry->len = irec->br_blockcount;
2444 __entry->agno = XFS_FSB_TO_AGNO(sc->mp, irec->br_startblock);
2445 __entry->agbno = XFS_FSB_TO_AGBNO(sc->mp, irec->br_startblock);
2446 __entry->state = irec->br_state;
2447 ),
2448 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",
2449 MAJOR(__entry->dev), MINOR(__entry->dev),
2450 __entry->ino,
2451 __print_symbolic(__entry->whichfork, XFS_WHICHFORK_STRINGS),
2452 __entry->agno,
2453 __entry->agbno,
2454 __entry->fileoff,
2455 __entry->len,
2456 __entry->state)
2457);
2458
2459TRACE_EVENT(xreap_bmapi_binval_scan,
2460 TP_PROTO(struct xfs_scrub *sc, const struct xfs_bmbt_irec *irec,
2461 xfs_extlen_t scan_blocks),
2462 TP_ARGS(sc, irec, scan_blocks),
2463 TP_STRUCT__entry(
2464 __field(dev_t, dev)
2465 __field(xfs_filblks_t, len)
2466 __field(xfs_agnumber_t, agno)
2467 __field(xfs_agblock_t, agbno)
2468 __field(xfs_extlen_t, scan_blocks)
2469 ),
2470 TP_fast_assign(
2471 __entry->dev = sc->mp->m_super->s_dev;
2472 __entry->len = irec->br_blockcount;
2473 __entry->agno = XFS_FSB_TO_AGNO(sc->mp, irec->br_startblock);
2474 __entry->agbno = XFS_FSB_TO_AGBNO(sc->mp, irec->br_startblock);
2475 __entry->scan_blocks = scan_blocks;
2476 ),
2477 TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%llx scan_blocks 0x%x",
2478 MAJOR(__entry->dev), MINOR(__entry->dev),
2479 __entry->agno,
2480 __entry->agbno,
2481 __entry->len,
2482 __entry->scan_blocks)
2483);
2484
e47dcf11
DW
2485TRACE_EVENT(xrep_xattr_recover_leafblock,
2486 TP_PROTO(struct xfs_inode *ip, xfs_dablk_t dabno, uint16_t magic),
2487 TP_ARGS(ip, dabno, magic),
2488 TP_STRUCT__entry(
2489 __field(dev_t, dev)
2490 __field(xfs_ino_t, ino)
2491 __field(xfs_dablk_t, dabno)
2492 __field(uint16_t, magic)
2493 ),
2494 TP_fast_assign(
2495 __entry->dev = ip->i_mount->m_super->s_dev;
2496 __entry->ino = ip->i_ino;
2497 __entry->dabno = dabno;
2498 __entry->magic = magic;
2499 ),
2500 TP_printk("dev %d:%d ino 0x%llx dablk 0x%x magic 0x%x",
2501 MAJOR(__entry->dev), MINOR(__entry->dev),
2502 __entry->ino,
2503 __entry->dabno,
2504 __entry->magic)
2505);
2506
2507DECLARE_EVENT_CLASS(xrep_xattr_salvage_class,
2508 TP_PROTO(struct xfs_inode *ip, unsigned int flags, char *name,
2509 unsigned int namelen, unsigned int valuelen),
2510 TP_ARGS(ip, flags, name, namelen, valuelen),
2511 TP_STRUCT__entry(
2512 __field(dev_t, dev)
2513 __field(xfs_ino_t, ino)
2514 __field(unsigned int, flags)
2515 __field(unsigned int, namelen)
2516 __dynamic_array(char, name, namelen)
2517 __field(unsigned int, valuelen)
2518 ),
2519 TP_fast_assign(
2520 __entry->dev = ip->i_mount->m_super->s_dev;
2521 __entry->ino = ip->i_ino;
2522 __entry->flags = flags;
2523 __entry->namelen = namelen;
2524 memcpy(__get_str(name), name, namelen);
2525 __entry->valuelen = valuelen;
2526 ),
2527 TP_printk("dev %d:%d ino 0x%llx flags %s name '%.*s' valuelen 0x%x",
2528 MAJOR(__entry->dev), MINOR(__entry->dev),
2529 __entry->ino,
2530 __print_flags(__entry->flags, "|", XFS_ATTR_NAMESPACE_STR),
2531 __entry->namelen,
2532 __get_str(name),
2533 __entry->valuelen)
2534);
2535#define DEFINE_XREP_XATTR_SALVAGE_EVENT(name) \
2536DEFINE_EVENT(xrep_xattr_salvage_class, name, \
2537 TP_PROTO(struct xfs_inode *ip, unsigned int flags, char *name, \
2538 unsigned int namelen, unsigned int valuelen), \
2539 TP_ARGS(ip, flags, name, namelen, valuelen))
2540DEFINE_XREP_XATTR_SALVAGE_EVENT(xrep_xattr_salvage_rec);
2541DEFINE_XREP_XATTR_SALVAGE_EVENT(xrep_xattr_insert_rec);
2542
086e934f
DW
2543DECLARE_EVENT_CLASS(xrep_pptr_salvage_class,
2544 TP_PROTO(struct xfs_inode *ip, unsigned int flags, const void *name,
2545 unsigned int namelen, const void *value, unsigned int valuelen),
2546 TP_ARGS(ip, flags, name, namelen, value, valuelen),
2547 TP_STRUCT__entry(
2548 __field(dev_t, dev)
2549 __field(xfs_ino_t, ino)
2550 __field(xfs_ino_t, parent_ino)
2551 __field(unsigned int, parent_gen)
2552 __field(unsigned int, namelen)
2553 __dynamic_array(char, name, namelen)
2554 ),
2555 TP_fast_assign(
2556 const struct xfs_parent_rec *rec = value;
2557
2558 __entry->dev = ip->i_mount->m_super->s_dev;
2559 __entry->ino = ip->i_ino;
2560 __entry->parent_ino = be64_to_cpu(rec->p_ino);
2561 __entry->parent_gen = be32_to_cpu(rec->p_gen);
2562 __entry->namelen = namelen;
2563 memcpy(__get_str(name), name, namelen);
2564 ),
2565 TP_printk("dev %d:%d ino 0x%llx parent_ino 0x%llx parent_gen 0x%x name '%.*s'",
2566 MAJOR(__entry->dev), MINOR(__entry->dev),
2567 __entry->ino,
2568 __entry->parent_ino,
2569 __entry->parent_gen,
2570 __entry->namelen,
2571 __get_str(name))
2572)
2573#define DEFINE_XREP_PPTR_SALVAGE_EVENT(name) \
2574DEFINE_EVENT(xrep_pptr_salvage_class, name, \
2575 TP_PROTO(struct xfs_inode *ip, unsigned int flags, const void *name, \
2576 unsigned int namelen, const void *value, unsigned int valuelen), \
2577 TP_ARGS(ip, flags, name, namelen, value, valuelen))
2578DEFINE_XREP_PPTR_SALVAGE_EVENT(xrep_xattr_salvage_pptr);
2579DEFINE_XREP_PPTR_SALVAGE_EVENT(xrep_xattr_insert_pptr);
2580
e47dcf11
DW
2581TRACE_EVENT(xrep_xattr_class,
2582 TP_PROTO(struct xfs_inode *ip, struct xfs_inode *arg_ip),
2583 TP_ARGS(ip, arg_ip),
2584 TP_STRUCT__entry(
2585 __field(dev_t, dev)
2586 __field(xfs_ino_t, ino)
2587 __field(xfs_ino_t, src_ino)
2588 ),
2589 TP_fast_assign(
2590 __entry->dev = ip->i_mount->m_super->s_dev;
2591 __entry->ino = ip->i_ino;
2592 __entry->src_ino = arg_ip->i_ino;
2593 ),
2594 TP_printk("dev %d:%d ino 0x%llx src 0x%llx",
2595 MAJOR(__entry->dev), MINOR(__entry->dev),
2596 __entry->ino,
2597 __entry->src_ino)
2598)
2599#define DEFINE_XREP_XATTR_EVENT(name) \
2600DEFINE_EVENT(xrep_xattr_class, name, \
2601 TP_PROTO(struct xfs_inode *ip, struct xfs_inode *arg_ip), \
2602 TP_ARGS(ip, arg_ip))
2603DEFINE_XREP_XATTR_EVENT(xrep_xattr_rebuild_tree);
2604DEFINE_XREP_XATTR_EVENT(xrep_xattr_reset_fork);
2605
b1991ee3
DW
2606TRACE_EVENT(xrep_dir_recover_dirblock,
2607 TP_PROTO(struct xfs_inode *dp, xfs_dablk_t dabno, uint32_t magic,
2608 uint32_t magic_guess),
2609 TP_ARGS(dp, dabno, magic, magic_guess),
2610 TP_STRUCT__entry(
2611 __field(dev_t, dev)
2612 __field(xfs_ino_t, dir_ino)
2613 __field(xfs_dablk_t, dabno)
2614 __field(uint32_t, magic)
2615 __field(uint32_t, magic_guess)
2616 ),
2617 TP_fast_assign(
2618 __entry->dev = dp->i_mount->m_super->s_dev;
2619 __entry->dir_ino = dp->i_ino;
2620 __entry->dabno = dabno;
2621 __entry->magic = magic;
2622 __entry->magic_guess = magic_guess;
2623 ),
2624 TP_printk("dev %d:%d dir 0x%llx dablk 0x%x magic 0x%x magic_guess 0x%x",
2625 MAJOR(__entry->dev), MINOR(__entry->dev),
2626 __entry->dir_ino,
2627 __entry->dabno,
2628 __entry->magic,
2629 __entry->magic_guess)
2630);
2631
2632DECLARE_EVENT_CLASS(xrep_dir_class,
2633 TP_PROTO(struct xfs_inode *dp, xfs_ino_t parent_ino),
2634 TP_ARGS(dp, parent_ino),
2635 TP_STRUCT__entry(
2636 __field(dev_t, dev)
2637 __field(xfs_ino_t, dir_ino)
2638 __field(xfs_ino_t, parent_ino)
2639 ),
2640 TP_fast_assign(
2641 __entry->dev = dp->i_mount->m_super->s_dev;
2642 __entry->dir_ino = dp->i_ino;
2643 __entry->parent_ino = parent_ino;
2644 ),
2645 TP_printk("dev %d:%d dir 0x%llx parent 0x%llx",
2646 MAJOR(__entry->dev), MINOR(__entry->dev),
2647 __entry->dir_ino,
2648 __entry->parent_ino)
2649)
2650#define DEFINE_XREP_DIR_EVENT(name) \
2651DEFINE_EVENT(xrep_dir_class, name, \
2652 TP_PROTO(struct xfs_inode *dp, xfs_ino_t parent_ino), \
2653 TP_ARGS(dp, parent_ino))
2654DEFINE_XREP_DIR_EVENT(xrep_dir_rebuild_tree);
2655DEFINE_XREP_DIR_EVENT(xrep_dir_reset_fork);
cc22edab 2656DEFINE_XREP_DIR_EVENT(xrep_parent_reset_dotdot);
b1991ee3
DW
2657
2658DECLARE_EVENT_CLASS(xrep_dirent_class,
2659 TP_PROTO(struct xfs_inode *dp, const struct xfs_name *name,
2660 xfs_ino_t ino),
2661 TP_ARGS(dp, name, ino),
2662 TP_STRUCT__entry(
2663 __field(dev_t, dev)
2664 __field(xfs_ino_t, dir_ino)
2665 __field(unsigned int, namelen)
2666 __dynamic_array(char, name, name->len)
2667 __field(xfs_ino_t, ino)
2668 __field(uint8_t, ftype)
2669 ),
2670 TP_fast_assign(
2671 __entry->dev = dp->i_mount->m_super->s_dev;
2672 __entry->dir_ino = dp->i_ino;
2673 __entry->namelen = name->len;
2674 memcpy(__get_str(name), name->name, name->len);
2675 __entry->ino = ino;
2676 __entry->ftype = name->type;
2677 ),
2678 TP_printk("dev %d:%d dir 0x%llx ftype %s name '%.*s' ino 0x%llx",
2679 MAJOR(__entry->dev), MINOR(__entry->dev),
2680 __entry->dir_ino,
2681 __print_symbolic(__entry->ftype, XFS_DIR3_FTYPE_STR),
2682 __entry->namelen,
2683 __get_str(name),
2684 __entry->ino)
2685)
2686#define DEFINE_XREP_DIRENT_EVENT(name) \
2687DEFINE_EVENT(xrep_dirent_class, name, \
2688 TP_PROTO(struct xfs_inode *dp, const struct xfs_name *name, \
2689 xfs_ino_t ino), \
2690 TP_ARGS(dp, name, ino))
2691DEFINE_XREP_DIRENT_EVENT(xrep_dir_salvage_entry);
2692DEFINE_XREP_DIRENT_EVENT(xrep_dir_stash_createname);
2693DEFINE_XREP_DIRENT_EVENT(xrep_dir_replay_createname);
1e58a8cc 2694DEFINE_XREP_DIRENT_EVENT(xrep_adoption_reparent);
8559b21a
DW
2695DEFINE_XREP_DIRENT_EVENT(xrep_dir_stash_removename);
2696DEFINE_XREP_DIRENT_EVENT(xrep_dir_replay_removename);
1e58a8cc
DW
2697
2698DECLARE_EVENT_CLASS(xrep_adoption_class,
2699 TP_PROTO(struct xfs_inode *dp, struct xfs_inode *ip, bool moved),
2700 TP_ARGS(dp, ip, moved),
2701 TP_STRUCT__entry(
2702 __field(dev_t, dev)
2703 __field(xfs_ino_t, dir_ino)
2704 __field(xfs_ino_t, child_ino)
2705 __field(bool, moved)
2706 ),
2707 TP_fast_assign(
2708 __entry->dev = dp->i_mount->m_super->s_dev;
2709 __entry->dir_ino = dp->i_ino;
2710 __entry->child_ino = ip->i_ino;
2711 __entry->moved = moved;
2712 ),
2713 TP_printk("dev %d:%d dir 0x%llx child 0x%llx moved? %d",
2714 MAJOR(__entry->dev), MINOR(__entry->dev),
2715 __entry->dir_ino,
2716 __entry->child_ino,
2717 __entry->moved)
2718);
2719#define DEFINE_XREP_ADOPTION_EVENT(name) \
2720DEFINE_EVENT(xrep_adoption_class, name, \
2721 TP_PROTO(struct xfs_inode *dp, struct xfs_inode *ip, bool moved), \
2722 TP_ARGS(dp, ip, moved))
2723DEFINE_XREP_ADOPTION_EVENT(xrep_adoption_trans_roll);
b1991ee3
DW
2724
2725DECLARE_EVENT_CLASS(xrep_parent_salvage_class,
2726 TP_PROTO(struct xfs_inode *dp, xfs_ino_t ino),
2727 TP_ARGS(dp, ino),
2728 TP_STRUCT__entry(
2729 __field(dev_t, dev)
2730 __field(xfs_ino_t, dir_ino)
2731 __field(xfs_ino_t, ino)
2732 ),
2733 TP_fast_assign(
2734 __entry->dev = dp->i_mount->m_super->s_dev;
2735 __entry->dir_ino = dp->i_ino;
2736 __entry->ino = ino;
2737 ),
2738 TP_printk("dev %d:%d dir 0x%llx parent 0x%llx",
2739 MAJOR(__entry->dev), MINOR(__entry->dev),
2740 __entry->dir_ino,
2741 __entry->ino)
2742)
2743#define DEFINE_XREP_PARENT_SALVAGE_EVENT(name) \
2744DEFINE_EVENT(xrep_parent_salvage_class, name, \
2745 TP_PROTO(struct xfs_inode *dp, xfs_ino_t ino), \
2746 TP_ARGS(dp, ino))
2747DEFINE_XREP_PARENT_SALVAGE_EVENT(xrep_dir_salvaged_parent);
a07b4557 2748DEFINE_XREP_PARENT_SALVAGE_EVENT(xrep_findparent_dirent);
34c9382c 2749DEFINE_XREP_PARENT_SALVAGE_EVENT(xrep_findparent_from_dcache);
b1991ee3 2750
e6c9e75f
DW
2751TRACE_EVENT(xrep_nlinks_set_record,
2752 TP_PROTO(struct xfs_mount *mp, xfs_ino_t ino,
2753 const struct xchk_nlink *obs),
2754 TP_ARGS(mp, ino, obs),
2755 TP_STRUCT__entry(
2756 __field(dev_t, dev)
2757 __field(xfs_ino_t, ino)
2758 __field(xfs_nlink_t, parents)
2759 __field(xfs_nlink_t, backrefs)
2760 __field(xfs_nlink_t, children)
2761 ),
2762 TP_fast_assign(
2763 __entry->dev = mp->m_super->s_dev;
2764 __entry->ino = ino;
2765 __entry->parents = obs->parents;
2766 __entry->backrefs = obs->backrefs;
2767 __entry->children = obs->children;
2768 ),
2769 TP_printk("dev %d:%d ino 0x%llx parents %u backrefs %u children %u",
2770 MAJOR(__entry->dev), MINOR(__entry->dev),
2771 __entry->ino,
2772 __entry->parents,
2773 __entry->backrefs,
2774 __entry->children)
2775);
2776
73597e3e
DW
2777DECLARE_EVENT_CLASS(xrep_dentry_class,
2778 TP_PROTO(struct xfs_mount *mp, const struct dentry *dentry),
2779 TP_ARGS(mp, dentry),
2780 TP_STRUCT__entry(
2781 __field(dev_t, dev)
2782 __field(unsigned int, flags)
2783 __field(unsigned long, ino)
2784 __field(bool, positive)
2785 __field(unsigned long, parent_ino)
2786 __field(unsigned int, namelen)
2787 __dynamic_array(char, name, dentry->d_name.len)
2788 ),
2789 TP_fast_assign(
2790 __entry->dev = mp->m_super->s_dev;
2791 __entry->flags = dentry->d_flags;
2792 __entry->positive = d_is_positive(dentry);
2793 if (dentry->d_parent && d_inode(dentry->d_parent))
2794 __entry->parent_ino = d_inode(dentry->d_parent)->i_ino;
2795 else
2796 __entry->parent_ino = -1UL;
2797 __entry->ino = d_inode(dentry) ? d_inode(dentry)->i_ino : 0;
2798 __entry->namelen = dentry->d_name.len;
2799 memcpy(__get_str(name), dentry->d_name.name, dentry->d_name.len);
2800 ),
2801 TP_printk("dev %d:%d flags 0x%x positive? %d parent_ino 0x%lx ino 0x%lx name '%.*s'",
2802 MAJOR(__entry->dev), MINOR(__entry->dev),
2803 __entry->flags,
2804 __entry->positive,
2805 __entry->parent_ino,
2806 __entry->ino,
2807 __entry->namelen,
2808 __get_str(name))
2809);
2810#define DEFINE_REPAIR_DENTRY_EVENT(name) \
2811DEFINE_EVENT(xrep_dentry_class, name, \
2812 TP_PROTO(struct xfs_mount *mp, const struct dentry *dentry), \
2813 TP_ARGS(mp, dentry))
2814DEFINE_REPAIR_DENTRY_EVENT(xrep_adoption_check_child);
2815DEFINE_REPAIR_DENTRY_EVENT(xrep_adoption_check_alias);
2816DEFINE_REPAIR_DENTRY_EVENT(xrep_adoption_check_dentry);
2817DEFINE_REPAIR_DENTRY_EVENT(xrep_adoption_invalidate_child);
2818
2651923d
DW
2819TRACE_EVENT(xrep_symlink_salvage_target,
2820 TP_PROTO(struct xfs_inode *ip, char *target, unsigned int targetlen),
2821 TP_ARGS(ip, target, targetlen),
2822 TP_STRUCT__entry(
2823 __field(dev_t, dev)
2824 __field(xfs_ino_t, ino)
2825 __field(unsigned int, targetlen)
2826 __dynamic_array(char, target, targetlen + 1)
2827 ),
2828 TP_fast_assign(
2829 __entry->dev = ip->i_mount->m_super->s_dev;
2830 __entry->ino = ip->i_ino;
2831 __entry->targetlen = targetlen;
2832 memcpy(__get_str(target), target, targetlen);
2833 __get_str(target)[targetlen] = 0;
2834 ),
2835 TP_printk("dev %d:%d ip 0x%llx target '%.*s'",
2836 MAJOR(__entry->dev), MINOR(__entry->dev),
2837 __entry->ino,
2838 __entry->targetlen,
2839 __get_str(target))
2840);
2841
2842DECLARE_EVENT_CLASS(xrep_symlink_class,
2843 TP_PROTO(struct xfs_inode *ip),
2844 TP_ARGS(ip),
2845 TP_STRUCT__entry(
2846 __field(dev_t, dev)
2847 __field(xfs_ino_t, ino)
2848 ),
2849 TP_fast_assign(
2850 __entry->dev = ip->i_mount->m_super->s_dev;
2851 __entry->ino = ip->i_ino;
2852 ),
2853 TP_printk("dev %d:%d ip 0x%llx",
2854 MAJOR(__entry->dev), MINOR(__entry->dev),
2855 __entry->ino)
2856);
2857
2858#define DEFINE_XREP_SYMLINK_EVENT(name) \
2859DEFINE_EVENT(xrep_symlink_class, name, \
2860 TP_PROTO(struct xfs_inode *ip), \
2861 TP_ARGS(ip))
2862DEFINE_XREP_SYMLINK_EVENT(xrep_symlink_rebuild);
2863DEFINE_XREP_SYMLINK_EVENT(xrep_symlink_reset_fork);
2864
ab97f4b1
DW
2865TRACE_EVENT(xrep_iunlink_visit,
2866 TP_PROTO(struct xfs_perag *pag, unsigned int bucket,
2867 xfs_agino_t bucket_agino, struct xfs_inode *ip),
2868 TP_ARGS(pag, bucket, bucket_agino, ip),
2869 TP_STRUCT__entry(
2870 __field(dev_t, dev)
2871 __field(xfs_agnumber_t, agno)
2872 __field(xfs_agino_t, agino)
2873 __field(unsigned int, bucket)
2874 __field(xfs_agino_t, bucket_agino)
2875 __field(xfs_agino_t, prev_agino)
2876 __field(xfs_agino_t, next_agino)
2877 ),
2878 TP_fast_assign(
2879 __entry->dev = pag->pag_mount->m_super->s_dev;
2880 __entry->agno = pag->pag_agno;
2881 __entry->agino = XFS_INO_TO_AGINO(pag->pag_mount, ip->i_ino);
2882 __entry->bucket = bucket;
2883 __entry->bucket_agino = bucket_agino;
2884 __entry->prev_agino = ip->i_prev_unlinked;
2885 __entry->next_agino = ip->i_next_unlinked;
2886 ),
2887 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",
2888 MAJOR(__entry->dev), MINOR(__entry->dev),
2889 __entry->agno,
2890 __entry->bucket,
2891 __entry->agino,
2892 __entry->bucket_agino,
2893 __entry->prev_agino,
2894 __entry->next_agino)
2895);
2896
2897TRACE_EVENT(xrep_iunlink_reload_next,
2898 TP_PROTO(struct xfs_inode *ip, xfs_agino_t prev_agino),
2899 TP_ARGS(ip, prev_agino),
2900 TP_STRUCT__entry(
2901 __field(dev_t, dev)
2902 __field(xfs_agnumber_t, agno)
2903 __field(xfs_agino_t, agino)
2904 __field(xfs_agino_t, old_prev_agino)
2905 __field(xfs_agino_t, prev_agino)
2906 __field(xfs_agino_t, next_agino)
2907 __field(unsigned int, nlink)
2908 ),
2909 TP_fast_assign(
2910 __entry->dev = ip->i_mount->m_super->s_dev;
2911 __entry->agno = XFS_INO_TO_AGNO(ip->i_mount, ip->i_ino);
2912 __entry->agino = XFS_INO_TO_AGINO(ip->i_mount, ip->i_ino);
2913 __entry->old_prev_agino = ip->i_prev_unlinked;
2914 __entry->prev_agino = prev_agino;
2915 __entry->next_agino = ip->i_next_unlinked;
2916 __entry->nlink = VFS_I(ip)->i_nlink;
2917 ),
2918 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",
2919 MAJOR(__entry->dev), MINOR(__entry->dev),
2920 __entry->agno,
2921 __entry->agino % XFS_AGI_UNLINKED_BUCKETS,
2922 __entry->agino,
2923 __entry->nlink,
2924 __entry->old_prev_agino,
2925 __entry->prev_agino,
2926 __entry->next_agino)
2927);
2928
2929TRACE_EVENT(xrep_iunlink_reload_ondisk,
2930 TP_PROTO(struct xfs_inode *ip),
2931 TP_ARGS(ip),
2932 TP_STRUCT__entry(
2933 __field(dev_t, dev)
2934 __field(xfs_agnumber_t, agno)
2935 __field(xfs_agino_t, agino)
2936 __field(unsigned int, nlink)
2937 __field(xfs_agino_t, next_agino)
2938 ),
2939 TP_fast_assign(
2940 __entry->dev = ip->i_mount->m_super->s_dev;
2941 __entry->agno = XFS_INO_TO_AGNO(ip->i_mount, ip->i_ino);
2942 __entry->agino = XFS_INO_TO_AGINO(ip->i_mount, ip->i_ino);
2943 __entry->nlink = VFS_I(ip)->i_nlink;
2944 __entry->next_agino = ip->i_next_unlinked;
2945 ),
2946 TP_printk("dev %d:%d agno 0x%x bucket %u agino 0x%x nlink %u next_agino 0x%x",
2947 MAJOR(__entry->dev), MINOR(__entry->dev),
2948 __entry->agno,
2949 __entry->agino % XFS_AGI_UNLINKED_BUCKETS,
2950 __entry->agino,
2951 __entry->nlink,
2952 __entry->next_agino)
2953);
2954
2955TRACE_EVENT(xrep_iunlink_walk_ondisk_bucket,
2956 TP_PROTO(struct xfs_perag *pag, unsigned int bucket,
2957 xfs_agino_t prev_agino, xfs_agino_t next_agino),
2958 TP_ARGS(pag, bucket, prev_agino, next_agino),
2959 TP_STRUCT__entry(
2960 __field(dev_t, dev)
2961 __field(xfs_agnumber_t, agno)
2962 __field(unsigned int, bucket)
2963 __field(xfs_agino_t, prev_agino)
2964 __field(xfs_agino_t, next_agino)
2965 ),
2966 TP_fast_assign(
2967 __entry->dev = pag->pag_mount->m_super->s_dev;
2968 __entry->agno = pag->pag_agno;
2969 __entry->bucket = bucket;
2970 __entry->prev_agino = prev_agino;
2971 __entry->next_agino = next_agino;
2972 ),
2973 TP_printk("dev %d:%d agno 0x%x bucket %u prev_agino 0x%x next_agino 0x%x",
2974 MAJOR(__entry->dev), MINOR(__entry->dev),
2975 __entry->agno,
2976 __entry->bucket,
2977 __entry->prev_agino,
2978 __entry->next_agino)
2979);
2980
2981DECLARE_EVENT_CLASS(xrep_iunlink_resolve_class,
2982 TP_PROTO(struct xfs_perag *pag, unsigned int bucket,
2983 xfs_agino_t prev_agino, xfs_agino_t next_agino),
2984 TP_ARGS(pag, bucket, prev_agino, next_agino),
2985 TP_STRUCT__entry(
2986 __field(dev_t, dev)
2987 __field(xfs_agnumber_t, agno)
2988 __field(unsigned int, bucket)
2989 __field(xfs_agino_t, prev_agino)
2990 __field(xfs_agino_t, next_agino)
2991 ),
2992 TP_fast_assign(
2993 __entry->dev = pag->pag_mount->m_super->s_dev;
2994 __entry->agno = pag->pag_agno;
2995 __entry->bucket = bucket;
2996 __entry->prev_agino = prev_agino;
2997 __entry->next_agino = next_agino;
2998 ),
2999 TP_printk("dev %d:%d agno 0x%x bucket %u prev_agino 0x%x next_agino 0x%x",
3000 MAJOR(__entry->dev), MINOR(__entry->dev),
3001 __entry->agno,
3002 __entry->bucket,
3003 __entry->prev_agino,
3004 __entry->next_agino)
3005);
3006#define DEFINE_REPAIR_IUNLINK_RESOLVE_EVENT(name) \
3007DEFINE_EVENT(xrep_iunlink_resolve_class, name, \
3008 TP_PROTO(struct xfs_perag *pag, unsigned int bucket, \
3009 xfs_agino_t prev_agino, xfs_agino_t next_agino), \
3010 TP_ARGS(pag, bucket, prev_agino, next_agino))
3011DEFINE_REPAIR_IUNLINK_RESOLVE_EVENT(xrep_iunlink_resolve_uncached);
3012DEFINE_REPAIR_IUNLINK_RESOLVE_EVENT(xrep_iunlink_resolve_wronglist);
3013DEFINE_REPAIR_IUNLINK_RESOLVE_EVENT(xrep_iunlink_resolve_nolist);
3014DEFINE_REPAIR_IUNLINK_RESOLVE_EVENT(xrep_iunlink_resolve_ok);
3015
3016TRACE_EVENT(xrep_iunlink_relink_next,
3017 TP_PROTO(struct xfs_inode *ip, xfs_agino_t next_agino),
3018 TP_ARGS(ip, next_agino),
3019 TP_STRUCT__entry(
3020 __field(dev_t, dev)
3021 __field(xfs_agnumber_t, agno)
3022 __field(xfs_agino_t, agino)
3023 __field(xfs_agino_t, next_agino)
3024 __field(xfs_agino_t, new_next_agino)
3025 ),
3026 TP_fast_assign(
3027 __entry->dev = ip->i_mount->m_super->s_dev;
3028 __entry->agno = XFS_INO_TO_AGNO(ip->i_mount, ip->i_ino);
3029 __entry->agino = XFS_INO_TO_AGINO(ip->i_mount, ip->i_ino);
3030 __entry->next_agino = ip->i_next_unlinked;
3031 __entry->new_next_agino = next_agino;
3032 ),
3033 TP_printk("dev %d:%d agno 0x%x bucket %u agino 0x%x next_agino 0x%x -> 0x%x",
3034 MAJOR(__entry->dev), MINOR(__entry->dev),
3035 __entry->agno,
3036 __entry->agino % XFS_AGI_UNLINKED_BUCKETS,
3037 __entry->agino,
3038 __entry->next_agino,
3039 __entry->new_next_agino)
3040);
3041
3042TRACE_EVENT(xrep_iunlink_relink_prev,
3043 TP_PROTO(struct xfs_inode *ip, xfs_agino_t prev_agino),
3044 TP_ARGS(ip, prev_agino),
3045 TP_STRUCT__entry(
3046 __field(dev_t, dev)
3047 __field(xfs_agnumber_t, agno)
3048 __field(xfs_agino_t, agino)
3049 __field(xfs_agino_t, prev_agino)
3050 __field(xfs_agino_t, new_prev_agino)
3051 ),
3052 TP_fast_assign(
3053 __entry->dev = ip->i_mount->m_super->s_dev;
3054 __entry->agno = XFS_INO_TO_AGNO(ip->i_mount, ip->i_ino);
3055 __entry->agino = XFS_INO_TO_AGINO(ip->i_mount, ip->i_ino);
3056 __entry->prev_agino = ip->i_prev_unlinked;
3057 __entry->new_prev_agino = prev_agino;
3058 ),
3059 TP_printk("dev %d:%d agno 0x%x bucket %u agino 0x%x prev_agino 0x%x -> 0x%x",
3060 MAJOR(__entry->dev), MINOR(__entry->dev),
3061 __entry->agno,
3062 __entry->agino % XFS_AGI_UNLINKED_BUCKETS,
3063 __entry->agino,
3064 __entry->prev_agino,
3065 __entry->new_prev_agino)
3066);
3067
3068TRACE_EVENT(xrep_iunlink_add_to_bucket,
3069 TP_PROTO(struct xfs_perag *pag, unsigned int bucket,
3070 xfs_agino_t agino, xfs_agino_t curr_head),
3071 TP_ARGS(pag, bucket, agino, curr_head),
3072 TP_STRUCT__entry(
3073 __field(dev_t, dev)
3074 __field(xfs_agnumber_t, agno)
3075 __field(unsigned int, bucket)
3076 __field(xfs_agino_t, agino)
3077 __field(xfs_agino_t, next_agino)
3078 ),
3079 TP_fast_assign(
3080 __entry->dev = pag->pag_mount->m_super->s_dev;
3081 __entry->agno = pag->pag_agno;
3082 __entry->bucket = bucket;
3083 __entry->agino = agino;
3084 __entry->next_agino = curr_head;
3085 ),
3086 TP_printk("dev %d:%d agno 0x%x bucket %u agino 0x%x next_agino 0x%x",
3087 MAJOR(__entry->dev), MINOR(__entry->dev),
3088 __entry->agno,
3089 __entry->bucket,
3090 __entry->agino,
3091 __entry->next_agino)
3092);
3093
3094TRACE_EVENT(xrep_iunlink_commit_bucket,
3095 TP_PROTO(struct xfs_perag *pag, unsigned int bucket,
3096 xfs_agino_t old_agino, xfs_agino_t agino),
3097 TP_ARGS(pag, bucket, old_agino, agino),
3098 TP_STRUCT__entry(
3099 __field(dev_t, dev)
3100 __field(xfs_agnumber_t, agno)
3101 __field(unsigned int, bucket)
3102 __field(xfs_agino_t, old_agino)
3103 __field(xfs_agino_t, agino)
3104 ),
3105 TP_fast_assign(
3106 __entry->dev = pag->pag_mount->m_super->s_dev;
3107 __entry->agno = pag->pag_agno;
3108 __entry->bucket = bucket;
3109 __entry->old_agino = old_agino;
3110 __entry->agino = agino;
3111 ),
3112 TP_printk("dev %d:%d agno 0x%x bucket %u agino 0x%x -> 0x%x",
3113 MAJOR(__entry->dev), MINOR(__entry->dev),
3114 __entry->agno,
3115 __entry->bucket,
3116 __entry->old_agino,
3117 __entry->agino)
3118);
3119
718fa74b
DW
3120#endif /* IS_ENABLED(CONFIG_XFS_ONLINE_REPAIR) */
3121
36fd6e86
DW
3122#endif /* _TRACE_XFS_SCRUB_TRACE_H */
3123
3124#undef TRACE_INCLUDE_PATH
3125#define TRACE_INCLUDE_PATH .
3126#define TRACE_INCLUDE_FILE scrub/trace
3127#include <trace/define_trace.h>