xref: /OK3568_Linux_fs/kernel/fs/iomap/trace.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * Copyright (c) 2009-2019 Christoph Hellwig
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * NOTE: none of these tracepoints shall be consider a stable kernel ABI
6*4882a593Smuzhiyun  * as they can change at any time.
7*4882a593Smuzhiyun  */
8*4882a593Smuzhiyun #undef TRACE_SYSTEM
9*4882a593Smuzhiyun #define TRACE_SYSTEM iomap
10*4882a593Smuzhiyun 
11*4882a593Smuzhiyun #if !defined(_IOMAP_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
12*4882a593Smuzhiyun #define _IOMAP_TRACE_H
13*4882a593Smuzhiyun 
14*4882a593Smuzhiyun #include <linux/tracepoint.h>
15*4882a593Smuzhiyun 
16*4882a593Smuzhiyun struct inode;
17*4882a593Smuzhiyun 
18*4882a593Smuzhiyun DECLARE_EVENT_CLASS(iomap_readpage_class,
19*4882a593Smuzhiyun 	TP_PROTO(struct inode *inode, int nr_pages),
20*4882a593Smuzhiyun 	TP_ARGS(inode, nr_pages),
21*4882a593Smuzhiyun 	TP_STRUCT__entry(
22*4882a593Smuzhiyun 		__field(dev_t, dev)
23*4882a593Smuzhiyun 		__field(u64, ino)
24*4882a593Smuzhiyun 		__field(int, nr_pages)
25*4882a593Smuzhiyun 	),
26*4882a593Smuzhiyun 	TP_fast_assign(
27*4882a593Smuzhiyun 		__entry->dev = inode->i_sb->s_dev;
28*4882a593Smuzhiyun 		__entry->ino = inode->i_ino;
29*4882a593Smuzhiyun 		__entry->nr_pages = nr_pages;
30*4882a593Smuzhiyun 	),
31*4882a593Smuzhiyun 	TP_printk("dev %d:%d ino 0x%llx nr_pages %d",
32*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
33*4882a593Smuzhiyun 		  __entry->ino,
34*4882a593Smuzhiyun 		  __entry->nr_pages)
35*4882a593Smuzhiyun )
36*4882a593Smuzhiyun 
37*4882a593Smuzhiyun #define DEFINE_READPAGE_EVENT(name)		\
38*4882a593Smuzhiyun DEFINE_EVENT(iomap_readpage_class, name,	\
39*4882a593Smuzhiyun 	TP_PROTO(struct inode *inode, int nr_pages), \
40*4882a593Smuzhiyun 	TP_ARGS(inode, nr_pages))
41*4882a593Smuzhiyun DEFINE_READPAGE_EVENT(iomap_readpage);
42*4882a593Smuzhiyun DEFINE_READPAGE_EVENT(iomap_readahead);
43*4882a593Smuzhiyun 
44*4882a593Smuzhiyun DECLARE_EVENT_CLASS(iomap_range_class,
45*4882a593Smuzhiyun 	TP_PROTO(struct inode *inode, unsigned long off, unsigned int len),
46*4882a593Smuzhiyun 	TP_ARGS(inode, off, len),
47*4882a593Smuzhiyun 	TP_STRUCT__entry(
48*4882a593Smuzhiyun 		__field(dev_t, dev)
49*4882a593Smuzhiyun 		__field(u64, ino)
50*4882a593Smuzhiyun 		__field(loff_t, size)
51*4882a593Smuzhiyun 		__field(unsigned long, offset)
52*4882a593Smuzhiyun 		__field(unsigned int, length)
53*4882a593Smuzhiyun 	),
54*4882a593Smuzhiyun 	TP_fast_assign(
55*4882a593Smuzhiyun 		__entry->dev = inode->i_sb->s_dev;
56*4882a593Smuzhiyun 		__entry->ino = inode->i_ino;
57*4882a593Smuzhiyun 		__entry->size = i_size_read(inode);
58*4882a593Smuzhiyun 		__entry->offset = off;
59*4882a593Smuzhiyun 		__entry->length = len;
60*4882a593Smuzhiyun 	),
61*4882a593Smuzhiyun 	TP_printk("dev %d:%d ino 0x%llx size 0x%llx offset %lx "
62*4882a593Smuzhiyun 		  "length %x",
63*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
64*4882a593Smuzhiyun 		  __entry->ino,
65*4882a593Smuzhiyun 		  __entry->size,
66*4882a593Smuzhiyun 		  __entry->offset,
67*4882a593Smuzhiyun 		  __entry->length)
68*4882a593Smuzhiyun )
69*4882a593Smuzhiyun 
70*4882a593Smuzhiyun #define DEFINE_RANGE_EVENT(name)		\
71*4882a593Smuzhiyun DEFINE_EVENT(iomap_range_class, name,	\
72*4882a593Smuzhiyun 	TP_PROTO(struct inode *inode, unsigned long off, unsigned int len),\
73*4882a593Smuzhiyun 	TP_ARGS(inode, off, len))
74*4882a593Smuzhiyun DEFINE_RANGE_EVENT(iomap_writepage);
75*4882a593Smuzhiyun DEFINE_RANGE_EVENT(iomap_releasepage);
76*4882a593Smuzhiyun DEFINE_RANGE_EVENT(iomap_invalidatepage);
77*4882a593Smuzhiyun DEFINE_RANGE_EVENT(iomap_dio_invalidate_fail);
78*4882a593Smuzhiyun 
79*4882a593Smuzhiyun #define IOMAP_TYPE_STRINGS \
80*4882a593Smuzhiyun 	{ IOMAP_HOLE,		"HOLE" }, \
81*4882a593Smuzhiyun 	{ IOMAP_DELALLOC,	"DELALLOC" }, \
82*4882a593Smuzhiyun 	{ IOMAP_MAPPED,		"MAPPED" }, \
83*4882a593Smuzhiyun 	{ IOMAP_UNWRITTEN,	"UNWRITTEN" }, \
84*4882a593Smuzhiyun 	{ IOMAP_INLINE,		"INLINE" }
85*4882a593Smuzhiyun 
86*4882a593Smuzhiyun #define IOMAP_FLAGS_STRINGS \
87*4882a593Smuzhiyun 	{ IOMAP_WRITE,		"WRITE" }, \
88*4882a593Smuzhiyun 	{ IOMAP_ZERO,		"ZERO" }, \
89*4882a593Smuzhiyun 	{ IOMAP_REPORT,		"REPORT" }, \
90*4882a593Smuzhiyun 	{ IOMAP_FAULT,		"FAULT" }, \
91*4882a593Smuzhiyun 	{ IOMAP_DIRECT,		"DIRECT" }, \
92*4882a593Smuzhiyun 	{ IOMAP_NOWAIT,		"NOWAIT" }
93*4882a593Smuzhiyun 
94*4882a593Smuzhiyun #define IOMAP_F_FLAGS_STRINGS \
95*4882a593Smuzhiyun 	{ IOMAP_F_NEW,		"NEW" }, \
96*4882a593Smuzhiyun 	{ IOMAP_F_DIRTY,	"DIRTY" }, \
97*4882a593Smuzhiyun 	{ IOMAP_F_SHARED,	"SHARED" }, \
98*4882a593Smuzhiyun 	{ IOMAP_F_MERGED,	"MERGED" }, \
99*4882a593Smuzhiyun 	{ IOMAP_F_BUFFER_HEAD,	"BH" }, \
100*4882a593Smuzhiyun 	{ IOMAP_F_SIZE_CHANGED,	"SIZE_CHANGED" }
101*4882a593Smuzhiyun 
102*4882a593Smuzhiyun DECLARE_EVENT_CLASS(iomap_class,
103*4882a593Smuzhiyun 	TP_PROTO(struct inode *inode, struct iomap *iomap),
104*4882a593Smuzhiyun 	TP_ARGS(inode, iomap),
105*4882a593Smuzhiyun 	TP_STRUCT__entry(
106*4882a593Smuzhiyun 		__field(dev_t, dev)
107*4882a593Smuzhiyun 		__field(u64, ino)
108*4882a593Smuzhiyun 		__field(u64, addr)
109*4882a593Smuzhiyun 		__field(loff_t, offset)
110*4882a593Smuzhiyun 		__field(u64, length)
111*4882a593Smuzhiyun 		__field(u16, type)
112*4882a593Smuzhiyun 		__field(u16, flags)
113*4882a593Smuzhiyun 		__field(dev_t, bdev)
114*4882a593Smuzhiyun 	),
115*4882a593Smuzhiyun 	TP_fast_assign(
116*4882a593Smuzhiyun 		__entry->dev = inode->i_sb->s_dev;
117*4882a593Smuzhiyun 		__entry->ino = inode->i_ino;
118*4882a593Smuzhiyun 		__entry->addr = iomap->addr;
119*4882a593Smuzhiyun 		__entry->offset = iomap->offset;
120*4882a593Smuzhiyun 		__entry->length = iomap->length;
121*4882a593Smuzhiyun 		__entry->type = iomap->type;
122*4882a593Smuzhiyun 		__entry->flags = iomap->flags;
123*4882a593Smuzhiyun 		__entry->bdev = iomap->bdev ? iomap->bdev->bd_dev : 0;
124*4882a593Smuzhiyun 	),
125*4882a593Smuzhiyun 	TP_printk("dev %d:%d ino 0x%llx bdev %d:%d addr %lld offset %lld "
126*4882a593Smuzhiyun 		  "length %llu type %s flags %s",
127*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
128*4882a593Smuzhiyun 		  __entry->ino,
129*4882a593Smuzhiyun 		  MAJOR(__entry->bdev), MINOR(__entry->bdev),
130*4882a593Smuzhiyun 		  __entry->addr,
131*4882a593Smuzhiyun 		  __entry->offset,
132*4882a593Smuzhiyun 		  __entry->length,
133*4882a593Smuzhiyun 		  __print_symbolic(__entry->type, IOMAP_TYPE_STRINGS),
134*4882a593Smuzhiyun 		  __print_flags(__entry->flags, "|", IOMAP_F_FLAGS_STRINGS))
135*4882a593Smuzhiyun )
136*4882a593Smuzhiyun 
137*4882a593Smuzhiyun #define DEFINE_IOMAP_EVENT(name)		\
138*4882a593Smuzhiyun DEFINE_EVENT(iomap_class, name,	\
139*4882a593Smuzhiyun 	TP_PROTO(struct inode *inode, struct iomap *iomap), \
140*4882a593Smuzhiyun 	TP_ARGS(inode, iomap))
141*4882a593Smuzhiyun DEFINE_IOMAP_EVENT(iomap_apply_dstmap);
142*4882a593Smuzhiyun DEFINE_IOMAP_EVENT(iomap_apply_srcmap);
143*4882a593Smuzhiyun 
144*4882a593Smuzhiyun TRACE_EVENT(iomap_apply,
145*4882a593Smuzhiyun 	TP_PROTO(struct inode *inode, loff_t pos, loff_t length,
146*4882a593Smuzhiyun 		unsigned int flags, const void *ops, void *actor,
147*4882a593Smuzhiyun 		unsigned long caller),
148*4882a593Smuzhiyun 	TP_ARGS(inode, pos, length, flags, ops, actor, caller),
149*4882a593Smuzhiyun 	TP_STRUCT__entry(
150*4882a593Smuzhiyun 		__field(dev_t, dev)
151*4882a593Smuzhiyun 		__field(u64, ino)
152*4882a593Smuzhiyun 		__field(loff_t, pos)
153*4882a593Smuzhiyun 		__field(loff_t, length)
154*4882a593Smuzhiyun 		__field(unsigned int, flags)
155*4882a593Smuzhiyun 		__field(const void *, ops)
156*4882a593Smuzhiyun 		__field(void *, actor)
157*4882a593Smuzhiyun 		__field(unsigned long, caller)
158*4882a593Smuzhiyun 	),
159*4882a593Smuzhiyun 	TP_fast_assign(
160*4882a593Smuzhiyun 		__entry->dev = inode->i_sb->s_dev;
161*4882a593Smuzhiyun 		__entry->ino = inode->i_ino;
162*4882a593Smuzhiyun 		__entry->pos = pos;
163*4882a593Smuzhiyun 		__entry->length = length;
164*4882a593Smuzhiyun 		__entry->flags = flags;
165*4882a593Smuzhiyun 		__entry->ops = ops;
166*4882a593Smuzhiyun 		__entry->actor = actor;
167*4882a593Smuzhiyun 		__entry->caller = caller;
168*4882a593Smuzhiyun 	),
169*4882a593Smuzhiyun 	TP_printk("dev %d:%d ino 0x%llx pos %lld length %lld flags %s (0x%x) "
170*4882a593Smuzhiyun 		  "ops %ps caller %pS actor %ps",
171*4882a593Smuzhiyun 		  MAJOR(__entry->dev), MINOR(__entry->dev),
172*4882a593Smuzhiyun 		   __entry->ino,
173*4882a593Smuzhiyun 		   __entry->pos,
174*4882a593Smuzhiyun 		   __entry->length,
175*4882a593Smuzhiyun 		   __print_flags(__entry->flags, "|", IOMAP_FLAGS_STRINGS),
176*4882a593Smuzhiyun 		   __entry->flags,
177*4882a593Smuzhiyun 		   __entry->ops,
178*4882a593Smuzhiyun 		   (void *)__entry->caller,
179*4882a593Smuzhiyun 		   __entry->actor)
180*4882a593Smuzhiyun );
181*4882a593Smuzhiyun 
182*4882a593Smuzhiyun #endif /* _IOMAP_TRACE_H */
183*4882a593Smuzhiyun 
184*4882a593Smuzhiyun #undef TRACE_INCLUDE_PATH
185*4882a593Smuzhiyun #define TRACE_INCLUDE_PATH .
186*4882a593Smuzhiyun #define TRACE_INCLUDE_FILE trace
187*4882a593Smuzhiyun #include <trace/define_trace.h>
188