2 #define TRACE_SYSTEM f2fs
4 #if !defined(_TRACE_F2FS_H) || defined(TRACE_HEADER_MULTI_READ)
7 #include <linux/tracepoint.h>
9 #define show_dev(entry) MAJOR(entry->dev), MINOR(entry->dev)
10 #define show_dev_ino(entry) show_dev(entry), (unsigned long)entry->ino
12 DECLARE_EVENT_CLASS(f2fs__inode,
14 TP_PROTO(struct inode *inode),
22 __field(umode_t, mode)
24 __field(unsigned int, nlink)
25 __field(blkcnt_t, blocks)
30 __entry->dev = inode->i_sb->s_dev;
31 __entry->ino = inode->i_ino;
32 __entry->pino = F2FS_I(inode)->i_pino;
33 __entry->mode = inode->i_mode;
34 __entry->nlink = inode->i_nlink;
35 __entry->size = inode->i_size;
36 __entry->blocks = inode->i_blocks;
37 __entry->advise = F2FS_I(inode)->i_advise;
40 TP_printk("dev = (%d,%d), ino = %lu, pino = %lu, i_mode = 0x%hx, "
41 "i_size = %lld, i_nlink = %u, i_blocks = %llu, i_advise = 0x%x",
42 show_dev_ino(__entry),
43 (unsigned long)__entry->pino,
46 (unsigned int)__entry->nlink,
47 (unsigned long long)__entry->blocks,
48 (unsigned char)__entry->advise)
51 DECLARE_EVENT_CLASS(f2fs__inode_exit,
53 TP_PROTO(struct inode *inode, int ret),
64 __entry->dev = inode->i_sb->s_dev;
65 __entry->ino = inode->i_ino;
69 TP_printk("dev = (%d,%d), ino = %lu, ret = %d",
70 show_dev_ino(__entry),
74 DEFINE_EVENT(f2fs__inode, f2fs_sync_file_enter,
76 TP_PROTO(struct inode *inode),
81 TRACE_EVENT(f2fs_sync_file_exit,
83 TP_PROTO(struct inode *inode, bool need_cp, int datasync, int ret),
85 TP_ARGS(inode, need_cp, datasync, ret),
90 __field(bool, need_cp)
91 __field(int, datasync)
96 __entry->dev = inode->i_sb->s_dev;
97 __entry->ino = inode->i_ino;
98 __entry->need_cp = need_cp;
99 __entry->datasync = datasync;
103 TP_printk("dev = (%d,%d), ino = %lu, checkpoint is %s, "
104 "datasync = %d, ret = %d",
105 show_dev_ino(__entry),
106 __entry->need_cp ? "needed" : "not needed",
111 TRACE_EVENT(f2fs_sync_fs,
113 TP_PROTO(struct super_block *sb, int wait),
124 __entry->dev = sb->s_dev;
125 __entry->dirty = F2FS_SB(sb)->s_dirty;
126 __entry->wait = wait;
129 TP_printk("dev = (%d,%d), superblock is %s, wait = %d",
131 __entry->dirty ? "dirty" : "not dirty",
135 DEFINE_EVENT(f2fs__inode, f2fs_iget,
137 TP_PROTO(struct inode *inode),
142 DEFINE_EVENT(f2fs__inode_exit, f2fs_iget_exit,
144 TP_PROTO(struct inode *inode, int ret),
149 DEFINE_EVENT(f2fs__inode, f2fs_evict_inode,
151 TP_PROTO(struct inode *inode),
156 TRACE_EVENT(f2fs_unlink_enter,
158 TP_PROTO(struct inode *dir, struct dentry *dentry),
160 TP_ARGS(dir, dentry),
165 __field(loff_t, size)
166 __field(blkcnt_t, blocks)
167 __field(const char *, name)
171 __entry->dev = dir->i_sb->s_dev;
172 __entry->ino = dir->i_ino;
173 __entry->size = dir->i_size;
174 __entry->blocks = dir->i_blocks;
175 __entry->name = dentry->d_name.name;
178 TP_printk("dev = (%d,%d), dir ino = %lu, i_size = %lld, "
179 "i_blocks = %llu, name = %s",
180 show_dev_ino(__entry),
182 (unsigned long long)__entry->blocks,
186 DEFINE_EVENT(f2fs__inode_exit, f2fs_unlink_exit,
188 TP_PROTO(struct inode *inode, int ret),
193 DEFINE_EVENT(f2fs__inode, f2fs_truncate,
195 TP_PROTO(struct inode *inode),
200 TRACE_EVENT(f2fs_truncate_data_blocks_range,
202 TP_PROTO(struct inode *inode, nid_t nid, unsigned int ofs, int free),
204 TP_ARGS(inode, nid, ofs, free),
210 __field(unsigned int, ofs)
215 __entry->dev = inode->i_sb->s_dev;
216 __entry->ino = inode->i_ino;
219 __entry->free = free;
222 TP_printk("dev = (%d,%d), ino = %lu, nid = %u, offset = %u, freed = %d",
223 show_dev_ino(__entry),
224 (unsigned int)__entry->nid,
229 DECLARE_EVENT_CLASS(f2fs__truncate_op,
231 TP_PROTO(struct inode *inode, u64 from),
233 TP_ARGS(inode, from),
238 __field(loff_t, size)
239 __field(blkcnt_t, blocks)
244 __entry->dev = inode->i_sb->s_dev;
245 __entry->ino = inode->i_ino;
246 __entry->size = inode->i_size;
247 __entry->blocks = inode->i_blocks;
248 __entry->from = from;
251 TP_printk("dev = (%d,%d), ino = %lu, i_size = %lld, i_blocks = %llu, "
252 "start file offset = %llu",
253 show_dev_ino(__entry),
255 (unsigned long long)__entry->blocks,
256 (unsigned long long)__entry->from)
259 DEFINE_EVENT(f2fs__truncate_op, f2fs_truncate_blocks_enter,
261 TP_PROTO(struct inode *inode, u64 from),
266 DEFINE_EVENT(f2fs__inode_exit, f2fs_truncate_blocks_exit,
268 TP_PROTO(struct inode *inode, int ret),
273 DEFINE_EVENT(f2fs__truncate_op, f2fs_truncate_inode_blocks_enter,
275 TP_PROTO(struct inode *inode, u64 from),
280 DEFINE_EVENT(f2fs__inode_exit, f2fs_truncate_inode_blocks_exit,
282 TP_PROTO(struct inode *inode, int ret),
287 DECLARE_EVENT_CLASS(f2fs__truncate_node,
289 TP_PROTO(struct inode *inode, nid_t nid, block_t blk_addr),
291 TP_ARGS(inode, nid, blk_addr),
297 __field(block_t, blk_addr)
301 __entry->dev = inode->i_sb->s_dev;
302 __entry->ino = inode->i_ino;
304 __entry->blk_addr = blk_addr;
307 TP_printk("dev = (%d,%d), ino = %lu, nid = %u, block_address = 0x%llx",
308 show_dev_ino(__entry),
309 (unsigned int)__entry->nid,
310 (unsigned long long)__entry->blk_addr)
313 DEFINE_EVENT(f2fs__truncate_node, f2fs_truncate_nodes_enter,
315 TP_PROTO(struct inode *inode, nid_t nid, block_t blk_addr),
317 TP_ARGS(inode, nid, blk_addr)
320 DEFINE_EVENT(f2fs__inode_exit, f2fs_truncate_nodes_exit,
322 TP_PROTO(struct inode *inode, int ret),
327 DEFINE_EVENT(f2fs__truncate_node, f2fs_truncate_node,
329 TP_PROTO(struct inode *inode, nid_t nid, block_t blk_addr),
331 TP_ARGS(inode, nid, blk_addr)
334 TRACE_EVENT(f2fs_truncate_partial_nodes,
336 TP_PROTO(struct inode *inode, nid_t nid[], int depth, int err),
338 TP_ARGS(inode, nid, depth, err),
343 __field(nid_t, nid[3])
349 __entry->dev = inode->i_sb->s_dev;
350 __entry->ino = inode->i_ino;
351 __entry->nid[0] = nid[0];
352 __entry->nid[1] = nid[1];
353 __entry->nid[2] = nid[2];
354 __entry->depth = depth;
358 TP_printk("dev = (%d,%d), ino = %lu, "
359 "nid[0] = %u, nid[1] = %u, nid[2] = %u, depth = %d, err = %d",
360 show_dev_ino(__entry),
361 (unsigned int)__entry->nid[0],
362 (unsigned int)__entry->nid[1],
363 (unsigned int)__entry->nid[2],
368 #endif /* _TRACE_F2FS_H */
370 /* This part must be outside protection */
371 #include <trace/define_trace.h>