Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1/* SPDX-License-Identifier: GPL-2.0 */
2#undef TRACE_SYSTEM
3#define TRACE_SYSTEM fs_dax
4
5#if !defined(_TRACE_FS_DAX_H) || defined(TRACE_HEADER_MULTI_READ)
6#define _TRACE_FS_DAX_H
7
8#include <linux/tracepoint.h>
9
10DECLARE_EVENT_CLASS(dax_pmd_fault_class,
11 TP_PROTO(struct inode *inode, struct vm_fault *vmf,
12 pgoff_t max_pgoff, int result),
13 TP_ARGS(inode, vmf, max_pgoff, result),
14 TP_STRUCT__entry(
15 __field(unsigned long, ino)
16 __field(unsigned long, vm_start)
17 __field(unsigned long, vm_end)
18 __field(vm_flags_t, vm_flags)
19 __field(unsigned long, address)
20 __field(pgoff_t, pgoff)
21 __field(pgoff_t, max_pgoff)
22 __field(dev_t, dev)
23 __field(unsigned int, flags)
24 __field(int, result)
25 ),
26 TP_fast_assign(
27 __entry->dev = inode->i_sb->s_dev;
28 __entry->ino = inode->i_ino;
29 __entry->vm_start = vmf->vma->vm_start;
30 __entry->vm_end = vmf->vma->vm_end;
31 __entry->vm_flags = vmf->vma->vm_flags;
32 __entry->address = vmf->address;
33 __entry->flags = vmf->flags;
34 __entry->pgoff = vmf->pgoff;
35 __entry->max_pgoff = max_pgoff;
36 __entry->result = result;
37 ),
38 TP_printk("dev %d:%d ino %#lx %s %s address %#lx vm_start "
39 "%#lx vm_end %#lx pgoff %#lx max_pgoff %#lx %s",
40 MAJOR(__entry->dev),
41 MINOR(__entry->dev),
42 __entry->ino,
43 __entry->vm_flags & VM_SHARED ? "shared" : "private",
44 __print_flags(__entry->flags, "|", FAULT_FLAG_TRACE),
45 __entry->address,
46 __entry->vm_start,
47 __entry->vm_end,
48 __entry->pgoff,
49 __entry->max_pgoff,
50 __print_flags(__entry->result, "|", VM_FAULT_RESULT_TRACE)
51 )
52)
53
54#define DEFINE_PMD_FAULT_EVENT(name) \
55DEFINE_EVENT(dax_pmd_fault_class, name, \
56 TP_PROTO(struct inode *inode, struct vm_fault *vmf, \
57 pgoff_t max_pgoff, int result), \
58 TP_ARGS(inode, vmf, max_pgoff, result))
59
60DEFINE_PMD_FAULT_EVENT(dax_pmd_fault);
61DEFINE_PMD_FAULT_EVENT(dax_pmd_fault_done);
62
63DECLARE_EVENT_CLASS(dax_pmd_load_hole_class,
64 TP_PROTO(struct inode *inode, struct vm_fault *vmf,
65 struct folio *zero_folio,
66 void *radix_entry),
67 TP_ARGS(inode, vmf, zero_folio, radix_entry),
68 TP_STRUCT__entry(
69 __field(unsigned long, ino)
70 __field(vm_flags_t, vm_flags)
71 __field(unsigned long, address)
72 __field(struct folio *, zero_folio)
73 __field(void *, radix_entry)
74 __field(dev_t, dev)
75 ),
76 TP_fast_assign(
77 __entry->dev = inode->i_sb->s_dev;
78 __entry->ino = inode->i_ino;
79 __entry->vm_flags = vmf->vma->vm_flags;
80 __entry->address = vmf->address;
81 __entry->zero_folio = zero_folio;
82 __entry->radix_entry = radix_entry;
83 ),
84 TP_printk("dev %d:%d ino %#lx %s address %#lx zero_folio %p "
85 "radix_entry %#lx",
86 MAJOR(__entry->dev),
87 MINOR(__entry->dev),
88 __entry->ino,
89 __entry->vm_flags & VM_SHARED ? "shared" : "private",
90 __entry->address,
91 __entry->zero_folio,
92 (unsigned long)__entry->radix_entry
93 )
94)
95
96#define DEFINE_PMD_LOAD_HOLE_EVENT(name) \
97DEFINE_EVENT(dax_pmd_load_hole_class, name, \
98 TP_PROTO(struct inode *inode, struct vm_fault *vmf, \
99 struct folio *zero_folio, void *radix_entry), \
100 TP_ARGS(inode, vmf, zero_folio, radix_entry))
101
102DEFINE_PMD_LOAD_HOLE_EVENT(dax_pmd_load_hole);
103DEFINE_PMD_LOAD_HOLE_EVENT(dax_pmd_load_hole_fallback);
104
105DECLARE_EVENT_CLASS(dax_pte_fault_class,
106 TP_PROTO(struct inode *inode, struct vm_fault *vmf, int result),
107 TP_ARGS(inode, vmf, result),
108 TP_STRUCT__entry(
109 __field(unsigned long, ino)
110 __field(vm_flags_t, vm_flags)
111 __field(unsigned long, address)
112 __field(pgoff_t, pgoff)
113 __field(dev_t, dev)
114 __field(unsigned int, flags)
115 __field(int, result)
116 ),
117 TP_fast_assign(
118 __entry->dev = inode->i_sb->s_dev;
119 __entry->ino = inode->i_ino;
120 __entry->vm_flags = vmf->vma->vm_flags;
121 __entry->address = vmf->address;
122 __entry->flags = vmf->flags;
123 __entry->pgoff = vmf->pgoff;
124 __entry->result = result;
125 ),
126 TP_printk("dev %d:%d ino %#lx %s %s address %#lx pgoff %#lx %s",
127 MAJOR(__entry->dev),
128 MINOR(__entry->dev),
129 __entry->ino,
130 __entry->vm_flags & VM_SHARED ? "shared" : "private",
131 __print_flags(__entry->flags, "|", FAULT_FLAG_TRACE),
132 __entry->address,
133 __entry->pgoff,
134 __print_flags(__entry->result, "|", VM_FAULT_RESULT_TRACE)
135 )
136)
137
138#define DEFINE_PTE_FAULT_EVENT(name) \
139DEFINE_EVENT(dax_pte_fault_class, name, \
140 TP_PROTO(struct inode *inode, struct vm_fault *vmf, int result), \
141 TP_ARGS(inode, vmf, result))
142
143DEFINE_PTE_FAULT_EVENT(dax_pte_fault);
144DEFINE_PTE_FAULT_EVENT(dax_pte_fault_done);
145DEFINE_PTE_FAULT_EVENT(dax_load_hole);
146DEFINE_PTE_FAULT_EVENT(dax_insert_pfn_mkwrite_no_entry);
147DEFINE_PTE_FAULT_EVENT(dax_insert_pfn_mkwrite);
148
149DECLARE_EVENT_CLASS(dax_writeback_range_class,
150 TP_PROTO(struct inode *inode, pgoff_t start_index, pgoff_t end_index),
151 TP_ARGS(inode, start_index, end_index),
152 TP_STRUCT__entry(
153 __field(unsigned long, ino)
154 __field(pgoff_t, start_index)
155 __field(pgoff_t, end_index)
156 __field(dev_t, dev)
157 ),
158 TP_fast_assign(
159 __entry->dev = inode->i_sb->s_dev;
160 __entry->ino = inode->i_ino;
161 __entry->start_index = start_index;
162 __entry->end_index = end_index;
163 ),
164 TP_printk("dev %d:%d ino %#lx pgoff %#lx-%#lx",
165 MAJOR(__entry->dev),
166 MINOR(__entry->dev),
167 __entry->ino,
168 __entry->start_index,
169 __entry->end_index
170 )
171)
172
173#define DEFINE_WRITEBACK_RANGE_EVENT(name) \
174DEFINE_EVENT(dax_writeback_range_class, name, \
175 TP_PROTO(struct inode *inode, pgoff_t start_index, pgoff_t end_index),\
176 TP_ARGS(inode, start_index, end_index))
177
178DEFINE_WRITEBACK_RANGE_EVENT(dax_writeback_range);
179DEFINE_WRITEBACK_RANGE_EVENT(dax_writeback_range_done);
180
181TRACE_EVENT(dax_writeback_one,
182 TP_PROTO(struct inode *inode, pgoff_t pgoff, pgoff_t pglen),
183 TP_ARGS(inode, pgoff, pglen),
184 TP_STRUCT__entry(
185 __field(unsigned long, ino)
186 __field(pgoff_t, pgoff)
187 __field(pgoff_t, pglen)
188 __field(dev_t, dev)
189 ),
190 TP_fast_assign(
191 __entry->dev = inode->i_sb->s_dev;
192 __entry->ino = inode->i_ino;
193 __entry->pgoff = pgoff;
194 __entry->pglen = pglen;
195 ),
196 TP_printk("dev %d:%d ino %#lx pgoff %#lx pglen %#lx",
197 MAJOR(__entry->dev),
198 MINOR(__entry->dev),
199 __entry->ino,
200 __entry->pgoff,
201 __entry->pglen
202 )
203)
204
205#endif /* _TRACE_FS_DAX_H */
206
207/* This part must be outside protection */
208#include <trace/define_trace.h>