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