Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.5.6.
  1/*
  2 * Copyright (C) 2017 Oracle.  All Rights Reserved.
  3 *
  4 * Author: Darrick J. Wong <darrick.wong@oracle.com>
  5 *
  6 * This program is free software; you can redistribute it and/or
  7 * modify it under the terms of the GNU General Public License
  8 * as published by the Free Software Foundation; either version 2
  9 * of the License, or (at your option) any later version.
 10 *
 11 * This program is distributed in the hope that it would be useful,
 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 14 * GNU General Public License for more details.
 15 *
 16 * You should have received a copy of the GNU General Public License
 17 * along with this program; if not, write the Free Software Foundation,
 18 * Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
 19 */
 20#undef TRACE_SYSTEM
 21#define TRACE_SYSTEM xfs_scrub
 22
 23#if !defined(_TRACE_XFS_SCRUB_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
 24#define _TRACE_XFS_SCRUB_TRACE_H
 25
 26#include <linux/tracepoint.h>
 27#include "xfs_bit.h"
 28
 29DECLARE_EVENT_CLASS(xfs_scrub_class,
 30	TP_PROTO(struct xfs_inode *ip, struct xfs_scrub_metadata *sm,
 31		 int error),
 32	TP_ARGS(ip, sm, error),
 33	TP_STRUCT__entry(
 34		__field(dev_t, dev)
 35		__field(xfs_ino_t, ino)
 36		__field(unsigned int, type)
 37		__field(xfs_agnumber_t, agno)
 38		__field(xfs_ino_t, inum)
 39		__field(unsigned int, gen)
 40		__field(unsigned int, flags)
 41		__field(int, error)
 42	),
 43	TP_fast_assign(
 44		__entry->dev = ip->i_mount->m_super->s_dev;
 45		__entry->ino = ip->i_ino;
 46		__entry->type = sm->sm_type;
 47		__entry->agno = sm->sm_agno;
 48		__entry->inum = sm->sm_ino;
 49		__entry->gen = sm->sm_gen;
 50		__entry->flags = sm->sm_flags;
 51		__entry->error = error;
 52	),
 53	TP_printk("dev %d:%d ino 0x%llx type %u agno %u inum %llu gen %u flags 0x%x error %d",
 54		  MAJOR(__entry->dev), MINOR(__entry->dev),
 55		  __entry->ino,
 56		  __entry->type,
 57		  __entry->agno,
 58		  __entry->inum,
 59		  __entry->gen,
 60		  __entry->flags,
 61		  __entry->error)
 62)
 63#define DEFINE_SCRUB_EVENT(name) \
 64DEFINE_EVENT(xfs_scrub_class, name, \
 65	TP_PROTO(struct xfs_inode *ip, struct xfs_scrub_metadata *sm, \
 66		 int error), \
 67	TP_ARGS(ip, sm, error))
 68
 69DEFINE_SCRUB_EVENT(xfs_scrub_start);
 70DEFINE_SCRUB_EVENT(xfs_scrub_done);
 71DEFINE_SCRUB_EVENT(xfs_scrub_deadlock_retry);
 72
 73TRACE_EVENT(xfs_scrub_op_error,
 74	TP_PROTO(struct xfs_scrub_context *sc, xfs_agnumber_t agno,
 75		 xfs_agblock_t bno, int error, void *ret_ip),
 76	TP_ARGS(sc, agno, bno, error, ret_ip),
 77	TP_STRUCT__entry(
 78		__field(dev_t, dev)
 79		__field(unsigned int, type)
 80		__field(xfs_agnumber_t, agno)
 81		__field(xfs_agblock_t, bno)
 82		__field(int, error)
 83		__field(void *, ret_ip)
 84	),
 85	TP_fast_assign(
 86		__entry->dev = sc->mp->m_super->s_dev;
 87		__entry->type = sc->sm->sm_type;
 88		__entry->agno = agno;
 89		__entry->bno = bno;
 90		__entry->error = error;
 91		__entry->ret_ip = ret_ip;
 92	),
 93	TP_printk("dev %d:%d type %u agno %u agbno %u error %d ret_ip %pS",
 94		  MAJOR(__entry->dev), MINOR(__entry->dev),
 95		  __entry->type,
 96		  __entry->agno,
 97		  __entry->bno,
 98		  __entry->error,
 99		  __entry->ret_ip)
100);
101
102TRACE_EVENT(xfs_scrub_file_op_error,
103	TP_PROTO(struct xfs_scrub_context *sc, int whichfork,
104		 xfs_fileoff_t offset, int error, void *ret_ip),
105	TP_ARGS(sc, whichfork, offset, error, ret_ip),
106	TP_STRUCT__entry(
107		__field(dev_t, dev)
108		__field(xfs_ino_t, ino)
109		__field(int, whichfork)
110		__field(unsigned int, type)
111		__field(xfs_fileoff_t, offset)
112		__field(int, error)
113		__field(void *, ret_ip)
114	),
115	TP_fast_assign(
116		__entry->dev = sc->ip->i_mount->m_super->s_dev;
117		__entry->ino = sc->ip->i_ino;
118		__entry->whichfork = whichfork;
119		__entry->type = sc->sm->sm_type;
120		__entry->offset = offset;
121		__entry->error = error;
122		__entry->ret_ip = ret_ip;
123	),
124	TP_printk("dev %d:%d ino 0x%llx fork %d type %u offset %llu error %d ret_ip %pS",
125		  MAJOR(__entry->dev), MINOR(__entry->dev),
126		  __entry->ino,
127		  __entry->whichfork,
128		  __entry->type,
129		  __entry->offset,
130		  __entry->error,
131		  __entry->ret_ip)
132);
133
134DECLARE_EVENT_CLASS(xfs_scrub_block_error_class,
135	TP_PROTO(struct xfs_scrub_context *sc, xfs_daddr_t daddr, void *ret_ip),
136	TP_ARGS(sc, daddr, ret_ip),
137	TP_STRUCT__entry(
138		__field(dev_t, dev)
139		__field(unsigned int, type)
140		__field(xfs_agnumber_t, agno)
141		__field(xfs_agblock_t, bno)
142		__field(void *, ret_ip)
143	),
144	TP_fast_assign(
145		xfs_fsblock_t	fsbno;
146		xfs_agnumber_t	agno;
147		xfs_agblock_t	bno;
148
149		fsbno = XFS_DADDR_TO_FSB(sc->mp, daddr);
150		agno = XFS_FSB_TO_AGNO(sc->mp, fsbno);
151		bno = XFS_FSB_TO_AGBNO(sc->mp, fsbno);
152
153		__entry->dev = sc->mp->m_super->s_dev;
154		__entry->type = sc->sm->sm_type;
155		__entry->agno = agno;
156		__entry->bno = bno;
157		__entry->ret_ip = ret_ip;
158	),
159	TP_printk("dev %d:%d type %u agno %u agbno %u ret_ip %pS",
160		  MAJOR(__entry->dev), MINOR(__entry->dev),
161		  __entry->type,
162		  __entry->agno,
163		  __entry->bno,
164		  __entry->ret_ip)
165)
166
167#define DEFINE_SCRUB_BLOCK_ERROR_EVENT(name) \
168DEFINE_EVENT(xfs_scrub_block_error_class, name, \
169	TP_PROTO(struct xfs_scrub_context *sc, xfs_daddr_t daddr, \
170		 void *ret_ip), \
171	TP_ARGS(sc, daddr, ret_ip))
172
173DEFINE_SCRUB_BLOCK_ERROR_EVENT(xfs_scrub_block_error);
174DEFINE_SCRUB_BLOCK_ERROR_EVENT(xfs_scrub_block_preen);
175
176DECLARE_EVENT_CLASS(xfs_scrub_ino_error_class,
177	TP_PROTO(struct xfs_scrub_context *sc, xfs_ino_t ino, void *ret_ip),
178	TP_ARGS(sc, ino, ret_ip),
179	TP_STRUCT__entry(
180		__field(dev_t, dev)
181		__field(xfs_ino_t, ino)
182		__field(unsigned int, type)
183		__field(void *, ret_ip)
184	),
185	TP_fast_assign(
186		__entry->dev = sc->mp->m_super->s_dev;
187		__entry->ino = ino;
188		__entry->type = sc->sm->sm_type;
189		__entry->ret_ip = ret_ip;
190	),
191	TP_printk("dev %d:%d ino 0x%llx type %u ret_ip %pS",
192		  MAJOR(__entry->dev), MINOR(__entry->dev),
193		  __entry->ino,
194		  __entry->type,
195		  __entry->ret_ip)
196)
197
198#define DEFINE_SCRUB_INO_ERROR_EVENT(name) \
199DEFINE_EVENT(xfs_scrub_ino_error_class, name, \
200	TP_PROTO(struct xfs_scrub_context *sc, xfs_ino_t ino, \
201		 void *ret_ip), \
202	TP_ARGS(sc, ino, ret_ip))
203
204DEFINE_SCRUB_INO_ERROR_EVENT(xfs_scrub_ino_error);
205DEFINE_SCRUB_INO_ERROR_EVENT(xfs_scrub_ino_preen);
206DEFINE_SCRUB_INO_ERROR_EVENT(xfs_scrub_ino_warning);
207
208DECLARE_EVENT_CLASS(xfs_scrub_fblock_error_class,
209	TP_PROTO(struct xfs_scrub_context *sc, int whichfork,
210		 xfs_fileoff_t offset, void *ret_ip),
211	TP_ARGS(sc, whichfork, offset, ret_ip),
212	TP_STRUCT__entry(
213		__field(dev_t, dev)
214		__field(xfs_ino_t, ino)
215		__field(int, whichfork)
216		__field(unsigned int, type)
217		__field(xfs_fileoff_t, offset)
218		__field(void *, ret_ip)
219	),
220	TP_fast_assign(
221		__entry->dev = sc->ip->i_mount->m_super->s_dev;
222		__entry->ino = sc->ip->i_ino;
223		__entry->whichfork = whichfork;
224		__entry->type = sc->sm->sm_type;
225		__entry->offset = offset;
226		__entry->ret_ip = ret_ip;
227	),
228	TP_printk("dev %d:%d ino 0x%llx fork %d type %u offset %llu ret_ip %pS",
229		  MAJOR(__entry->dev), MINOR(__entry->dev),
230		  __entry->ino,
231		  __entry->whichfork,
232		  __entry->type,
233		  __entry->offset,
234		  __entry->ret_ip)
235);
236
237#define DEFINE_SCRUB_FBLOCK_ERROR_EVENT(name) \
238DEFINE_EVENT(xfs_scrub_fblock_error_class, name, \
239	TP_PROTO(struct xfs_scrub_context *sc, int whichfork, \
240		 xfs_fileoff_t offset, void *ret_ip), \
241	TP_ARGS(sc, whichfork, offset, ret_ip))
242
243DEFINE_SCRUB_FBLOCK_ERROR_EVENT(xfs_scrub_fblock_error);
244DEFINE_SCRUB_FBLOCK_ERROR_EVENT(xfs_scrub_fblock_warning);
245
246TRACE_EVENT(xfs_scrub_incomplete,
247	TP_PROTO(struct xfs_scrub_context *sc, void *ret_ip),
248	TP_ARGS(sc, ret_ip),
249	TP_STRUCT__entry(
250		__field(dev_t, dev)
251		__field(unsigned int, type)
252		__field(void *, ret_ip)
253	),
254	TP_fast_assign(
255		__entry->dev = sc->mp->m_super->s_dev;
256		__entry->type = sc->sm->sm_type;
257		__entry->ret_ip = ret_ip;
258	),
259	TP_printk("dev %d:%d type %u ret_ip %pS",
260		  MAJOR(__entry->dev), MINOR(__entry->dev),
261		  __entry->type,
262		  __entry->ret_ip)
263);
264
265TRACE_EVENT(xfs_scrub_btree_op_error,
266	TP_PROTO(struct xfs_scrub_context *sc, struct xfs_btree_cur *cur,
267		 int level, int error, void *ret_ip),
268	TP_ARGS(sc, cur, level, error, ret_ip),
269	TP_STRUCT__entry(
270		__field(dev_t, dev)
271		__field(unsigned int, type)
272		__field(xfs_btnum_t, btnum)
273		__field(int, level)
274		__field(xfs_agnumber_t, agno)
275		__field(xfs_agblock_t, bno)
276		__field(int, ptr);
277		__field(int, error)
278		__field(void *, ret_ip)
279	),
280	TP_fast_assign(
281		xfs_fsblock_t fsbno = xfs_scrub_btree_cur_fsbno(cur, level);
282
283		__entry->dev = sc->mp->m_super->s_dev;
284		__entry->type = sc->sm->sm_type;
285		__entry->btnum = cur->bc_btnum;
286		__entry->level = level;
287		__entry->agno = XFS_FSB_TO_AGNO(cur->bc_mp, fsbno);
288		__entry->bno = XFS_FSB_TO_AGBNO(cur->bc_mp, fsbno);
289		__entry->ptr = cur->bc_ptrs[level];
290		__entry->error = error;
291		__entry->ret_ip = ret_ip;
292	),
293	TP_printk("dev %d:%d type %u btnum %d level %d ptr %d agno %u agbno %u error %d ret_ip %pS",
294		  MAJOR(__entry->dev), MINOR(__entry->dev),
295		  __entry->type,
296		  __entry->btnum,
297		  __entry->level,
298		  __entry->ptr,
299		  __entry->agno,
300		  __entry->bno,
301		  __entry->error,
302		  __entry->ret_ip)
303);
304
305TRACE_EVENT(xfs_scrub_ifork_btree_op_error,
306	TP_PROTO(struct xfs_scrub_context *sc, struct xfs_btree_cur *cur,
307		 int level, int error, void *ret_ip),
308	TP_ARGS(sc, cur, level, error, ret_ip),
309	TP_STRUCT__entry(
310		__field(dev_t, dev)
311		__field(xfs_ino_t, ino)
312		__field(int, whichfork)
313		__field(unsigned int, type)
314		__field(xfs_btnum_t, btnum)
315		__field(int, level)
316		__field(int, ptr)
317		__field(xfs_agnumber_t, agno)
318		__field(xfs_agblock_t, bno)
319		__field(int, error)
320		__field(void *, ret_ip)
321	),
322	TP_fast_assign(
323		xfs_fsblock_t fsbno = xfs_scrub_btree_cur_fsbno(cur, level);
324		__entry->dev = sc->mp->m_super->s_dev;
325		__entry->ino = sc->ip->i_ino;
326		__entry->whichfork = cur->bc_private.b.whichfork;
327		__entry->type = sc->sm->sm_type;
328		__entry->btnum = cur->bc_btnum;
329		__entry->level = level;
330		__entry->ptr = cur->bc_ptrs[level];
331		__entry->agno = XFS_FSB_TO_AGNO(cur->bc_mp, fsbno);
332		__entry->bno = XFS_FSB_TO_AGBNO(cur->bc_mp, fsbno);
333		__entry->error = error;
334		__entry->ret_ip = ret_ip;
335	),
336	TP_printk("dev %d:%d ino 0x%llx fork %d type %u btnum %d level %d ptr %d agno %u agbno %u error %d ret_ip %pS",
337		  MAJOR(__entry->dev), MINOR(__entry->dev),
338		  __entry->ino,
339		  __entry->whichfork,
340		  __entry->type,
341		  __entry->btnum,
342		  __entry->level,
343		  __entry->ptr,
344		  __entry->agno,
345		  __entry->bno,
346		  __entry->error,
347		  __entry->ret_ip)
348);
349
350TRACE_EVENT(xfs_scrub_btree_error,
351	TP_PROTO(struct xfs_scrub_context *sc, struct xfs_btree_cur *cur,
352		 int level, void *ret_ip),
353	TP_ARGS(sc, cur, level, ret_ip),
354	TP_STRUCT__entry(
355		__field(dev_t, dev)
356		__field(unsigned int, type)
357		__field(xfs_btnum_t, btnum)
358		__field(int, level)
359		__field(xfs_agnumber_t, agno)
360		__field(xfs_agblock_t, bno)
361		__field(int, ptr);
362		__field(void *, ret_ip)
363	),
364	TP_fast_assign(
365		xfs_fsblock_t fsbno = xfs_scrub_btree_cur_fsbno(cur, level);
366		__entry->dev = sc->mp->m_super->s_dev;
367		__entry->type = sc->sm->sm_type;
368		__entry->btnum = cur->bc_btnum;
369		__entry->level = level;
370		__entry->agno = XFS_FSB_TO_AGNO(cur->bc_mp, fsbno);
371		__entry->bno = XFS_FSB_TO_AGBNO(cur->bc_mp, fsbno);
372		__entry->ptr = cur->bc_ptrs[level];
373		__entry->ret_ip = ret_ip;
374	),
375	TP_printk("dev %d:%d type %u btnum %d level %d ptr %d agno %u agbno %u ret_ip %pS",
376		  MAJOR(__entry->dev), MINOR(__entry->dev),
377		  __entry->type,
378		  __entry->btnum,
379		  __entry->level,
380		  __entry->ptr,
381		  __entry->agno,
382		  __entry->bno,
383		  __entry->ret_ip)
384);
385
386TRACE_EVENT(xfs_scrub_ifork_btree_error,
387	TP_PROTO(struct xfs_scrub_context *sc, struct xfs_btree_cur *cur,
388		 int level, void *ret_ip),
389	TP_ARGS(sc, cur, level, ret_ip),
390	TP_STRUCT__entry(
391		__field(dev_t, dev)
392		__field(xfs_ino_t, ino)
393		__field(int, whichfork)
394		__field(unsigned int, type)
395		__field(xfs_btnum_t, btnum)
396		__field(int, level)
397		__field(xfs_agnumber_t, agno)
398		__field(xfs_agblock_t, bno)
399		__field(int, ptr);
400		__field(void *, ret_ip)
401	),
402	TP_fast_assign(
403		xfs_fsblock_t fsbno = xfs_scrub_btree_cur_fsbno(cur, level);
404		__entry->dev = sc->mp->m_super->s_dev;
405		__entry->ino = sc->ip->i_ino;
406		__entry->whichfork = cur->bc_private.b.whichfork;
407		__entry->type = sc->sm->sm_type;
408		__entry->btnum = cur->bc_btnum;
409		__entry->level = level;
410		__entry->agno = XFS_FSB_TO_AGNO(cur->bc_mp, fsbno);
411		__entry->bno = XFS_FSB_TO_AGBNO(cur->bc_mp, fsbno);
412		__entry->ptr = cur->bc_ptrs[level];
413		__entry->ret_ip = ret_ip;
414	),
415	TP_printk("dev %d:%d ino 0x%llx fork %d type %u btnum %d level %d ptr %d agno %u agbno %u ret_ip %pS",
416		  MAJOR(__entry->dev), MINOR(__entry->dev),
417		  __entry->ino,
418		  __entry->whichfork,
419		  __entry->type,
420		  __entry->btnum,
421		  __entry->level,
422		  __entry->ptr,
423		  __entry->agno,
424		  __entry->bno,
425		  __entry->ret_ip)
426);
427
428DECLARE_EVENT_CLASS(xfs_scrub_sbtree_class,
429	TP_PROTO(struct xfs_scrub_context *sc, struct xfs_btree_cur *cur,
430		 int level),
431	TP_ARGS(sc, cur, level),
432	TP_STRUCT__entry(
433		__field(dev_t, dev)
434		__field(int, type)
435		__field(xfs_btnum_t, btnum)
436		__field(xfs_agnumber_t, agno)
437		__field(xfs_agblock_t, bno)
438		__field(int, level)
439		__field(int, nlevels)
440		__field(int, ptr)
441	),
442	TP_fast_assign(
443		xfs_fsblock_t fsbno = xfs_scrub_btree_cur_fsbno(cur, level);
444
445		__entry->dev = sc->mp->m_super->s_dev;
446		__entry->type = sc->sm->sm_type;
447		__entry->btnum = cur->bc_btnum;
448		__entry->agno = XFS_FSB_TO_AGNO(cur->bc_mp, fsbno);
449		__entry->bno = XFS_FSB_TO_AGBNO(cur->bc_mp, fsbno);
450		__entry->level = level;
451		__entry->nlevels = cur->bc_nlevels;
452		__entry->ptr = cur->bc_ptrs[level];
453	),
454	TP_printk("dev %d:%d type %u btnum %d agno %u agbno %u level %d nlevels %d ptr %d",
455		  MAJOR(__entry->dev), MINOR(__entry->dev),
456		  __entry->type,
457		  __entry->btnum,
458		  __entry->agno,
459		  __entry->bno,
460		  __entry->level,
461		  __entry->nlevels,
462		  __entry->ptr)
463)
464#define DEFINE_SCRUB_SBTREE_EVENT(name) \
465DEFINE_EVENT(xfs_scrub_sbtree_class, name, \
466	TP_PROTO(struct xfs_scrub_context *sc, struct xfs_btree_cur *cur, \
467		 int level), \
468	TP_ARGS(sc, cur, level))
469
470DEFINE_SCRUB_SBTREE_EVENT(xfs_scrub_btree_rec);
471DEFINE_SCRUB_SBTREE_EVENT(xfs_scrub_btree_key);
472
473TRACE_EVENT(xfs_scrub_xref_error,
474	TP_PROTO(struct xfs_scrub_context *sc, int error, void *ret_ip),
475	TP_ARGS(sc, error, ret_ip),
476	TP_STRUCT__entry(
477		__field(dev_t, dev)
478		__field(int, type)
479		__field(int, error)
480		__field(void *, ret_ip)
481	),
482	TP_fast_assign(
483		__entry->dev = sc->mp->m_super->s_dev;
484		__entry->type = sc->sm->sm_type;
485		__entry->error = error;
486		__entry->ret_ip = ret_ip;
487	),
488	TP_printk("dev %d:%d type %u xref error %d ret_ip %pF",
489		  MAJOR(__entry->dev), MINOR(__entry->dev),
490		  __entry->type,
491		  __entry->error,
492		  __entry->ret_ip)
493);
494
495#endif /* _TRACE_XFS_SCRUB_TRACE_H */
496
497#undef TRACE_INCLUDE_PATH
498#define TRACE_INCLUDE_PATH .
499#define TRACE_INCLUDE_FILE scrub/trace
500#include <trace/define_trace.h>