Commit | Line | Data |
---|---|---|
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 | 20 | struct xfs_scrub; |
3934e8eb DW |
21 | struct xfile; |
22 | struct xfarray; | |
232ea052 | 23 | struct xfarray_sortinfo; |
21d75009 | 24 | struct xchk_dqiter; |
8660c7b7 | 25 | struct xchk_iscan; |
f1184081 | 26 | struct xchk_nlink; |
4ed080cd | 27 | struct xchk_fscounters; |
7e1b84b2 | 28 | struct xfs_rmap_update_params; |
77ede5f4 | 29 | struct 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 |
37 | TRACE_DEFINE_ENUM(XFS_REFC_DOMAIN_SHARED); |
38 | TRACE_DEFINE_ENUM(XFS_REFC_DOMAIN_COW); | |
39 | ||
86d163db DW |
40 | TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_PROBE); |
41 | TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_SB); | |
42 | TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_AGF); | |
43 | TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_AGFL); | |
44 | TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_AGI); | |
45 | TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_BNOBT); | |
46 | TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_CNTBT); | |
47 | TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_INOBT); | |
48 | TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_FINOBT); | |
49 | TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_RMAPBT); | |
50 | TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_REFCNTBT); | |
51 | TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_INODE); | |
52 | TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_BMBTD); | |
53 | TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_BMBTA); | |
54 | TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_BMBTC); | |
55 | TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_DIR); | |
56 | TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_XATTR); | |
57 | TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_SYMLINK); | |
58 | TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_PARENT); | |
59 | TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_RTBITMAP); | |
60 | TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_RTSUM); | |
61 | TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_UQUOTA); | |
62 | TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_GQUOTA); | |
63 | TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_PQUOTA); | |
75efa57d | 64 | TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_FSCOUNTERS); |
48dd9117 | 65 | TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_QUOTACHECK); |
f1184081 | 66 | TRACE_DEFINE_ENUM(XFS_SCRUB_TYPE_NLINKS); |
a1f3e0cc | 67 | TRACE_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 |
122 | TRACE_DEFINE_ENUM(XFS_RMAP_MAP); |
123 | TRACE_DEFINE_ENUM(XFS_RMAP_MAP_SHARED); | |
124 | TRACE_DEFINE_ENUM(XFS_RMAP_UNMAP); | |
125 | TRACE_DEFINE_ENUM(XFS_RMAP_UNMAP_SHARED); | |
126 | TRACE_DEFINE_ENUM(XFS_RMAP_CONVERT); | |
127 | TRACE_DEFINE_ENUM(XFS_RMAP_CONVERT_SHARED); | |
128 | TRACE_DEFINE_ENUM(XFS_RMAP_ALLOC); | |
129 | TRACE_DEFINE_ENUM(XFS_RMAP_FREE); | |
130 | ||
c517b3aa | 131 | DECLARE_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 | 166 | DEFINE_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 |
171 | DEFINE_SCRUB_EVENT(xchk_start); |
172 | DEFINE_SCRUB_EVENT(xchk_done); | |
173 | DEFINE_SCRUB_EVENT(xchk_deadlock_retry); | |
b5e2196e DW |
174 | DEFINE_SCRUB_EVENT(xrep_attempt); |
175 | DEFINE_SCRUB_EVENT(xrep_done); | |
4700d229 | 176 | |
466c525d DW |
177 | DECLARE_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) \ | |
197 | DEFINE_EVENT(xchk_fsgate_class, name, \ | |
198 | TP_PROTO(struct xfs_scrub *sc, unsigned int fsgates_flags), \ | |
199 | TP_ARGS(sc, fsgates_flags)) | |
200 | ||
201 | DEFINE_SCRUB_FSHOOK_EVENT(xchk_fsgates_enable); | |
202 | DEFINE_SCRUB_FSHOOK_EVENT(xchk_fsgates_disable); | |
203 | ||
c517b3aa | 204 | TRACE_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 | 233 | TRACE_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 | 265 | DECLARE_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 | 291 | DEFINE_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 | 296 | DEFINE_SCRUB_BLOCK_ERROR_EVENT(xchk_fs_error); |
c517b3aa DW |
297 | DEFINE_SCRUB_BLOCK_ERROR_EVENT(xchk_block_error); |
298 | DEFINE_SCRUB_BLOCK_ERROR_EVENT(xchk_block_preen); | |
4700d229 | 299 | |
c517b3aa | 300 | DECLARE_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 | 323 | DEFINE_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 |
328 | DEFINE_SCRUB_INO_ERROR_EVENT(xchk_ino_error); |
329 | DEFINE_SCRUB_INO_ERROR_EVENT(xchk_ino_preen); | |
330 | DEFINE_SCRUB_INO_ERROR_EVENT(xchk_ino_warning); | |
4700d229 | 331 | |
c517b3aa | 332 | DECLARE_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 | 362 | DEFINE_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 |
367 | DEFINE_SCRUB_FBLOCK_ERROR_EVENT(xchk_fblock_error); |
368 | DEFINE_SCRUB_FBLOCK_ERROR_EVENT(xchk_fblock_warning); | |
0ee230de | 369 | DEFINE_SCRUB_FBLOCK_ERROR_EVENT(xchk_fblock_preen); |
4700d229 | 370 | |
21d75009 DW |
371 | #ifdef CONFIG_XFS_QUOTA |
372 | DECLARE_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) \ | |
410 | DEFINE_EVENT(xchk_dqiter_class, name, \ | |
411 | TP_PROTO(struct xchk_dqiter *cursor, uint64_t id), \ | |
412 | TP_ARGS(cursor, id)) | |
413 | DEFINE_SCRUB_DQITER_EVENT(xchk_dquot_iter_revalidate_bmap); | |
414 | DEFINE_SCRUB_DQITER_EVENT(xchk_dquot_iter_advance_bmap); | |
415 | DEFINE_SCRUB_DQITER_EVENT(xchk_dquot_iter_advance_incore); | |
416 | DEFINE_SCRUB_DQITER_EVENT(xchk_dquot_iter); | |
48dd9117 DW |
417 | |
418 | TRACE_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 | 442 | TRACE_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 | 461 | TRACE_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 | 501 | TRACE_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 | 546 | TRACE_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 | 582 | TRACE_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 | 624 | DECLARE_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 | 661 | DEFINE_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 |
666 | DEFINE_SCRUB_SBTREE_EVENT(xchk_btree_rec); |
667 | DEFINE_SCRUB_SBTREE_EVENT(xchk_btree_key); | |
37f3fa7f | 668 | |
c517b3aa | 669 | TRACE_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 |
691 | TRACE_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 |
736 | TRACE_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 |
758 | TRACE_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 | ||
793 | TRACE_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 |
816 | DECLARE_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) \ | |
835 | DEFINE_EVENT(xchk_fsfreeze_class, name, \ | |
836 | TP_PROTO(struct xfs_scrub *sc, int error), \ | |
837 | TP_ARGS(sc, error)) | |
838 | DEFINE_XCHK_FSFREEZE_EVENT(xchk_fsfreeze); | |
839 | DEFINE_XCHK_FSFREEZE_EVENT(xchk_fsthaw); | |
840 | ||
90148903 DW |
841 | TRACE_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 |
873 | TRACE_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 | ||
897 | TRACE_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 | ||
918 | DECLARE_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) \ | |
945 | DEFINE_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 |
948 | DEFINE_XFILE_EVENT(xfile_load); |
949 | DEFINE_XFILE_EVENT(xfile_store); | |
3934e8eb | 950 | DEFINE_XFILE_EVENT(xfile_seek_data); |
6907e3c0 DW |
951 | DEFINE_XFILE_EVENT(xfile_get_folio); |
952 | DEFINE_XFILE_EVENT(xfile_put_folio); | |
98339edf | 953 | DEFINE_XFILE_EVENT(xfile_discard); |
3934e8eb DW |
954 | |
955 | TRACE_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 |
980 | TRACE_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 | 1000 | TRACE_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 | ||
1020 | TRACE_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 | ||
1046 | TRACE_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 |
1071 | TRACE_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 |
1112 | TRACE_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 |
1158 | TRACE_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 |
1192 | DECLARE_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) \ | |
1211 | DEFINE_EVENT(xchk_iscan_class, name, \ | |
1212 | TP_PROTO(struct xchk_iscan *iscan), \ | |
1213 | TP_ARGS(iscan)) | |
1214 | DEFINE_ISCAN_EVENT(xchk_iscan_move_cursor); | |
1215 | DEFINE_ISCAN_EVENT(xchk_iscan_visit); | |
82334a79 | 1216 | DEFINE_ISCAN_EVENT(xchk_iscan_skip); |
8660c7b7 | 1217 | DEFINE_ISCAN_EVENT(xchk_iscan_advance_ag); |
8660c7b7 DW |
1218 | |
1219 | DECLARE_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) \ | |
1244 | DEFINE_EVENT(xchk_iscan_ino_class, name, \ | |
1245 | TP_PROTO(struct xchk_iscan *iscan, xfs_ino_t ino), \ | |
1246 | TP_ARGS(iscan, ino)) | |
1247 | DEFINE_ISCAN_INO_EVENT(xchk_iscan_want_live_update); | |
c473a332 | 1248 | DEFINE_ISCAN_INO_EVENT(xchk_iscan_start); |
8660c7b7 DW |
1249 | |
1250 | TRACE_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 |
1272 | TRACE_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 | 1307 | DECLARE_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) \ | |
1335 | DEFINE_EVENT(xchk_iscan_retry_wait_class, name, \ | |
1336 | TP_PROTO(struct xchk_iscan *iscan), \ | |
1337 | TP_ARGS(iscan)) | |
1338 | DEFINE_ISCAN_RETRY_WAIT_EVENT(xchk_iscan_iget_retry_wait); | |
1339 | DEFINE_ISCAN_RETRY_WAIT_EVENT(xchk_iscan_agi_retry_wait); | |
8660c7b7 | 1340 | |
f1184081 DW |
1341 | TRACE_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 |
1367 | TRACE_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 |
1394 | TRACE_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 |
1410 | TRACE_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 |
1442 | TRACE_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 | ||
1468 | TRACE_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 | ||
1504 | DECLARE_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) \ | |
1536 | DEFINE_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)) | |
1540 | DEFINE_SCRUB_NLINKS_DIFF_EVENT(xchk_nlinks_compare_inode); | |
1541 | ||
b961c8bf DW |
1542 | DECLARE_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) \ | |
1568 | DEFINE_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)) | |
1572 | DEFINE_XCHK_PPTR_EVENT(xchk_dir_defer); | |
1573 | DEFINE_XCHK_PPTR_EVENT(xchk_dir_slowpath); | |
1574 | DEFINE_XCHK_PPTR_EVENT(xchk_dir_ultraslowpath); | |
8ad34530 DW |
1575 | DEFINE_XCHK_PPTR_EVENT(xchk_parent_defer); |
1576 | DEFINE_XCHK_PPTR_EVENT(xchk_parent_slowpath); | |
1577 | DEFINE_XCHK_PPTR_EVENT(xchk_parent_ultraslowpath); | |
b961c8bf | 1578 | |
718fa74b DW |
1579 | /* repair tracepoints */ |
1580 | #if IS_ENABLED(CONFIG_XFS_ONLINE_REPAIR) | |
1581 | ||
b5e2196e | 1582 | DECLARE_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 | 1604 | DEFINE_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 |
1607 | DEFINE_REPAIR_EXTENT_EVENT(xreap_dispose_unmap_extent); |
1608 | DEFINE_REPAIR_EXTENT_EVENT(xreap_dispose_free_extent); | |
1609 | DEFINE_REPAIR_EXTENT_EVENT(xreap_agextent_binval); | |
5befb047 | 1610 | DEFINE_REPAIR_EXTENT_EVENT(xreap_bmapi_binval); |
b5e2196e | 1611 | DEFINE_REPAIR_EXTENT_EVENT(xrep_agfl_insert); |
718fa74b | 1612 | |
1c7ce115 DW |
1613 | DECLARE_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) \ | |
1639 | DEFINE_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)) | |
1643 | DEFINE_REPAIR_REAP_FIND_EVENT(xreap_agextent_select); | |
5befb047 | 1644 | DEFINE_REPAIR_REAP_FIND_EVENT(xreap_bmapi_select); |
1c7ce115 | 1645 | |
b5e2196e | 1646 | DECLARE_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 | 1679 | DEFINE_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 | 1684 | DEFINE_REPAIR_RMAP_EVENT(xrep_ibt_walk_rmap); |
8f71bede | 1685 | DEFINE_REPAIR_RMAP_EVENT(xrep_bmap_walk_rmap); |
718fa74b | 1686 | |
4bdfd7d1 DW |
1687 | TRACE_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 |
1710 | TRACE_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 |
1742 | TRACE_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 |
1770 | TRACE_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 |
1802 | TRACE_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 | 1834 | TRACE_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 | 1859 | TRACE_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 | 1888 | TRACE_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 | 1917 | TRACE_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 |
1942 | DECLARE_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) \ | |
1969 | DEFINE_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)) | |
1974 | DEFINE_NEWBT_EXTENT_EVENT(xrep_newbt_alloc_ag_blocks); | |
1975 | DEFINE_NEWBT_EXTENT_EVENT(xrep_newbt_alloc_file_blocks); | |
1976 | DEFINE_NEWBT_EXTENT_EVENT(xrep_newbt_free_blocks); | |
1977 | DEFINE_NEWBT_EXTENT_EVENT(xrep_newbt_claim_block); | |
1978 | ||
2d295fe6 DW |
1979 | DECLARE_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) \ | |
2044 | DEFINE_EVENT(xrep_dinode_class, name, \ | |
2045 | TP_PROTO(struct xfs_scrub *sc, struct xfs_dinode *dip), \ | |
2046 | TP_ARGS(sc, dip)) | |
2047 | DEFINE_REPAIR_DINODE_EVENT(xrep_dinode_header); | |
2048 | DEFINE_REPAIR_DINODE_EVENT(xrep_dinode_mode); | |
2049 | DEFINE_REPAIR_DINODE_EVENT(xrep_dinode_flags); | |
2050 | DEFINE_REPAIR_DINODE_EVENT(xrep_dinode_size); | |
2051 | DEFINE_REPAIR_DINODE_EVENT(xrep_dinode_extsize_hints); | |
2052 | DEFINE_REPAIR_DINODE_EVENT(xrep_dinode_zap_symlink); | |
2053 | DEFINE_REPAIR_DINODE_EVENT(xrep_dinode_zap_dir); | |
2054 | DEFINE_REPAIR_DINODE_EVENT(xrep_dinode_fixed); | |
e744cef2 DW |
2055 | DEFINE_REPAIR_DINODE_EVENT(xrep_dinode_zap_forks); |
2056 | DEFINE_REPAIR_DINODE_EVENT(xrep_dinode_zap_dfork); | |
2057 | DEFINE_REPAIR_DINODE_EVENT(xrep_dinode_zap_afork); | |
2058 | DEFINE_REPAIR_DINODE_EVENT(xrep_dinode_ensure_forkoff); | |
2d295fe6 DW |
2059 | |
2060 | DECLARE_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) \ | |
2101 | DEFINE_EVENT(xrep_inode_class, name, \ | |
2102 | TP_PROTO(struct xfs_scrub *sc), \ | |
2103 | TP_ARGS(sc)) | |
2104 | DEFINE_REPAIR_INODE_EVENT(xrep_inode_blockcounts); | |
2105 | DEFINE_REPAIR_INODE_EVENT(xrep_inode_ids); | |
2106 | DEFINE_REPAIR_INODE_EVENT(xrep_inode_flags); | |
2107 | DEFINE_REPAIR_INODE_EVENT(xrep_inode_blockdir_size); | |
2108 | DEFINE_REPAIR_INODE_EVENT(xrep_inode_sfdir_size); | |
2109 | DEFINE_REPAIR_INODE_EVENT(xrep_inode_dir_size); | |
2110 | DEFINE_REPAIR_INODE_EVENT(xrep_inode_fixed); | |
2111 | ||
e744cef2 DW |
2112 | TRACE_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 |
2150 | TRACE_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 | ||
2173 | TRACE_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 |
2199 | TRACE_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 | ||
2225 | TRACE_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 | ||
2260 | TRACE_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 |
2284 | DECLARE_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) \ | |
2304 | DEFINE_EVENT(xrep_dquot_class, name, \ | |
2305 | TP_PROTO(struct xfs_mount *mp, uint8_t type, uint32_t id), \ | |
2306 | TP_ARGS(mp, type, id)) | |
2307 | DEFINE_XREP_DQUOT_EVENT(xrep_dquot_item); | |
2308 | DEFINE_XREP_DQUOT_EVENT(xrep_disk_dquot); | |
2309 | DEFINE_XREP_DQUOT_EVENT(xrep_dquot_item_fill_bmap_hole); | |
96ed2ae4 | 2310 | DEFINE_XREP_DQUOT_EVENT(xrep_quotacheck_dquot); |
a5b91555 DW |
2311 | #endif /* CONFIG_XFS_QUOTA */ |
2312 | ||
6b631c60 DW |
2313 | DEFINE_SCRUB_NLINKS_DIFF_EVENT(xrep_nlinks_update_inode); |
2314 | DEFINE_SCRUB_NLINKS_DIFF_EVENT(xrep_nlinks_unfixable_inode); | |
2315 | ||
7e1b84b2 DW |
2316 | TRACE_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 |
2352 | TRACE_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 |
2385 | DECLARE_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) \ | |
2417 | DEFINE_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)) | |
2421 | DEFINE_XREP_TEMPFILE_EVENT(xrep_tempfile_prealloc); | |
2422 | DEFINE_XREP_TEMPFILE_EVENT(xrep_tempfile_copyin); | |
2423 | ||
5befb047 DW |
2424 | TRACE_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 | ||
2459 | TRACE_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 |
2485 | TRACE_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 | ||
2507 | DECLARE_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) \ | |
2536 | DEFINE_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)) | |
2540 | DEFINE_XREP_XATTR_SALVAGE_EVENT(xrep_xattr_salvage_rec); | |
2541 | DEFINE_XREP_XATTR_SALVAGE_EVENT(xrep_xattr_insert_rec); | |
2542 | ||
086e934f DW |
2543 | DECLARE_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) \ | |
2574 | DEFINE_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)) | |
2578 | DEFINE_XREP_PPTR_SALVAGE_EVENT(xrep_xattr_salvage_pptr); | |
2579 | DEFINE_XREP_PPTR_SALVAGE_EVENT(xrep_xattr_insert_pptr); | |
2580 | ||
e47dcf11 DW |
2581 | TRACE_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) \ | |
2600 | DEFINE_EVENT(xrep_xattr_class, name, \ | |
2601 | TP_PROTO(struct xfs_inode *ip, struct xfs_inode *arg_ip), \ | |
2602 | TP_ARGS(ip, arg_ip)) | |
2603 | DEFINE_XREP_XATTR_EVENT(xrep_xattr_rebuild_tree); | |
2604 | DEFINE_XREP_XATTR_EVENT(xrep_xattr_reset_fork); | |
2605 | ||
b1991ee3 DW |
2606 | TRACE_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 | ||
2632 | DECLARE_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) \ | |
2651 | DEFINE_EVENT(xrep_dir_class, name, \ | |
2652 | TP_PROTO(struct xfs_inode *dp, xfs_ino_t parent_ino), \ | |
2653 | TP_ARGS(dp, parent_ino)) | |
2654 | DEFINE_XREP_DIR_EVENT(xrep_dir_rebuild_tree); | |
2655 | DEFINE_XREP_DIR_EVENT(xrep_dir_reset_fork); | |
cc22edab | 2656 | DEFINE_XREP_DIR_EVENT(xrep_parent_reset_dotdot); |
b1991ee3 DW |
2657 | |
2658 | DECLARE_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) \ | |
2687 | DEFINE_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)) | |
2691 | DEFINE_XREP_DIRENT_EVENT(xrep_dir_salvage_entry); | |
2692 | DEFINE_XREP_DIRENT_EVENT(xrep_dir_stash_createname); | |
2693 | DEFINE_XREP_DIRENT_EVENT(xrep_dir_replay_createname); | |
1e58a8cc | 2694 | DEFINE_XREP_DIRENT_EVENT(xrep_adoption_reparent); |
8559b21a DW |
2695 | DEFINE_XREP_DIRENT_EVENT(xrep_dir_stash_removename); |
2696 | DEFINE_XREP_DIRENT_EVENT(xrep_dir_replay_removename); | |
1e58a8cc DW |
2697 | |
2698 | DECLARE_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) \ | |
2720 | DEFINE_EVENT(xrep_adoption_class, name, \ | |
2721 | TP_PROTO(struct xfs_inode *dp, struct xfs_inode *ip, bool moved), \ | |
2722 | TP_ARGS(dp, ip, moved)) | |
2723 | DEFINE_XREP_ADOPTION_EVENT(xrep_adoption_trans_roll); | |
b1991ee3 DW |
2724 | |
2725 | DECLARE_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) \ | |
2744 | DEFINE_EVENT(xrep_parent_salvage_class, name, \ | |
2745 | TP_PROTO(struct xfs_inode *dp, xfs_ino_t ino), \ | |
2746 | TP_ARGS(dp, ino)) | |
2747 | DEFINE_XREP_PARENT_SALVAGE_EVENT(xrep_dir_salvaged_parent); | |
a07b4557 | 2748 | DEFINE_XREP_PARENT_SALVAGE_EVENT(xrep_findparent_dirent); |
34c9382c | 2749 | DEFINE_XREP_PARENT_SALVAGE_EVENT(xrep_findparent_from_dcache); |
b1991ee3 | 2750 | |
e6c9e75f DW |
2751 | TRACE_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 |
2777 | DECLARE_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) \ | |
2811 | DEFINE_EVENT(xrep_dentry_class, name, \ | |
2812 | TP_PROTO(struct xfs_mount *mp, const struct dentry *dentry), \ | |
2813 | TP_ARGS(mp, dentry)) | |
2814 | DEFINE_REPAIR_DENTRY_EVENT(xrep_adoption_check_child); | |
2815 | DEFINE_REPAIR_DENTRY_EVENT(xrep_adoption_check_alias); | |
2816 | DEFINE_REPAIR_DENTRY_EVENT(xrep_adoption_check_dentry); | |
2817 | DEFINE_REPAIR_DENTRY_EVENT(xrep_adoption_invalidate_child); | |
2818 | ||
2651923d DW |
2819 | TRACE_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 | ||
2842 | DECLARE_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) \ | |
2859 | DEFINE_EVENT(xrep_symlink_class, name, \ | |
2860 | TP_PROTO(struct xfs_inode *ip), \ | |
2861 | TP_ARGS(ip)) | |
2862 | DEFINE_XREP_SYMLINK_EVENT(xrep_symlink_rebuild); | |
2863 | DEFINE_XREP_SYMLINK_EVENT(xrep_symlink_reset_fork); | |
2864 | ||
ab97f4b1 DW |
2865 | TRACE_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 | ||
2897 | TRACE_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 | ||
2929 | TRACE_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 | ||
2955 | TRACE_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 | ||
2981 | DECLARE_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) \ | |
3007 | DEFINE_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)) | |
3011 | DEFINE_REPAIR_IUNLINK_RESOLVE_EVENT(xrep_iunlink_resolve_uncached); | |
3012 | DEFINE_REPAIR_IUNLINK_RESOLVE_EVENT(xrep_iunlink_resolve_wronglist); | |
3013 | DEFINE_REPAIR_IUNLINK_RESOLVE_EVENT(xrep_iunlink_resolve_nolist); | |
3014 | DEFINE_REPAIR_IUNLINK_RESOLVE_EVENT(xrep_iunlink_resolve_ok); | |
3015 | ||
3016 | TRACE_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 | ||
3042 | TRACE_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 | ||
3068 | TRACE_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 | ||
3094 | TRACE_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> |