mirror of https://github.com/OpenIPC/firmware.git
718 lines
20 KiB
Diff
718 lines
20 KiB
Diff
diff -drupN a/include/trace/events/f2fs.h b/include/trace/events/f2fs.h
|
|
--- a/include/trace/events/f2fs.h 2018-08-06 17:23:04.000000000 +0300
|
|
+++ b/include/trace/events/f2fs.h 2022-06-12 05:28:14.000000000 +0300
|
|
@@ -6,8 +6,8 @@
|
|
|
|
#include <linux/tracepoint.h>
|
|
|
|
-#define show_dev(entry) MAJOR(entry->dev), MINOR(entry->dev)
|
|
-#define show_dev_ino(entry) show_dev(entry), (unsigned long)entry->ino
|
|
+#define show_dev(dev) MAJOR(dev), MINOR(dev)
|
|
+#define show_dev_ino(entry) show_dev(entry->dev), (unsigned long)entry->ino
|
|
|
|
TRACE_DEFINE_ENUM(NODE);
|
|
TRACE_DEFINE_ENUM(DATA);
|
|
@@ -15,6 +15,8 @@ TRACE_DEFINE_ENUM(META);
|
|
TRACE_DEFINE_ENUM(META_FLUSH);
|
|
TRACE_DEFINE_ENUM(INMEM);
|
|
TRACE_DEFINE_ENUM(INMEM_DROP);
|
|
+TRACE_DEFINE_ENUM(INMEM_INVALIDATE);
|
|
+TRACE_DEFINE_ENUM(INMEM_REVOKE);
|
|
TRACE_DEFINE_ENUM(IPU);
|
|
TRACE_DEFINE_ENUM(OPU);
|
|
TRACE_DEFINE_ENUM(CURSEG_HOT_DATA);
|
|
@@ -42,6 +44,7 @@ TRACE_DEFINE_ENUM(CP_FASTBOOT);
|
|
TRACE_DEFINE_ENUM(CP_SYNC);
|
|
TRACE_DEFINE_ENUM(CP_RECOVERY);
|
|
TRACE_DEFINE_ENUM(CP_DISCARD);
|
|
+TRACE_DEFINE_ENUM(CP_TRIMMED);
|
|
|
|
#define show_block_type(type) \
|
|
__print_symbolic(type, \
|
|
@@ -51,32 +54,40 @@ TRACE_DEFINE_ENUM(CP_DISCARD);
|
|
{ META_FLUSH, "META_FLUSH" }, \
|
|
{ INMEM, "INMEM" }, \
|
|
{ INMEM_DROP, "INMEM_DROP" }, \
|
|
+ { INMEM_INVALIDATE, "INMEM_INVALIDATE" }, \
|
|
{ INMEM_REVOKE, "INMEM_REVOKE" }, \
|
|
{ IPU, "IN-PLACE" }, \
|
|
{ OPU, "OUT-OF-PLACE" })
|
|
|
|
-#define F2FS_BIO_FLAG_MASK(t) (t & (REQ_RAHEAD | WRITE_FLUSH_FUA))
|
|
-#define F2FS_BIO_EXTRA_MASK(t) (t & (REQ_META | REQ_PRIO))
|
|
+#define F2FS_OP_FLAGS (REQ_RAHEAD | REQ_SYNC | REQ_META | REQ_PRIO | \
|
|
+ REQ_PREFLUSH | REQ_FUA)
|
|
+#define F2FS_BIO_FLAG_MASK(t) (t & F2FS_OP_FLAGS)
|
|
|
|
-#define show_bio_type(op_flags) show_bio_op_flags(op_flags), \
|
|
- show_bio_extra(op_flags)
|
|
+#define show_bio_type(op,op_flags) show_bio_op(op), \
|
|
+ show_bio_op_flags(op_flags)
|
|
+
|
|
+#define show_bio_op(op) \
|
|
+ __print_symbolic(op, \
|
|
+ { REQ_OP_READ, "READ" }, \
|
|
+ { REQ_OP_WRITE, "WRITE" }, \
|
|
+ { REQ_OP_DISCARD, "DISCARD" }, \
|
|
+ { REQ_OP_SECURE_ERASE, "SECURE_ERASE" }, \
|
|
+ { REQ_OP_WRITE_SAME, "WRITE_SAME" })
|
|
|
|
#define show_bio_op_flags(flags) \
|
|
- __print_symbolic(F2FS_BIO_FLAG_MASK(flags), \
|
|
- { 0, "WRITE" }, \
|
|
- { REQ_RAHEAD, "READAHEAD" }, \
|
|
- { READ_SYNC, "READ_SYNC" }, \
|
|
- { WRITE_SYNC, "WRITE_SYNC" }, \
|
|
- { WRITE_FLUSH, "WRITE_FLUSH" }, \
|
|
- { WRITE_FUA, "WRITE_FUA" }, \
|
|
- { WRITE_FLUSH_FUA, "WRITE_FLUSH_FUA" })
|
|
+ __print_flags(F2FS_BIO_FLAG_MASK(flags), "|", \
|
|
+ { REQ_RAHEAD, "R" }, \
|
|
+ { REQ_SYNC, "S" }, \
|
|
+ { REQ_META, "M" }, \
|
|
+ { REQ_PRIO, "P" }, \
|
|
+ { REQ_PREFLUSH, "PF" }, \
|
|
+ { REQ_FUA, "FUA" })
|
|
|
|
-#define show_bio_extra(type) \
|
|
- __print_symbolic(F2FS_BIO_EXTRA_MASK(type), \
|
|
- { REQ_META, "(M)" }, \
|
|
- { REQ_PRIO, "(P)" }, \
|
|
- { REQ_META | REQ_PRIO, "(MP)" }, \
|
|
- { 0, " \b" })
|
|
+#define show_block_temp(temp) \
|
|
+ __print_symbolic(temp, \
|
|
+ { HOT, "HOT" }, \
|
|
+ { WARM, "WARM" }, \
|
|
+ { COLD, "COLD" })
|
|
|
|
#define show_data_type(type) \
|
|
__print_symbolic(type, \
|
|
@@ -109,12 +120,27 @@ TRACE_DEFINE_ENUM(CP_DISCARD);
|
|
{ GC_CB, "Cost-Benefit" })
|
|
|
|
#define show_cpreason(type) \
|
|
- __print_symbolic(type, \
|
|
+ __print_flags(type, "|", \
|
|
{ CP_UMOUNT, "Umount" }, \
|
|
{ CP_FASTBOOT, "Fastboot" }, \
|
|
{ CP_SYNC, "Sync" }, \
|
|
{ CP_RECOVERY, "Recovery" }, \
|
|
- { CP_DISCARD, "Discard" })
|
|
+ { CP_DISCARD, "Discard" }, \
|
|
+ { CP_UMOUNT, "Umount" }, \
|
|
+ { CP_TRIMMED, "Trimmed" })
|
|
+
|
|
+#define show_fsync_cpreason(type) \
|
|
+ __print_symbolic(type, \
|
|
+ { CP_NO_NEEDED, "no needed" }, \
|
|
+ { CP_NON_REGULAR, "non regular" }, \
|
|
+ { CP_HARDLINK, "hardlink" }, \
|
|
+ { CP_SB_NEED_CP, "sb needs cp" }, \
|
|
+ { CP_WRONG_PINO, "wrong pino" }, \
|
|
+ { CP_NO_SPC_ROLL, "no space roll forward" }, \
|
|
+ { CP_NODE_NEED_CP, "node needs cp" }, \
|
|
+ { CP_FASTBOOT_MODE, "fastboot mode" }, \
|
|
+ { CP_SPEC_LOG_NUM, "log type is 2" }, \
|
|
+ { CP_RECOVER_DIR, "dir needs recovery" })
|
|
|
|
struct victim_sel_policy;
|
|
struct f2fs_map_blocks;
|
|
@@ -190,14 +216,14 @@ DEFINE_EVENT(f2fs__inode, f2fs_sync_file
|
|
|
|
TRACE_EVENT(f2fs_sync_file_exit,
|
|
|
|
- TP_PROTO(struct inode *inode, int need_cp, int datasync, int ret),
|
|
+ TP_PROTO(struct inode *inode, int cp_reason, int datasync, int ret),
|
|
|
|
- TP_ARGS(inode, need_cp, datasync, ret),
|
|
+ TP_ARGS(inode, cp_reason, datasync, ret),
|
|
|
|
TP_STRUCT__entry(
|
|
__field(dev_t, dev)
|
|
__field(ino_t, ino)
|
|
- __field(int, need_cp)
|
|
+ __field(int, cp_reason)
|
|
__field(int, datasync)
|
|
__field(int, ret)
|
|
),
|
|
@@ -205,15 +231,15 @@ TRACE_EVENT(f2fs_sync_file_exit,
|
|
TP_fast_assign(
|
|
__entry->dev = inode->i_sb->s_dev;
|
|
__entry->ino = inode->i_ino;
|
|
- __entry->need_cp = need_cp;
|
|
+ __entry->cp_reason = cp_reason;
|
|
__entry->datasync = datasync;
|
|
__entry->ret = ret;
|
|
),
|
|
|
|
- TP_printk("dev = (%d,%d), ino = %lu, checkpoint is %s, "
|
|
+ TP_printk("dev = (%d,%d), ino = %lu, cp_reason: %s, "
|
|
"datasync = %d, ret = %d",
|
|
show_dev_ino(__entry),
|
|
- __entry->need_cp ? "needed" : "not needed",
|
|
+ show_fsync_cpreason(__entry->cp_reason),
|
|
__entry->datasync,
|
|
__entry->ret)
|
|
);
|
|
@@ -237,7 +263,7 @@ TRACE_EVENT(f2fs_sync_fs,
|
|
),
|
|
|
|
TP_printk("dev = (%d,%d), superblock is %s, wait = %d",
|
|
- show_dev(__entry),
|
|
+ show_dev(__entry->dev),
|
|
__entry->dirty ? "dirty" : "not dirty",
|
|
__entry->wait)
|
|
);
|
|
@@ -307,6 +333,13 @@ DEFINE_EVENT(f2fs__inode_exit, f2fs_unli
|
|
TP_ARGS(inode, ret)
|
|
);
|
|
|
|
+DEFINE_EVENT(f2fs__inode_exit, f2fs_drop_inode,
|
|
+
|
|
+ TP_PROTO(struct inode *inode, int ret),
|
|
+
|
|
+ TP_ARGS(inode, ret)
|
|
+);
|
|
+
|
|
DEFINE_EVENT(f2fs__inode, f2fs_truncate,
|
|
|
|
TP_PROTO(struct inode *inode),
|
|
@@ -516,14 +549,14 @@ TRACE_EVENT(f2fs_map_blocks,
|
|
|
|
TRACE_EVENT(f2fs_background_gc,
|
|
|
|
- TP_PROTO(struct super_block *sb, long wait_ms,
|
|
+ TP_PROTO(struct super_block *sb, unsigned int wait_ms,
|
|
unsigned int prefree, unsigned int free),
|
|
|
|
TP_ARGS(sb, wait_ms, prefree, free),
|
|
|
|
TP_STRUCT__entry(
|
|
__field(dev_t, dev)
|
|
- __field(long, wait_ms)
|
|
+ __field(unsigned int, wait_ms)
|
|
__field(unsigned int, prefree)
|
|
__field(unsigned int, free)
|
|
),
|
|
@@ -535,13 +568,120 @@ TRACE_EVENT(f2fs_background_gc,
|
|
__entry->free = free;
|
|
),
|
|
|
|
- TP_printk("dev = (%d,%d), wait_ms = %ld, prefree = %u, free = %u",
|
|
- show_dev(__entry),
|
|
+ TP_printk("dev = (%d,%d), wait_ms = %u, prefree = %u, free = %u",
|
|
+ show_dev(__entry->dev),
|
|
__entry->wait_ms,
|
|
__entry->prefree,
|
|
__entry->free)
|
|
);
|
|
|
|
+TRACE_EVENT(f2fs_gc_begin,
|
|
+
|
|
+ TP_PROTO(struct super_block *sb, bool sync, bool background,
|
|
+ long long dirty_nodes, long long dirty_dents,
|
|
+ long long dirty_imeta, unsigned int free_sec,
|
|
+ unsigned int free_seg, int reserved_seg,
|
|
+ unsigned int prefree_seg),
|
|
+
|
|
+ TP_ARGS(sb, sync, background, dirty_nodes, dirty_dents, dirty_imeta,
|
|
+ free_sec, free_seg, reserved_seg, prefree_seg),
|
|
+
|
|
+ TP_STRUCT__entry(
|
|
+ __field(dev_t, dev)
|
|
+ __field(bool, sync)
|
|
+ __field(bool, background)
|
|
+ __field(long long, dirty_nodes)
|
|
+ __field(long long, dirty_dents)
|
|
+ __field(long long, dirty_imeta)
|
|
+ __field(unsigned int, free_sec)
|
|
+ __field(unsigned int, free_seg)
|
|
+ __field(int, reserved_seg)
|
|
+ __field(unsigned int, prefree_seg)
|
|
+ ),
|
|
+
|
|
+ TP_fast_assign(
|
|
+ __entry->dev = sb->s_dev;
|
|
+ __entry->sync = sync;
|
|
+ __entry->background = background;
|
|
+ __entry->dirty_nodes = dirty_nodes;
|
|
+ __entry->dirty_dents = dirty_dents;
|
|
+ __entry->dirty_imeta = dirty_imeta;
|
|
+ __entry->free_sec = free_sec;
|
|
+ __entry->free_seg = free_seg;
|
|
+ __entry->reserved_seg = reserved_seg;
|
|
+ __entry->prefree_seg = prefree_seg;
|
|
+ ),
|
|
+
|
|
+ TP_printk("dev = (%d,%d), sync = %d, background = %d, nodes = %lld, "
|
|
+ "dents = %lld, imeta = %lld, free_sec:%u, free_seg:%u, "
|
|
+ "rsv_seg:%d, prefree_seg:%u",
|
|
+ show_dev(__entry->dev),
|
|
+ __entry->sync,
|
|
+ __entry->background,
|
|
+ __entry->dirty_nodes,
|
|
+ __entry->dirty_dents,
|
|
+ __entry->dirty_imeta,
|
|
+ __entry->free_sec,
|
|
+ __entry->free_seg,
|
|
+ __entry->reserved_seg,
|
|
+ __entry->prefree_seg)
|
|
+);
|
|
+
|
|
+TRACE_EVENT(f2fs_gc_end,
|
|
+
|
|
+ TP_PROTO(struct super_block *sb, int ret, int seg_freed,
|
|
+ int sec_freed, long long dirty_nodes,
|
|
+ long long dirty_dents, long long dirty_imeta,
|
|
+ unsigned int free_sec, unsigned int free_seg,
|
|
+ int reserved_seg, unsigned int prefree_seg),
|
|
+
|
|
+ TP_ARGS(sb, ret, seg_freed, sec_freed, dirty_nodes, dirty_dents,
|
|
+ dirty_imeta, free_sec, free_seg, reserved_seg, prefree_seg),
|
|
+
|
|
+ TP_STRUCT__entry(
|
|
+ __field(dev_t, dev)
|
|
+ __field(int, ret)
|
|
+ __field(int, seg_freed)
|
|
+ __field(int, sec_freed)
|
|
+ __field(long long, dirty_nodes)
|
|
+ __field(long long, dirty_dents)
|
|
+ __field(long long, dirty_imeta)
|
|
+ __field(unsigned int, free_sec)
|
|
+ __field(unsigned int, free_seg)
|
|
+ __field(int, reserved_seg)
|
|
+ __field(unsigned int, prefree_seg)
|
|
+ ),
|
|
+
|
|
+ TP_fast_assign(
|
|
+ __entry->dev = sb->s_dev;
|
|
+ __entry->ret = ret;
|
|
+ __entry->seg_freed = seg_freed;
|
|
+ __entry->sec_freed = sec_freed;
|
|
+ __entry->dirty_nodes = dirty_nodes;
|
|
+ __entry->dirty_dents = dirty_dents;
|
|
+ __entry->dirty_imeta = dirty_imeta;
|
|
+ __entry->free_sec = free_sec;
|
|
+ __entry->free_seg = free_seg;
|
|
+ __entry->reserved_seg = reserved_seg;
|
|
+ __entry->prefree_seg = prefree_seg;
|
|
+ ),
|
|
+
|
|
+ TP_printk("dev = (%d,%d), ret = %d, seg_freed = %d, sec_freed = %d, "
|
|
+ "nodes = %lld, dents = %lld, imeta = %lld, free_sec:%u, "
|
|
+ "free_seg:%u, rsv_seg:%d, prefree_seg:%u",
|
|
+ show_dev(__entry->dev),
|
|
+ __entry->ret,
|
|
+ __entry->seg_freed,
|
|
+ __entry->sec_freed,
|
|
+ __entry->dirty_nodes,
|
|
+ __entry->dirty_dents,
|
|
+ __entry->dirty_imeta,
|
|
+ __entry->free_sec,
|
|
+ __entry->free_seg,
|
|
+ __entry->reserved_seg,
|
|
+ __entry->prefree_seg)
|
|
+);
|
|
+
|
|
TRACE_EVENT(f2fs_get_victim,
|
|
|
|
TP_PROTO(struct super_block *sb, int type, int gc_type,
|
|
@@ -557,6 +697,7 @@ TRACE_EVENT(f2fs_get_victim,
|
|
__field(int, alloc_mode)
|
|
__field(int, gc_mode)
|
|
__field(unsigned int, victim)
|
|
+ __field(unsigned int, cost)
|
|
__field(unsigned int, ofs_unit)
|
|
__field(unsigned int, pre_victim)
|
|
__field(unsigned int, prefree)
|
|
@@ -570,26 +711,114 @@ TRACE_EVENT(f2fs_get_victim,
|
|
__entry->alloc_mode = p->alloc_mode;
|
|
__entry->gc_mode = p->gc_mode;
|
|
__entry->victim = p->min_segno;
|
|
+ __entry->cost = p->min_cost;
|
|
__entry->ofs_unit = p->ofs_unit;
|
|
__entry->pre_victim = pre_victim;
|
|
__entry->prefree = prefree;
|
|
__entry->free = free;
|
|
),
|
|
|
|
- TP_printk("dev = (%d,%d), type = %s, policy = (%s, %s, %s), victim = %u "
|
|
- "ofs_unit = %u, pre_victim_secno = %d, prefree = %u, free = %u",
|
|
- show_dev(__entry),
|
|
+ TP_printk("dev = (%d,%d), type = %s, policy = (%s, %s, %s), "
|
|
+ "victim = %u, cost = %u, ofs_unit = %u, "
|
|
+ "pre_victim_secno = %d, prefree = %u, free = %u",
|
|
+ show_dev(__entry->dev),
|
|
show_data_type(__entry->type),
|
|
show_gc_type(__entry->gc_type),
|
|
show_alloc_mode(__entry->alloc_mode),
|
|
show_victim_policy(__entry->gc_mode),
|
|
__entry->victim,
|
|
+ __entry->cost,
|
|
__entry->ofs_unit,
|
|
(int)__entry->pre_victim,
|
|
__entry->prefree,
|
|
__entry->free)
|
|
);
|
|
|
|
+TRACE_EVENT(f2fs_lookup_start,
|
|
+
|
|
+ TP_PROTO(struct inode *dir, struct dentry *dentry, unsigned int flags),
|
|
+
|
|
+ TP_ARGS(dir, dentry, flags),
|
|
+
|
|
+ TP_STRUCT__entry(
|
|
+ __field(dev_t, dev)
|
|
+ __field(ino_t, ino)
|
|
+ __field(const char *, name)
|
|
+ __field(unsigned int, flags)
|
|
+ ),
|
|
+
|
|
+ TP_fast_assign(
|
|
+ __entry->dev = dir->i_sb->s_dev;
|
|
+ __entry->ino = dir->i_ino;
|
|
+ __entry->name = dentry->d_name.name;
|
|
+ __entry->flags = flags;
|
|
+ ),
|
|
+
|
|
+ TP_printk("dev = (%d,%d), pino = %lu, name:%s, flags:%u",
|
|
+ show_dev_ino(__entry),
|
|
+ __entry->name,
|
|
+ __entry->flags)
|
|
+);
|
|
+
|
|
+TRACE_EVENT(f2fs_lookup_end,
|
|
+
|
|
+ TP_PROTO(struct inode *dir, struct dentry *dentry, nid_t ino,
|
|
+ int err),
|
|
+
|
|
+ TP_ARGS(dir, dentry, ino, err),
|
|
+
|
|
+ TP_STRUCT__entry(
|
|
+ __field(dev_t, dev)
|
|
+ __field(ino_t, ino)
|
|
+ __field(const char *, name)
|
|
+ __field(nid_t, cino)
|
|
+ __field(int, err)
|
|
+ ),
|
|
+
|
|
+ TP_fast_assign(
|
|
+ __entry->dev = dir->i_sb->s_dev;
|
|
+ __entry->ino = dir->i_ino;
|
|
+ __entry->name = dentry->d_name.name;
|
|
+ __entry->cino = ino;
|
|
+ __entry->err = err;
|
|
+ ),
|
|
+
|
|
+ TP_printk("dev = (%d,%d), pino = %lu, name:%s, ino:%u, err:%d",
|
|
+ show_dev_ino(__entry),
|
|
+ __entry->name,
|
|
+ __entry->cino,
|
|
+ __entry->err)
|
|
+);
|
|
+
|
|
+TRACE_EVENT(f2fs_readdir,
|
|
+
|
|
+ TP_PROTO(struct inode *dir, loff_t start_pos, loff_t end_pos, int err),
|
|
+
|
|
+ TP_ARGS(dir, start_pos, end_pos, err),
|
|
+
|
|
+ TP_STRUCT__entry(
|
|
+ __field(dev_t, dev)
|
|
+ __field(ino_t, ino)
|
|
+ __field(loff_t, start)
|
|
+ __field(loff_t, end)
|
|
+ __field(int, err)
|
|
+ ),
|
|
+
|
|
+ TP_fast_assign(
|
|
+ __entry->dev = dir->i_sb->s_dev;
|
|
+ __entry->ino = dir->i_ino;
|
|
+ __entry->start = start_pos;
|
|
+ __entry->end = end_pos;
|
|
+ __entry->err = err;
|
|
+ ),
|
|
+
|
|
+ TP_printk("dev = (%d,%d), ino = %lu, start_pos:%llu, end_pos:%llu, err:%d",
|
|
+ show_dev_ino(__entry),
|
|
+ __entry->start,
|
|
+ __entry->end,
|
|
+ __entry->err)
|
|
+);
|
|
+
|
|
TRACE_EVENT(f2fs_fallocate,
|
|
|
|
TP_PROTO(struct inode *inode, int mode,
|
|
@@ -715,7 +944,7 @@ TRACE_EVENT(f2fs_reserve_new_blocks,
|
|
),
|
|
|
|
TP_printk("dev = (%d,%d), nid = %u, ofs_in_node = %u, count = %llu",
|
|
- show_dev(__entry),
|
|
+ show_dev(__entry->dev),
|
|
(unsigned int)__entry->nid,
|
|
__entry->ofs_in_node,
|
|
(unsigned long long)__entry->count)
|
|
@@ -735,6 +964,7 @@ DECLARE_EVENT_CLASS(f2fs__submit_page_bi
|
|
__field(block_t, new_blkaddr)
|
|
__field(int, op)
|
|
__field(int, op_flags)
|
|
+ __field(int, temp)
|
|
__field(int, type)
|
|
),
|
|
|
|
@@ -746,16 +976,18 @@ DECLARE_EVENT_CLASS(f2fs__submit_page_bi
|
|
__entry->new_blkaddr = fio->new_blkaddr;
|
|
__entry->op = fio->op;
|
|
__entry->op_flags = fio->op_flags;
|
|
+ __entry->temp = fio->temp;
|
|
__entry->type = fio->type;
|
|
),
|
|
|
|
TP_printk("dev = (%d,%d), ino = %lu, page_index = 0x%lx, "
|
|
- "oldaddr = 0x%llx, newaddr = 0x%llx, rw = %s%s, type = %s",
|
|
+ "oldaddr = 0x%llx, newaddr = 0x%llx, rw = %s(%s), type = %s_%s",
|
|
show_dev_ino(__entry),
|
|
(unsigned long)__entry->index,
|
|
(unsigned long long)__entry->old_blkaddr,
|
|
(unsigned long long)__entry->new_blkaddr,
|
|
- show_bio_type(__entry->op_flags),
|
|
+ show_bio_type(__entry->op, __entry->op_flags),
|
|
+ show_block_temp(__entry->temp),
|
|
show_block_type(__entry->type))
|
|
);
|
|
|
|
@@ -768,7 +1000,7 @@ DEFINE_EVENT_CONDITION(f2fs__submit_page
|
|
TP_CONDITION(page->mapping)
|
|
);
|
|
|
|
-DEFINE_EVENT_CONDITION(f2fs__submit_page_bio, f2fs_submit_page_mbio,
|
|
+DEFINE_EVENT_CONDITION(f2fs__submit_page_bio, f2fs_submit_page_write,
|
|
|
|
TP_PROTO(struct page *page, struct f2fs_io_info *fio),
|
|
|
|
@@ -777,15 +1009,15 @@ DEFINE_EVENT_CONDITION(f2fs__submit_page
|
|
TP_CONDITION(page->mapping)
|
|
);
|
|
|
|
-DECLARE_EVENT_CLASS(f2fs__submit_bio,
|
|
+DECLARE_EVENT_CLASS(f2fs__bio,
|
|
|
|
- TP_PROTO(struct super_block *sb, struct f2fs_io_info *fio,
|
|
- struct bio *bio),
|
|
+ TP_PROTO(struct super_block *sb, int type, struct bio *bio),
|
|
|
|
- TP_ARGS(sb, fio, bio),
|
|
+ TP_ARGS(sb, type, bio),
|
|
|
|
TP_STRUCT__entry(
|
|
__field(dev_t, dev)
|
|
+ __field(dev_t, target)
|
|
__field(int, op)
|
|
__field(int, op_flags)
|
|
__field(int, type)
|
|
@@ -795,37 +1027,55 @@ DECLARE_EVENT_CLASS(f2fs__submit_bio,
|
|
|
|
TP_fast_assign(
|
|
__entry->dev = sb->s_dev;
|
|
- __entry->op = fio->op;
|
|
- __entry->op_flags = fio->op_flags;
|
|
- __entry->type = fio->type;
|
|
+ __entry->target = bio->bi_bdev->bd_dev;
|
|
+ __entry->op = bio_op(bio);
|
|
+ __entry->op_flags = bio->bi_opf;
|
|
+ __entry->type = type;
|
|
__entry->sector = bio->bi_iter.bi_sector;
|
|
__entry->size = bio->bi_iter.bi_size;
|
|
),
|
|
|
|
- TP_printk("dev = (%d,%d), rw = %s%s, %s, sector = %lld, size = %u",
|
|
- show_dev(__entry),
|
|
- show_bio_type(__entry->op_flags),
|
|
+ TP_printk("dev = (%d,%d)/(%d,%d), rw = %s(%s), %s, sector = %lld, size = %u",
|
|
+ show_dev(__entry->target),
|
|
+ show_dev(__entry->dev),
|
|
+ show_bio_type(__entry->op, __entry->op_flags),
|
|
show_block_type(__entry->type),
|
|
(unsigned long long)__entry->sector,
|
|
__entry->size)
|
|
);
|
|
|
|
-DEFINE_EVENT_CONDITION(f2fs__submit_bio, f2fs_submit_write_bio,
|
|
+DEFINE_EVENT_CONDITION(f2fs__bio, f2fs_prepare_write_bio,
|
|
|
|
- TP_PROTO(struct super_block *sb, struct f2fs_io_info *fio,
|
|
- struct bio *bio),
|
|
+ TP_PROTO(struct super_block *sb, int type, struct bio *bio),
|
|
|
|
- TP_ARGS(sb, fio, bio),
|
|
+ TP_ARGS(sb, type, bio),
|
|
|
|
TP_CONDITION(bio)
|
|
);
|
|
|
|
-DEFINE_EVENT_CONDITION(f2fs__submit_bio, f2fs_submit_read_bio,
|
|
+DEFINE_EVENT_CONDITION(f2fs__bio, f2fs_prepare_read_bio,
|
|
|
|
- TP_PROTO(struct super_block *sb, struct f2fs_io_info *fio,
|
|
- struct bio *bio),
|
|
+ TP_PROTO(struct super_block *sb, int type, struct bio *bio),
|
|
|
|
- TP_ARGS(sb, fio, bio),
|
|
+ TP_ARGS(sb, type, bio),
|
|
+
|
|
+ TP_CONDITION(bio)
|
|
+);
|
|
+
|
|
+DEFINE_EVENT_CONDITION(f2fs__bio, f2fs_submit_read_bio,
|
|
+
|
|
+ TP_PROTO(struct super_block *sb, int type, struct bio *bio),
|
|
+
|
|
+ TP_ARGS(sb, type, bio),
|
|
+
|
|
+ TP_CONDITION(bio)
|
|
+);
|
|
+
|
|
+DEFINE_EVENT_CONDITION(f2fs__bio, f2fs_submit_write_bio,
|
|
+
|
|
+ TP_PROTO(struct super_block *sb, int type, struct bio *bio),
|
|
+
|
|
+ TP_ARGS(sb, type, bio),
|
|
|
|
TP_CONDITION(bio)
|
|
);
|
|
@@ -1084,16 +1334,16 @@ TRACE_EVENT(f2fs_write_checkpoint,
|
|
),
|
|
|
|
TP_printk("dev = (%d,%d), checkpoint for %s, state = %s",
|
|
- show_dev(__entry),
|
|
+ show_dev(__entry->dev),
|
|
show_cpreason(__entry->reason),
|
|
__entry->msg)
|
|
);
|
|
|
|
-TRACE_EVENT(f2fs_issue_discard,
|
|
+DECLARE_EVENT_CLASS(f2fs_discard,
|
|
|
|
- TP_PROTO(struct super_block *sb, block_t blkstart, block_t blklen),
|
|
+ TP_PROTO(struct block_device *dev, block_t blkstart, block_t blklen),
|
|
|
|
- TP_ARGS(sb, blkstart, blklen),
|
|
+ TP_ARGS(dev, blkstart, blklen),
|
|
|
|
TP_STRUCT__entry(
|
|
__field(dev_t, dev)
|
|
@@ -1102,40 +1352,85 @@ TRACE_EVENT(f2fs_issue_discard,
|
|
),
|
|
|
|
TP_fast_assign(
|
|
- __entry->dev = sb->s_dev;
|
|
+ __entry->dev = dev->bd_dev;
|
|
__entry->blkstart = blkstart;
|
|
__entry->blklen = blklen;
|
|
),
|
|
|
|
TP_printk("dev = (%d,%d), blkstart = 0x%llx, blklen = 0x%llx",
|
|
- show_dev(__entry),
|
|
+ show_dev(__entry->dev),
|
|
(unsigned long long)__entry->blkstart,
|
|
(unsigned long long)__entry->blklen)
|
|
);
|
|
|
|
+DEFINE_EVENT(f2fs_discard, f2fs_queue_discard,
|
|
+
|
|
+ TP_PROTO(struct block_device *dev, block_t blkstart, block_t blklen),
|
|
+
|
|
+ TP_ARGS(dev, blkstart, blklen)
|
|
+);
|
|
+
|
|
+DEFINE_EVENT(f2fs_discard, f2fs_issue_discard,
|
|
+
|
|
+ TP_PROTO(struct block_device *dev, block_t blkstart, block_t blklen),
|
|
+
|
|
+ TP_ARGS(dev, blkstart, blklen)
|
|
+);
|
|
+
|
|
+DEFINE_EVENT(f2fs_discard, f2fs_remove_discard,
|
|
+
|
|
+ TP_PROTO(struct block_device *dev, block_t blkstart, block_t blklen),
|
|
+
|
|
+ TP_ARGS(dev, blkstart, blklen)
|
|
+);
|
|
+
|
|
+TRACE_EVENT(f2fs_issue_reset_zone,
|
|
+
|
|
+ TP_PROTO(struct block_device *dev, block_t blkstart),
|
|
+
|
|
+ TP_ARGS(dev, blkstart),
|
|
+
|
|
+ TP_STRUCT__entry(
|
|
+ __field(dev_t, dev)
|
|
+ __field(block_t, blkstart)
|
|
+ ),
|
|
+
|
|
+ TP_fast_assign(
|
|
+ __entry->dev = dev->bd_dev;
|
|
+ __entry->blkstart = blkstart;
|
|
+ ),
|
|
+
|
|
+ TP_printk("dev = (%d,%d), reset zone at block = 0x%llx",
|
|
+ show_dev(__entry->dev),
|
|
+ (unsigned long long)__entry->blkstart)
|
|
+);
|
|
+
|
|
TRACE_EVENT(f2fs_issue_flush,
|
|
|
|
- TP_PROTO(struct super_block *sb, unsigned int nobarrier,
|
|
- unsigned int flush_merge),
|
|
+ TP_PROTO(struct block_device *dev, unsigned int nobarrier,
|
|
+ unsigned int flush_merge, int ret),
|
|
|
|
- TP_ARGS(sb, nobarrier, flush_merge),
|
|
+ TP_ARGS(dev, nobarrier, flush_merge, ret),
|
|
|
|
TP_STRUCT__entry(
|
|
__field(dev_t, dev)
|
|
__field(unsigned int, nobarrier)
|
|
__field(unsigned int, flush_merge)
|
|
+ __field(int, ret)
|
|
),
|
|
|
|
TP_fast_assign(
|
|
- __entry->dev = sb->s_dev;
|
|
+ __entry->dev = dev->bd_dev;
|
|
__entry->nobarrier = nobarrier;
|
|
__entry->flush_merge = flush_merge;
|
|
+ __entry->ret = ret;
|
|
),
|
|
|
|
- TP_printk("dev = (%d,%d), %s %s",
|
|
- show_dev(__entry),
|
|
+ TP_printk("dev = (%d,%d), %s %s, ret = %d",
|
|
+ show_dev(__entry->dev),
|
|
__entry->nobarrier ? "skip (nobarrier)" : "issue",
|
|
- __entry->flush_merge ? " with flush_merge" : "")
|
|
+ __entry->flush_merge ? " with flush_merge" : "",
|
|
+ __entry->ret)
|
|
);
|
|
|
|
TRACE_EVENT(f2fs_lookup_extent_tree_start,
|
|
@@ -1248,7 +1543,7 @@ TRACE_EVENT(f2fs_shrink_extent_tree,
|
|
),
|
|
|
|
TP_printk("dev = (%d,%d), shrunk: node_cnt = %u, tree_cnt = %u",
|
|
- show_dev(__entry),
|
|
+ show_dev(__entry->dev),
|
|
__entry->node_cnt,
|
|
__entry->tree_cnt)
|
|
);
|
|
@@ -1295,7 +1590,7 @@ DECLARE_EVENT_CLASS(f2fs_sync_dirty_inod
|
|
),
|
|
|
|
TP_printk("dev = (%d,%d), %s, dirty count = %lld",
|
|
- show_dev(__entry),
|
|
+ show_dev(__entry->dev),
|
|
show_file_type(__entry->type),
|
|
__entry->count)
|
|
);
|