diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2015-04-18 11:17:20 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2015-04-18 11:17:20 -0400 |
| commit | 06a60deca87dba8e2c186ea7f12ea87d6785188e (patch) | |
| tree | 2a6c8de6a7b110d13a1c1e3fc07cdc9065dfd749 /include/trace/events | |
| parent | d6a24d0640d609138a4e40a4ce9fd9fe7859e24c (diff) | |
| parent | 10027551ccf5459cc771c31ac8bc8e5cc8db45f8 (diff) | |
Merge tag 'for-f2fs-4.1' of git://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs
Pull f2fs updates from Jaegeuk Kim:
"New features:
- in-memory extent_cache
- fs_shutdown to test power-off-recovery
- use inline_data to store symlink path
- show f2fs as a non-misc filesystem
Major fixes:
- avoid CPU stalls on sync_dirty_dir_inodes
- fix some power-off-recovery procedure
- fix handling of broken symlink correctly
- fix missing dot and dotdot made by sudden power cuts
- handle wrong data index during roll-forward recovery
- preallocate data blocks for direct_io
... and a bunch of minor bug fixes and cleanups"
* tag 'for-f2fs-4.1' of git://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs: (71 commits)
f2fs: pass checkpoint reason on roll-forward recovery
f2fs: avoid abnormal behavior on broken symlink
f2fs: flush symlink path to avoid broken symlink after POR
f2fs: change 0 to false for bool type
f2fs: do not recover wrong data index
f2fs: do not increase link count during recovery
f2fs: assign parent's i_mode for empty dir
f2fs: add F2FS_INLINE_DOTS to recover missing dot dentries
f2fs: fix mismatching lock and unlock pages for roll-forward recovery
f2fs: fix sparse warnings
f2fs: limit b_size of mapped bh in f2fs_map_bh
f2fs: persist system.advise into on-disk inode
f2fs: avoid NULL pointer dereference in f2fs_xattr_advise_get
f2fs: preallocate fallocated blocks for direct IO
f2fs: enable inline data by default
f2fs: preserve extent info for extent cache
f2fs: initialize extent tree with on-disk extent info of inode
f2fs: introduce __{find,grab}_extent_tree
f2fs: split set_data_blkaddr from f2fs_update_extent_cache
f2fs: enable fast symlink by utilizing inline data
...
Diffstat (limited to 'include/trace/events')
| -rw-r--r-- | include/trace/events/f2fs.h | 162 |
1 files changed, 161 insertions, 1 deletions
diff --git a/include/trace/events/f2fs.h b/include/trace/events/f2fs.h index 36f4536b6149..e202dec22e1d 100644 --- a/include/trace/events/f2fs.h +++ b/include/trace/events/f2fs.h | |||
| @@ -44,7 +44,11 @@ TRACE_DEFINE_ENUM(CP_DISCARD); | |||
| 44 | { NODE, "NODE" }, \ | 44 | { NODE, "NODE" }, \ |
| 45 | { DATA, "DATA" }, \ | 45 | { DATA, "DATA" }, \ |
| 46 | { META, "META" }, \ | 46 | { META, "META" }, \ |
| 47 | { META_FLUSH, "META_FLUSH" }) | 47 | { META_FLUSH, "META_FLUSH" }, \ |
| 48 | { INMEM, "INMEM" }, \ | ||
| 49 | { INMEM_DROP, "INMEM_DROP" }, \ | ||
| 50 | { IPU, "IN-PLACE" }, \ | ||
| 51 | { OPU, "OUT-OF-PLACE" }) | ||
| 48 | 52 | ||
| 49 | #define F2FS_BIO_MASK(t) (t & (READA | WRITE_FLUSH_FUA)) | 53 | #define F2FS_BIO_MASK(t) (t & (READA | WRITE_FLUSH_FUA)) |
| 50 | #define F2FS_BIO_EXTRA_MASK(t) (t & (REQ_META | REQ_PRIO)) | 54 | #define F2FS_BIO_EXTRA_MASK(t) (t & (REQ_META | REQ_PRIO)) |
| @@ -104,6 +108,7 @@ TRACE_DEFINE_ENUM(CP_DISCARD); | |||
| 104 | { CP_UMOUNT, "Umount" }, \ | 108 | { CP_UMOUNT, "Umount" }, \ |
| 105 | { CP_FASTBOOT, "Fastboot" }, \ | 109 | { CP_FASTBOOT, "Fastboot" }, \ |
| 106 | { CP_SYNC, "Sync" }, \ | 110 | { CP_SYNC, "Sync" }, \ |
| 111 | { CP_RECOVERY, "Recovery" }, \ | ||
| 107 | { CP_DISCARD, "Discard" }) | 112 | { CP_DISCARD, "Discard" }) |
| 108 | 113 | ||
| 109 | struct victim_sel_policy; | 114 | struct victim_sel_policy; |
| @@ -884,6 +889,13 @@ DEFINE_EVENT(f2fs__page, f2fs_writepage, | |||
| 884 | TP_ARGS(page, type) | 889 | TP_ARGS(page, type) |
| 885 | ); | 890 | ); |
| 886 | 891 | ||
| 892 | DEFINE_EVENT(f2fs__page, f2fs_do_write_data_page, | ||
| 893 | |||
| 894 | TP_PROTO(struct page *page, int type), | ||
| 895 | |||
| 896 | TP_ARGS(page, type) | ||
| 897 | ); | ||
| 898 | |||
| 887 | DEFINE_EVENT(f2fs__page, f2fs_readpage, | 899 | DEFINE_EVENT(f2fs__page, f2fs_readpage, |
| 888 | 900 | ||
| 889 | TP_PROTO(struct page *page, int type), | 901 | TP_PROTO(struct page *page, int type), |
| @@ -905,6 +917,20 @@ DEFINE_EVENT(f2fs__page, f2fs_vm_page_mkwrite, | |||
| 905 | TP_ARGS(page, type) | 917 | TP_ARGS(page, type) |
| 906 | ); | 918 | ); |
| 907 | 919 | ||
| 920 | DEFINE_EVENT(f2fs__page, f2fs_register_inmem_page, | ||
| 921 | |||
| 922 | TP_PROTO(struct page *page, int type), | ||
| 923 | |||
| 924 | TP_ARGS(page, type) | ||
| 925 | ); | ||
| 926 | |||
| 927 | DEFINE_EVENT(f2fs__page, f2fs_commit_inmem_page, | ||
| 928 | |||
| 929 | TP_PROTO(struct page *page, int type), | ||
| 930 | |||
| 931 | TP_ARGS(page, type) | ||
| 932 | ); | ||
| 933 | |||
| 908 | TRACE_EVENT(f2fs_writepages, | 934 | TRACE_EVENT(f2fs_writepages, |
| 909 | 935 | ||
| 910 | TP_PROTO(struct inode *inode, struct writeback_control *wbc, int type), | 936 | TP_PROTO(struct inode *inode, struct writeback_control *wbc, int type), |
| @@ -1041,6 +1067,140 @@ TRACE_EVENT(f2fs_issue_flush, | |||
| 1041 | __entry->nobarrier ? "skip (nobarrier)" : "issue", | 1067 | __entry->nobarrier ? "skip (nobarrier)" : "issue", |
| 1042 | __entry->flush_merge ? " with flush_merge" : "") | 1068 | __entry->flush_merge ? " with flush_merge" : "") |
| 1043 | ); | 1069 | ); |
| 1070 | |||
| 1071 | TRACE_EVENT(f2fs_lookup_extent_tree_start, | ||
| 1072 | |||
| 1073 | TP_PROTO(struct inode *inode, unsigned int pgofs), | ||
| 1074 | |||
| 1075 | TP_ARGS(inode, pgofs), | ||
| 1076 | |||
| 1077 | TP_STRUCT__entry( | ||
| 1078 | __field(dev_t, dev) | ||
| 1079 | __field(ino_t, ino) | ||
| 1080 | __field(unsigned int, pgofs) | ||
| 1081 | ), | ||
| 1082 | |||
| 1083 | TP_fast_assign( | ||
| 1084 | __entry->dev = inode->i_sb->s_dev; | ||
| 1085 | __entry->ino = inode->i_ino; | ||
| 1086 | __entry->pgofs = pgofs; | ||
| 1087 | ), | ||
| 1088 | |||
| 1089 | TP_printk("dev = (%d,%d), ino = %lu, pgofs = %u", | ||
| 1090 | show_dev_ino(__entry), | ||
| 1091 | __entry->pgofs) | ||
| 1092 | ); | ||
| 1093 | |||
| 1094 | TRACE_EVENT_CONDITION(f2fs_lookup_extent_tree_end, | ||
| 1095 | |||
| 1096 | TP_PROTO(struct inode *inode, unsigned int pgofs, | ||
| 1097 | struct extent_node *en), | ||
| 1098 | |||
| 1099 | TP_ARGS(inode, pgofs, en), | ||
| 1100 | |||
| 1101 | TP_CONDITION(en), | ||
| 1102 | |||
| 1103 | TP_STRUCT__entry( | ||
| 1104 | __field(dev_t, dev) | ||
| 1105 | __field(ino_t, ino) | ||
| 1106 | __field(unsigned int, pgofs) | ||
| 1107 | __field(unsigned int, fofs) | ||
| 1108 | __field(u32, blk) | ||
| 1109 | __field(unsigned int, len) | ||
| 1110 | ), | ||
| 1111 | |||
| 1112 | TP_fast_assign( | ||
| 1113 | __entry->dev = inode->i_sb->s_dev; | ||
| 1114 | __entry->ino = inode->i_ino; | ||
| 1115 | __entry->pgofs = pgofs; | ||
| 1116 | __entry->fofs = en->ei.fofs; | ||
| 1117 | __entry->blk = en->ei.blk; | ||
| 1118 | __entry->len = en->ei.len; | ||
| 1119 | ), | ||
| 1120 | |||
| 1121 | TP_printk("dev = (%d,%d), ino = %lu, pgofs = %u, " | ||
| 1122 | "ext_info(fofs: %u, blk: %u, len: %u)", | ||
| 1123 | show_dev_ino(__entry), | ||
| 1124 | __entry->pgofs, | ||
| 1125 | __entry->fofs, | ||
| 1126 | __entry->blk, | ||
| 1127 | __entry->len) | ||
| 1128 | ); | ||
| 1129 | |||
| 1130 | TRACE_EVENT(f2fs_update_extent_tree, | ||
| 1131 | |||
| 1132 | TP_PROTO(struct inode *inode, unsigned int pgofs, block_t blkaddr), | ||
| 1133 | |||
| 1134 | TP_ARGS(inode, pgofs, blkaddr), | ||
| 1135 | |||
| 1136 | TP_STRUCT__entry( | ||
| 1137 | __field(dev_t, dev) | ||
| 1138 | __field(ino_t, ino) | ||
| 1139 | __field(unsigned int, pgofs) | ||
| 1140 | __field(u32, blk) | ||
| 1141 | ), | ||
| 1142 | |||
| 1143 | TP_fast_assign( | ||
| 1144 | __entry->dev = inode->i_sb->s_dev; | ||
| 1145 | __entry->ino = inode->i_ino; | ||
| 1146 | __entry->pgofs = pgofs; | ||
| 1147 | __entry->blk = blkaddr; | ||
| 1148 | ), | ||
| 1149 | |||
| 1150 | TP_printk("dev = (%d,%d), ino = %lu, pgofs = %u, blkaddr = %u", | ||
| 1151 | show_dev_ino(__entry), | ||
| 1152 | __entry->pgofs, | ||
| 1153 | __entry->blk) | ||
| 1154 | ); | ||
| 1155 | |||
| 1156 | TRACE_EVENT(f2fs_shrink_extent_tree, | ||
| 1157 | |||
| 1158 | TP_PROTO(struct f2fs_sb_info *sbi, unsigned int node_cnt, | ||
| 1159 | unsigned int tree_cnt), | ||
| 1160 | |||
| 1161 | TP_ARGS(sbi, node_cnt, tree_cnt), | ||
| 1162 | |||
| 1163 | TP_STRUCT__entry( | ||
| 1164 | __field(dev_t, dev) | ||
| 1165 | __field(unsigned int, node_cnt) | ||
| 1166 | __field(unsigned int, tree_cnt) | ||
| 1167 | ), | ||
| 1168 | |||
| 1169 | TP_fast_assign( | ||
| 1170 | __entry->dev = sbi->sb->s_dev; | ||
| 1171 | __entry->node_cnt = node_cnt; | ||
| 1172 | __entry->tree_cnt = tree_cnt; | ||
| 1173 | ), | ||
| 1174 | |||
| 1175 | TP_printk("dev = (%d,%d), shrunk: node_cnt = %u, tree_cnt = %u", | ||
| 1176 | show_dev(__entry), | ||
| 1177 | __entry->node_cnt, | ||
| 1178 | __entry->tree_cnt) | ||
| 1179 | ); | ||
| 1180 | |||
| 1181 | TRACE_EVENT(f2fs_destroy_extent_tree, | ||
| 1182 | |||
| 1183 | TP_PROTO(struct inode *inode, unsigned int node_cnt), | ||
| 1184 | |||
| 1185 | TP_ARGS(inode, node_cnt), | ||
| 1186 | |||
| 1187 | TP_STRUCT__entry( | ||
| 1188 | __field(dev_t, dev) | ||
| 1189 | __field(ino_t, ino) | ||
| 1190 | __field(unsigned int, node_cnt) | ||
| 1191 | ), | ||
| 1192 | |||
| 1193 | TP_fast_assign( | ||
| 1194 | __entry->dev = inode->i_sb->s_dev; | ||
| 1195 | __entry->ino = inode->i_ino; | ||
| 1196 | __entry->node_cnt = node_cnt; | ||
| 1197 | ), | ||
| 1198 | |||
| 1199 | TP_printk("dev = (%d,%d), ino = %lu, destroyed: node_cnt = %u", | ||
| 1200 | show_dev_ino(__entry), | ||
| 1201 | __entry->node_cnt) | ||
| 1202 | ); | ||
| 1203 | |||
| 1044 | #endif /* _TRACE_F2FS_H */ | 1204 | #endif /* _TRACE_F2FS_H */ |
| 1045 | 1205 | ||
| 1046 | /* This part must be outside protection */ | 1206 | /* This part must be outside protection */ |
