.. | .. |
---|
17 | 17 | struct ext4_map_blocks; |
---|
18 | 18 | struct extent_status; |
---|
19 | 19 | struct ext4_fsmap; |
---|
| 20 | +struct partial_cluster; |
---|
20 | 21 | |
---|
21 | 22 | #define EXT4_I(inode) (container_of(inode, struct ext4_inode_info, vfs_inode)) |
---|
22 | 23 | |
---|
.. | .. |
---|
34 | 35 | { EXT4_MB_DELALLOC_RESERVED, "DELALLOC_RESV" }, \ |
---|
35 | 36 | { EXT4_MB_STREAM_ALLOC, "STREAM_ALLOC" }, \ |
---|
36 | 37 | { EXT4_MB_USE_ROOT_BLOCKS, "USE_ROOT_BLKS" }, \ |
---|
37 | | - { EXT4_MB_USE_RESERVED, "USE_RESV" }) |
---|
| 38 | + { EXT4_MB_USE_RESERVED, "USE_RESV" }, \ |
---|
| 39 | + { EXT4_MB_STRICT_CHECK, "STRICT_CHECK" }) |
---|
38 | 40 | |
---|
39 | 41 | #define show_map_flags(flags) __print_flags(flags, "|", \ |
---|
40 | 42 | { EXT4_GET_BLOCKS_CREATE, "CREATE" }, \ |
---|
.. | .. |
---|
44 | 46 | { EXT4_GET_BLOCKS_CONVERT, "CONVERT" }, \ |
---|
45 | 47 | { EXT4_GET_BLOCKS_METADATA_NOFAIL, "METADATA_NOFAIL" }, \ |
---|
46 | 48 | { EXT4_GET_BLOCKS_NO_NORMALIZE, "NO_NORMALIZE" }, \ |
---|
47 | | - { EXT4_GET_BLOCKS_KEEP_SIZE, "KEEP_SIZE" }, \ |
---|
48 | | - { EXT4_GET_BLOCKS_ZERO, "ZERO" }) |
---|
| 49 | + { EXT4_GET_BLOCKS_CONVERT_UNWRITTEN, "CONVERT_UNWRITTEN" }, \ |
---|
| 50 | + { EXT4_GET_BLOCKS_ZERO, "ZERO" }, \ |
---|
| 51 | + { EXT4_GET_BLOCKS_IO_SUBMIT, "IO_SUBMIT" }, \ |
---|
| 52 | + { EXT4_EX_NOCACHE, "EX_NOCACHE" }) |
---|
| 53 | + |
---|
| 54 | +/* |
---|
| 55 | + * __print_flags() requires that all enum values be wrapped in the |
---|
| 56 | + * TRACE_DEFINE_ENUM macro so that the enum value can be encoded in the ftrace |
---|
| 57 | + * ring buffer. |
---|
| 58 | + */ |
---|
| 59 | +TRACE_DEFINE_ENUM(BH_New); |
---|
| 60 | +TRACE_DEFINE_ENUM(BH_Mapped); |
---|
| 61 | +TRACE_DEFINE_ENUM(BH_Unwritten); |
---|
| 62 | +TRACE_DEFINE_ENUM(BH_Boundary); |
---|
49 | 63 | |
---|
50 | 64 | #define show_mflags(flags) __print_flags(flags, "", \ |
---|
51 | 65 | { EXT4_MAP_NEW, "N" }, \ |
---|
.. | .. |
---|
61 | 75 | { EXT4_FREE_BLOCKS_NOFREE_FIRST_CLUSTER,"1ST_CLUSTER" },\ |
---|
62 | 76 | { EXT4_FREE_BLOCKS_NOFREE_LAST_CLUSTER, "LAST_CLUSTER" }) |
---|
63 | 77 | |
---|
| 78 | +TRACE_DEFINE_ENUM(ES_WRITTEN_B); |
---|
| 79 | +TRACE_DEFINE_ENUM(ES_UNWRITTEN_B); |
---|
| 80 | +TRACE_DEFINE_ENUM(ES_DELAYED_B); |
---|
| 81 | +TRACE_DEFINE_ENUM(ES_HOLE_B); |
---|
| 82 | +TRACE_DEFINE_ENUM(ES_REFERENCED_B); |
---|
| 83 | + |
---|
64 | 84 | #define show_extent_status(status) __print_flags(status, "", \ |
---|
65 | 85 | { EXTENT_STATUS_WRITTEN, "W" }, \ |
---|
66 | 86 | { EXTENT_STATUS_UNWRITTEN, "U" }, \ |
---|
67 | 87 | { EXTENT_STATUS_DELAYED, "D" }, \ |
---|
68 | | - { EXTENT_STATUS_HOLE, "H" }) |
---|
| 88 | + { EXTENT_STATUS_HOLE, "H" }, \ |
---|
| 89 | + { EXTENT_STATUS_REFERENCED, "R" }) |
---|
69 | 90 | |
---|
70 | 91 | #define show_falloc_mode(mode) __print_flags(mode, "|", \ |
---|
71 | 92 | { FALLOC_FL_KEEP_SIZE, "KEEP_SIZE"}, \ |
---|
.. | .. |
---|
74 | 95 | { FALLOC_FL_COLLAPSE_RANGE, "COLLAPSE_RANGE"}, \ |
---|
75 | 96 | { FALLOC_FL_ZERO_RANGE, "ZERO_RANGE"}) |
---|
76 | 97 | |
---|
| 98 | +TRACE_DEFINE_ENUM(EXT4_FC_REASON_XATTR); |
---|
| 99 | +TRACE_DEFINE_ENUM(EXT4_FC_REASON_CROSS_RENAME); |
---|
| 100 | +TRACE_DEFINE_ENUM(EXT4_FC_REASON_JOURNAL_FLAG_CHANGE); |
---|
| 101 | +TRACE_DEFINE_ENUM(EXT4_FC_REASON_NOMEM); |
---|
| 102 | +TRACE_DEFINE_ENUM(EXT4_FC_REASON_SWAP_BOOT); |
---|
| 103 | +TRACE_DEFINE_ENUM(EXT4_FC_REASON_RESIZE); |
---|
| 104 | +TRACE_DEFINE_ENUM(EXT4_FC_REASON_RENAME_DIR); |
---|
| 105 | +TRACE_DEFINE_ENUM(EXT4_FC_REASON_FALLOC_RANGE); |
---|
| 106 | +TRACE_DEFINE_ENUM(EXT4_FC_REASON_INODE_JOURNAL_DATA); |
---|
| 107 | +TRACE_DEFINE_ENUM(EXT4_FC_REASON_MAX); |
---|
| 108 | + |
---|
| 109 | +#define show_fc_reason(reason) \ |
---|
| 110 | + __print_symbolic(reason, \ |
---|
| 111 | + { EXT4_FC_REASON_XATTR, "XATTR"}, \ |
---|
| 112 | + { EXT4_FC_REASON_CROSS_RENAME, "CROSS_RENAME"}, \ |
---|
| 113 | + { EXT4_FC_REASON_JOURNAL_FLAG_CHANGE, "JOURNAL_FLAG_CHANGE"}, \ |
---|
| 114 | + { EXT4_FC_REASON_NOMEM, "NO_MEM"}, \ |
---|
| 115 | + { EXT4_FC_REASON_SWAP_BOOT, "SWAP_BOOT"}, \ |
---|
| 116 | + { EXT4_FC_REASON_RESIZE, "RESIZE"}, \ |
---|
| 117 | + { EXT4_FC_REASON_RENAME_DIR, "RENAME_DIR"}, \ |
---|
| 118 | + { EXT4_FC_REASON_FALLOC_RANGE, "FALLOC_RANGE"}, \ |
---|
| 119 | + { EXT4_FC_REASON_INODE_JOURNAL_DATA, "INODE_JOURNAL_DATA"}) |
---|
77 | 120 | |
---|
78 | 121 | TRACE_EVENT(ext4_other_inode_update_time, |
---|
79 | 122 | TP_PROTO(struct inode *inode, ino_t orig_ino), |
---|
.. | .. |
---|
725 | 768 | ); |
---|
726 | 769 | |
---|
727 | 770 | TRACE_EVENT(ext4_discard_preallocations, |
---|
728 | | - TP_PROTO(struct inode *inode), |
---|
| 771 | + TP_PROTO(struct inode *inode, unsigned int len, unsigned int needed), |
---|
729 | 772 | |
---|
730 | | - TP_ARGS(inode), |
---|
| 773 | + TP_ARGS(inode, len, needed), |
---|
731 | 774 | |
---|
732 | 775 | TP_STRUCT__entry( |
---|
733 | | - __field( dev_t, dev ) |
---|
734 | | - __field( ino_t, ino ) |
---|
| 776 | + __field( dev_t, dev ) |
---|
| 777 | + __field( ino_t, ino ) |
---|
| 778 | + __field( unsigned int, len ) |
---|
| 779 | + __field( unsigned int, needed ) |
---|
735 | 780 | |
---|
736 | 781 | ), |
---|
737 | 782 | |
---|
738 | 783 | TP_fast_assign( |
---|
739 | 784 | __entry->dev = inode->i_sb->s_dev; |
---|
740 | 785 | __entry->ino = inode->i_ino; |
---|
| 786 | + __entry->len = len; |
---|
| 787 | + __entry->needed = needed; |
---|
741 | 788 | ), |
---|
742 | 789 | |
---|
743 | | - TP_printk("dev %d,%d ino %lu", |
---|
| 790 | + TP_printk("dev %d,%d ino %lu len: %u needed %u", |
---|
744 | 791 | MAJOR(__entry->dev), MINOR(__entry->dev), |
---|
745 | | - (unsigned long) __entry->ino) |
---|
| 792 | + (unsigned long) __entry->ino, __entry->len, |
---|
| 793 | + __entry->needed) |
---|
746 | 794 | ); |
---|
747 | 795 | |
---|
748 | 796 | TRACE_EVENT(ext4_mb_discard_preallocations, |
---|
.. | .. |
---|
1291 | 1339 | TP_ARGS(sb, group) |
---|
1292 | 1340 | ); |
---|
1293 | 1341 | |
---|
1294 | | -DEFINE_EVENT(ext4__bitmap_load, ext4_read_block_bitmap_load, |
---|
| 1342 | +DEFINE_EVENT(ext4__bitmap_load, ext4_load_inode_bitmap, |
---|
1295 | 1343 | |
---|
1296 | 1344 | TP_PROTO(struct super_block *sb, unsigned long group), |
---|
1297 | 1345 | |
---|
1298 | 1346 | TP_ARGS(sb, group) |
---|
1299 | 1347 | ); |
---|
1300 | 1348 | |
---|
1301 | | -DEFINE_EVENT(ext4__bitmap_load, ext4_load_inode_bitmap, |
---|
| 1349 | +TRACE_EVENT(ext4_read_block_bitmap_load, |
---|
| 1350 | + TP_PROTO(struct super_block *sb, unsigned long group, bool prefetch), |
---|
1302 | 1351 | |
---|
1303 | | - TP_PROTO(struct super_block *sb, unsigned long group), |
---|
| 1352 | + TP_ARGS(sb, group, prefetch), |
---|
1304 | 1353 | |
---|
1305 | | - TP_ARGS(sb, group) |
---|
| 1354 | + TP_STRUCT__entry( |
---|
| 1355 | + __field( dev_t, dev ) |
---|
| 1356 | + __field( __u32, group ) |
---|
| 1357 | + __field( bool, prefetch ) |
---|
| 1358 | + |
---|
| 1359 | + ), |
---|
| 1360 | + |
---|
| 1361 | + TP_fast_assign( |
---|
| 1362 | + __entry->dev = sb->s_dev; |
---|
| 1363 | + __entry->group = group; |
---|
| 1364 | + __entry->prefetch = prefetch; |
---|
| 1365 | + ), |
---|
| 1366 | + |
---|
| 1367 | + TP_printk("dev %d,%d group %u prefetch %d", |
---|
| 1368 | + MAJOR(__entry->dev), MINOR(__entry->dev), |
---|
| 1369 | + __entry->group, __entry->prefetch) |
---|
1306 | 1370 | ); |
---|
1307 | 1371 | |
---|
1308 | 1372 | TRACE_EVENT(ext4_direct_IO_enter, |
---|
.. | .. |
---|
1724 | 1788 | ); |
---|
1725 | 1789 | |
---|
1726 | 1790 | TRACE_EVENT(ext4_load_inode, |
---|
1727 | | - TP_PROTO(struct inode *inode), |
---|
| 1791 | + TP_PROTO(struct super_block *sb, unsigned long ino), |
---|
1728 | 1792 | |
---|
1729 | | - TP_ARGS(inode), |
---|
| 1793 | + TP_ARGS(sb, ino), |
---|
1730 | 1794 | |
---|
1731 | 1795 | TP_STRUCT__entry( |
---|
1732 | 1796 | __field( dev_t, dev ) |
---|
.. | .. |
---|
1734 | 1798 | ), |
---|
1735 | 1799 | |
---|
1736 | 1800 | TP_fast_assign( |
---|
1737 | | - __entry->dev = inode->i_sb->s_dev; |
---|
1738 | | - __entry->ino = inode->i_ino; |
---|
| 1801 | + __entry->dev = sb->s_dev; |
---|
| 1802 | + __entry->ino = ino; |
---|
1739 | 1803 | ), |
---|
1740 | 1804 | |
---|
1741 | 1805 | TP_printk("dev %d,%d ino %ld", |
---|
.. | .. |
---|
1745 | 1809 | |
---|
1746 | 1810 | TRACE_EVENT(ext4_journal_start, |
---|
1747 | 1811 | TP_PROTO(struct super_block *sb, int blocks, int rsv_blocks, |
---|
1748 | | - unsigned long IP), |
---|
| 1812 | + int revoke_creds, unsigned long IP), |
---|
1749 | 1813 | |
---|
1750 | | - TP_ARGS(sb, blocks, rsv_blocks, IP), |
---|
| 1814 | + TP_ARGS(sb, blocks, rsv_blocks, revoke_creds, IP), |
---|
1751 | 1815 | |
---|
1752 | 1816 | TP_STRUCT__entry( |
---|
1753 | 1817 | __field( dev_t, dev ) |
---|
1754 | 1818 | __field(unsigned long, ip ) |
---|
1755 | 1819 | __field( int, blocks ) |
---|
1756 | 1820 | __field( int, rsv_blocks ) |
---|
| 1821 | + __field( int, revoke_creds ) |
---|
1757 | 1822 | ), |
---|
1758 | 1823 | |
---|
1759 | 1824 | TP_fast_assign( |
---|
.. | .. |
---|
1761 | 1826 | __entry->ip = IP; |
---|
1762 | 1827 | __entry->blocks = blocks; |
---|
1763 | 1828 | __entry->rsv_blocks = rsv_blocks; |
---|
| 1829 | + __entry->revoke_creds = revoke_creds; |
---|
1764 | 1830 | ), |
---|
1765 | 1831 | |
---|
1766 | | - TP_printk("dev %d,%d blocks, %d rsv_blocks, %d caller %pS", |
---|
1767 | | - MAJOR(__entry->dev), MINOR(__entry->dev), |
---|
1768 | | - __entry->blocks, __entry->rsv_blocks, (void *)__entry->ip) |
---|
| 1832 | + TP_printk("dev %d,%d blocks %d, rsv_blocks %d, revoke_creds %d, " |
---|
| 1833 | + "caller %pS", MAJOR(__entry->dev), MINOR(__entry->dev), |
---|
| 1834 | + __entry->blocks, __entry->rsv_blocks, __entry->revoke_creds, |
---|
| 1835 | + (void *)__entry->ip) |
---|
1769 | 1836 | ); |
---|
1770 | 1837 | |
---|
1771 | 1838 | TRACE_EVENT(ext4_journal_start_reserved, |
---|
.. | .. |
---|
2055 | 2122 | ); |
---|
2056 | 2123 | |
---|
2057 | 2124 | TRACE_EVENT(ext4_remove_blocks, |
---|
2058 | | - TP_PROTO(struct inode *inode, struct ext4_extent *ex, |
---|
2059 | | - ext4_lblk_t from, ext4_fsblk_t to, |
---|
2060 | | - long long partial_cluster), |
---|
| 2125 | + TP_PROTO(struct inode *inode, struct ext4_extent *ex, |
---|
| 2126 | + ext4_lblk_t from, ext4_fsblk_t to, |
---|
| 2127 | + struct partial_cluster *pc), |
---|
2061 | 2128 | |
---|
2062 | | - TP_ARGS(inode, ex, from, to, partial_cluster), |
---|
| 2129 | + TP_ARGS(inode, ex, from, to, pc), |
---|
2063 | 2130 | |
---|
2064 | 2131 | TP_STRUCT__entry( |
---|
2065 | 2132 | __field( dev_t, dev ) |
---|
2066 | 2133 | __field( ino_t, ino ) |
---|
2067 | 2134 | __field( ext4_lblk_t, from ) |
---|
2068 | 2135 | __field( ext4_lblk_t, to ) |
---|
2069 | | - __field( long long, partial ) |
---|
2070 | 2136 | __field( ext4_fsblk_t, ee_pblk ) |
---|
2071 | 2137 | __field( ext4_lblk_t, ee_lblk ) |
---|
2072 | 2138 | __field( unsigned short, ee_len ) |
---|
| 2139 | + __field( ext4_fsblk_t, pc_pclu ) |
---|
| 2140 | + __field( ext4_lblk_t, pc_lblk ) |
---|
| 2141 | + __field( int, pc_state) |
---|
2073 | 2142 | ), |
---|
2074 | 2143 | |
---|
2075 | 2144 | TP_fast_assign( |
---|
.. | .. |
---|
2077 | 2146 | __entry->ino = inode->i_ino; |
---|
2078 | 2147 | __entry->from = from; |
---|
2079 | 2148 | __entry->to = to; |
---|
2080 | | - __entry->partial = partial_cluster; |
---|
2081 | 2149 | __entry->ee_pblk = ext4_ext_pblock(ex); |
---|
2082 | 2150 | __entry->ee_lblk = le32_to_cpu(ex->ee_block); |
---|
2083 | 2151 | __entry->ee_len = ext4_ext_get_actual_len(ex); |
---|
| 2152 | + __entry->pc_pclu = pc->pclu; |
---|
| 2153 | + __entry->pc_lblk = pc->lblk; |
---|
| 2154 | + __entry->pc_state = pc->state; |
---|
2084 | 2155 | ), |
---|
2085 | 2156 | |
---|
2086 | 2157 | TP_printk("dev %d,%d ino %lu extent [%u(%llu), %u]" |
---|
2087 | | - "from %u to %u partial_cluster %lld", |
---|
| 2158 | + "from %u to %u partial [pclu %lld lblk %u state %d]", |
---|
2088 | 2159 | MAJOR(__entry->dev), MINOR(__entry->dev), |
---|
2089 | 2160 | (unsigned long) __entry->ino, |
---|
2090 | 2161 | (unsigned) __entry->ee_lblk, |
---|
.. | .. |
---|
2092 | 2163 | (unsigned short) __entry->ee_len, |
---|
2093 | 2164 | (unsigned) __entry->from, |
---|
2094 | 2165 | (unsigned) __entry->to, |
---|
2095 | | - (long long) __entry->partial) |
---|
| 2166 | + (long long) __entry->pc_pclu, |
---|
| 2167 | + (unsigned int) __entry->pc_lblk, |
---|
| 2168 | + (int) __entry->pc_state) |
---|
2096 | 2169 | ); |
---|
2097 | 2170 | |
---|
2098 | 2171 | TRACE_EVENT(ext4_ext_rm_leaf, |
---|
2099 | 2172 | TP_PROTO(struct inode *inode, ext4_lblk_t start, |
---|
2100 | 2173 | struct ext4_extent *ex, |
---|
2101 | | - long long partial_cluster), |
---|
| 2174 | + struct partial_cluster *pc), |
---|
2102 | 2175 | |
---|
2103 | | - TP_ARGS(inode, start, ex, partial_cluster), |
---|
| 2176 | + TP_ARGS(inode, start, ex, pc), |
---|
2104 | 2177 | |
---|
2105 | 2178 | TP_STRUCT__entry( |
---|
2106 | 2179 | __field( dev_t, dev ) |
---|
2107 | 2180 | __field( ino_t, ino ) |
---|
2108 | | - __field( long long, partial ) |
---|
2109 | 2181 | __field( ext4_lblk_t, start ) |
---|
2110 | 2182 | __field( ext4_lblk_t, ee_lblk ) |
---|
2111 | 2183 | __field( ext4_fsblk_t, ee_pblk ) |
---|
2112 | 2184 | __field( short, ee_len ) |
---|
| 2185 | + __field( ext4_fsblk_t, pc_pclu ) |
---|
| 2186 | + __field( ext4_lblk_t, pc_lblk ) |
---|
| 2187 | + __field( int, pc_state) |
---|
2113 | 2188 | ), |
---|
2114 | 2189 | |
---|
2115 | 2190 | TP_fast_assign( |
---|
2116 | 2191 | __entry->dev = inode->i_sb->s_dev; |
---|
2117 | 2192 | __entry->ino = inode->i_ino; |
---|
2118 | | - __entry->partial = partial_cluster; |
---|
2119 | 2193 | __entry->start = start; |
---|
2120 | 2194 | __entry->ee_lblk = le32_to_cpu(ex->ee_block); |
---|
2121 | 2195 | __entry->ee_pblk = ext4_ext_pblock(ex); |
---|
2122 | 2196 | __entry->ee_len = ext4_ext_get_actual_len(ex); |
---|
| 2197 | + __entry->pc_pclu = pc->pclu; |
---|
| 2198 | + __entry->pc_lblk = pc->lblk; |
---|
| 2199 | + __entry->pc_state = pc->state; |
---|
2123 | 2200 | ), |
---|
2124 | 2201 | |
---|
2125 | 2202 | TP_printk("dev %d,%d ino %lu start_lblk %u last_extent [%u(%llu), %u]" |
---|
2126 | | - "partial_cluster %lld", |
---|
| 2203 | + "partial [pclu %lld lblk %u state %d]", |
---|
2127 | 2204 | MAJOR(__entry->dev), MINOR(__entry->dev), |
---|
2128 | 2205 | (unsigned long) __entry->ino, |
---|
2129 | 2206 | (unsigned) __entry->start, |
---|
2130 | 2207 | (unsigned) __entry->ee_lblk, |
---|
2131 | 2208 | (unsigned long long) __entry->ee_pblk, |
---|
2132 | 2209 | (unsigned short) __entry->ee_len, |
---|
2133 | | - (long long) __entry->partial) |
---|
| 2210 | + (long long) __entry->pc_pclu, |
---|
| 2211 | + (unsigned int) __entry->pc_lblk, |
---|
| 2212 | + (int) __entry->pc_state) |
---|
2134 | 2213 | ); |
---|
2135 | 2214 | |
---|
2136 | 2215 | TRACE_EVENT(ext4_ext_rm_idx, |
---|
.. | .. |
---|
2188 | 2267 | |
---|
2189 | 2268 | TRACE_EVENT(ext4_ext_remove_space_done, |
---|
2190 | 2269 | TP_PROTO(struct inode *inode, ext4_lblk_t start, ext4_lblk_t end, |
---|
2191 | | - int depth, long long partial, __le16 eh_entries), |
---|
| 2270 | + int depth, struct partial_cluster *pc, __le16 eh_entries), |
---|
2192 | 2271 | |
---|
2193 | | - TP_ARGS(inode, start, end, depth, partial, eh_entries), |
---|
| 2272 | + TP_ARGS(inode, start, end, depth, pc, eh_entries), |
---|
2194 | 2273 | |
---|
2195 | 2274 | TP_STRUCT__entry( |
---|
2196 | 2275 | __field( dev_t, dev ) |
---|
.. | .. |
---|
2198 | 2277 | __field( ext4_lblk_t, start ) |
---|
2199 | 2278 | __field( ext4_lblk_t, end ) |
---|
2200 | 2279 | __field( int, depth ) |
---|
2201 | | - __field( long long, partial ) |
---|
| 2280 | + __field( ext4_fsblk_t, pc_pclu ) |
---|
| 2281 | + __field( ext4_lblk_t, pc_lblk ) |
---|
| 2282 | + __field( int, pc_state ) |
---|
2202 | 2283 | __field( unsigned short, eh_entries ) |
---|
2203 | 2284 | ), |
---|
2204 | 2285 | |
---|
.. | .. |
---|
2208 | 2289 | __entry->start = start; |
---|
2209 | 2290 | __entry->end = end; |
---|
2210 | 2291 | __entry->depth = depth; |
---|
2211 | | - __entry->partial = partial; |
---|
| 2292 | + __entry->pc_pclu = pc->pclu; |
---|
| 2293 | + __entry->pc_lblk = pc->lblk; |
---|
| 2294 | + __entry->pc_state = pc->state; |
---|
2212 | 2295 | __entry->eh_entries = le16_to_cpu(eh_entries); |
---|
2213 | 2296 | ), |
---|
2214 | 2297 | |
---|
2215 | | - TP_printk("dev %d,%d ino %lu since %u end %u depth %d partial %lld " |
---|
| 2298 | + TP_printk("dev %d,%d ino %lu since %u end %u depth %d " |
---|
| 2299 | + "partial [pclu %lld lblk %u state %d] " |
---|
2216 | 2300 | "remaining_entries %u", |
---|
2217 | 2301 | MAJOR(__entry->dev), MINOR(__entry->dev), |
---|
2218 | 2302 | (unsigned long) __entry->ino, |
---|
2219 | 2303 | (unsigned) __entry->start, |
---|
2220 | 2304 | (unsigned) __entry->end, |
---|
2221 | 2305 | __entry->depth, |
---|
2222 | | - (long long) __entry->partial, |
---|
| 2306 | + (long long) __entry->pc_pclu, |
---|
| 2307 | + (unsigned int) __entry->pc_lblk, |
---|
| 2308 | + (int) __entry->pc_state, |
---|
2223 | 2309 | (unsigned short) __entry->eh_entries) |
---|
2224 | 2310 | ); |
---|
2225 | 2311 | |
---|
.. | .. |
---|
2242 | 2328 | __entry->ino = inode->i_ino; |
---|
2243 | 2329 | __entry->lblk = es->es_lblk; |
---|
2244 | 2330 | __entry->len = es->es_len; |
---|
2245 | | - __entry->pblk = ext4_es_pblock(es); |
---|
| 2331 | + __entry->pblk = ext4_es_show_pblock(es); |
---|
2246 | 2332 | __entry->status = ext4_es_status(es); |
---|
2247 | 2333 | ), |
---|
2248 | 2334 | |
---|
.. | .. |
---|
2290 | 2376 | __entry->lblk, __entry->len) |
---|
2291 | 2377 | ); |
---|
2292 | 2378 | |
---|
2293 | | -TRACE_EVENT(ext4_es_find_delayed_extent_range_enter, |
---|
| 2379 | +TRACE_EVENT(ext4_es_find_extent_range_enter, |
---|
2294 | 2380 | TP_PROTO(struct inode *inode, ext4_lblk_t lblk), |
---|
2295 | 2381 | |
---|
2296 | 2382 | TP_ARGS(inode, lblk), |
---|
.. | .. |
---|
2312 | 2398 | (unsigned long) __entry->ino, __entry->lblk) |
---|
2313 | 2399 | ); |
---|
2314 | 2400 | |
---|
2315 | | -TRACE_EVENT(ext4_es_find_delayed_extent_range_exit, |
---|
| 2401 | +TRACE_EVENT(ext4_es_find_extent_range_exit, |
---|
2316 | 2402 | TP_PROTO(struct inode *inode, struct extent_status *es), |
---|
2317 | 2403 | |
---|
2318 | 2404 | TP_ARGS(inode, es), |
---|
.. | .. |
---|
2331 | 2417 | __entry->ino = inode->i_ino; |
---|
2332 | 2418 | __entry->lblk = es->es_lblk; |
---|
2333 | 2419 | __entry->len = es->es_len; |
---|
2334 | | - __entry->pblk = ext4_es_pblock(es); |
---|
| 2420 | + __entry->pblk = ext4_es_show_pblock(es); |
---|
2335 | 2421 | __entry->status = ext4_es_status(es); |
---|
2336 | 2422 | ), |
---|
2337 | 2423 | |
---|
.. | .. |
---|
2385 | 2471 | __entry->ino = inode->i_ino; |
---|
2386 | 2472 | __entry->lblk = es->es_lblk; |
---|
2387 | 2473 | __entry->len = es->es_len; |
---|
2388 | | - __entry->pblk = ext4_es_pblock(es); |
---|
| 2474 | + __entry->pblk = ext4_es_show_pblock(es); |
---|
2389 | 2475 | __entry->status = ext4_es_status(es); |
---|
2390 | 2476 | __entry->found = found; |
---|
2391 | 2477 | ), |
---|
.. | .. |
---|
2532 | 2618 | __entry->scan_time, __entry->nr_skipped, __entry->retried) |
---|
2533 | 2619 | ); |
---|
2534 | 2620 | |
---|
| 2621 | +TRACE_EVENT(ext4_es_insert_delayed_block, |
---|
| 2622 | + TP_PROTO(struct inode *inode, struct extent_status *es, |
---|
| 2623 | + bool allocated), |
---|
| 2624 | + |
---|
| 2625 | + TP_ARGS(inode, es, allocated), |
---|
| 2626 | + |
---|
| 2627 | + TP_STRUCT__entry( |
---|
| 2628 | + __field( dev_t, dev ) |
---|
| 2629 | + __field( ino_t, ino ) |
---|
| 2630 | + __field( ext4_lblk_t, lblk ) |
---|
| 2631 | + __field( ext4_lblk_t, len ) |
---|
| 2632 | + __field( ext4_fsblk_t, pblk ) |
---|
| 2633 | + __field( char, status ) |
---|
| 2634 | + __field( bool, allocated ) |
---|
| 2635 | + ), |
---|
| 2636 | + |
---|
| 2637 | + TP_fast_assign( |
---|
| 2638 | + __entry->dev = inode->i_sb->s_dev; |
---|
| 2639 | + __entry->ino = inode->i_ino; |
---|
| 2640 | + __entry->lblk = es->es_lblk; |
---|
| 2641 | + __entry->len = es->es_len; |
---|
| 2642 | + __entry->pblk = ext4_es_show_pblock(es); |
---|
| 2643 | + __entry->status = ext4_es_status(es); |
---|
| 2644 | + __entry->allocated = allocated; |
---|
| 2645 | + ), |
---|
| 2646 | + |
---|
| 2647 | + TP_printk("dev %d,%d ino %lu es [%u/%u) mapped %llu status %s " |
---|
| 2648 | + "allocated %d", |
---|
| 2649 | + MAJOR(__entry->dev), MINOR(__entry->dev), |
---|
| 2650 | + (unsigned long) __entry->ino, |
---|
| 2651 | + __entry->lblk, __entry->len, |
---|
| 2652 | + __entry->pblk, show_extent_status(__entry->status), |
---|
| 2653 | + __entry->allocated) |
---|
| 2654 | +); |
---|
| 2655 | + |
---|
2535 | 2656 | /* fsmap traces */ |
---|
2536 | 2657 | DECLARE_EVENT_CLASS(ext4_fsmap_class, |
---|
2537 | 2658 | TP_PROTO(struct super_block *sb, u32 keydev, u32 agno, u64 bno, u64 len, |
---|
.. | .. |
---|
2648 | 2769 | __entry->function, __entry->line) |
---|
2649 | 2770 | ); |
---|
2650 | 2771 | |
---|
| 2772 | +TRACE_EVENT(ext4_prefetch_bitmaps, |
---|
| 2773 | + TP_PROTO(struct super_block *sb, ext4_group_t group, |
---|
| 2774 | + ext4_group_t next, unsigned int prefetch_ios), |
---|
| 2775 | + |
---|
| 2776 | + TP_ARGS(sb, group, next, prefetch_ios), |
---|
| 2777 | + |
---|
| 2778 | + TP_STRUCT__entry( |
---|
| 2779 | + __field( dev_t, dev ) |
---|
| 2780 | + __field( __u32, group ) |
---|
| 2781 | + __field( __u32, next ) |
---|
| 2782 | + __field( __u32, ios ) |
---|
| 2783 | + ), |
---|
| 2784 | + |
---|
| 2785 | + TP_fast_assign( |
---|
| 2786 | + __entry->dev = sb->s_dev; |
---|
| 2787 | + __entry->group = group; |
---|
| 2788 | + __entry->next = next; |
---|
| 2789 | + __entry->ios = prefetch_ios; |
---|
| 2790 | + ), |
---|
| 2791 | + |
---|
| 2792 | + TP_printk("dev %d,%d group %u next %u ios %u", |
---|
| 2793 | + MAJOR(__entry->dev), MINOR(__entry->dev), |
---|
| 2794 | + __entry->group, __entry->next, __entry->ios) |
---|
| 2795 | +); |
---|
| 2796 | + |
---|
| 2797 | +TRACE_EVENT(ext4_lazy_itable_init, |
---|
| 2798 | + TP_PROTO(struct super_block *sb, ext4_group_t group), |
---|
| 2799 | + |
---|
| 2800 | + TP_ARGS(sb, group), |
---|
| 2801 | + |
---|
| 2802 | + TP_STRUCT__entry( |
---|
| 2803 | + __field( dev_t, dev ) |
---|
| 2804 | + __field( __u32, group ) |
---|
| 2805 | + ), |
---|
| 2806 | + |
---|
| 2807 | + TP_fast_assign( |
---|
| 2808 | + __entry->dev = sb->s_dev; |
---|
| 2809 | + __entry->group = group; |
---|
| 2810 | + ), |
---|
| 2811 | + |
---|
| 2812 | + TP_printk("dev %d,%d group %u", |
---|
| 2813 | + MAJOR(__entry->dev), MINOR(__entry->dev), __entry->group) |
---|
| 2814 | +); |
---|
| 2815 | + |
---|
| 2816 | +TRACE_EVENT(ext4_fc_replay_scan, |
---|
| 2817 | + TP_PROTO(struct super_block *sb, int error, int off), |
---|
| 2818 | + |
---|
| 2819 | + TP_ARGS(sb, error, off), |
---|
| 2820 | + |
---|
| 2821 | + TP_STRUCT__entry( |
---|
| 2822 | + __field(dev_t, dev) |
---|
| 2823 | + __field(int, error) |
---|
| 2824 | + __field(int, off) |
---|
| 2825 | + ), |
---|
| 2826 | + |
---|
| 2827 | + TP_fast_assign( |
---|
| 2828 | + __entry->dev = sb->s_dev; |
---|
| 2829 | + __entry->error = error; |
---|
| 2830 | + __entry->off = off; |
---|
| 2831 | + ), |
---|
| 2832 | + |
---|
| 2833 | + TP_printk("FC scan pass on dev %d,%d: error %d, off %d", |
---|
| 2834 | + MAJOR(__entry->dev), MINOR(__entry->dev), |
---|
| 2835 | + __entry->error, __entry->off) |
---|
| 2836 | +); |
---|
| 2837 | + |
---|
| 2838 | +TRACE_EVENT(ext4_fc_replay, |
---|
| 2839 | + TP_PROTO(struct super_block *sb, int tag, int ino, int priv1, int priv2), |
---|
| 2840 | + |
---|
| 2841 | + TP_ARGS(sb, tag, ino, priv1, priv2), |
---|
| 2842 | + |
---|
| 2843 | + TP_STRUCT__entry( |
---|
| 2844 | + __field(dev_t, dev) |
---|
| 2845 | + __field(int, tag) |
---|
| 2846 | + __field(int, ino) |
---|
| 2847 | + __field(int, priv1) |
---|
| 2848 | + __field(int, priv2) |
---|
| 2849 | + ), |
---|
| 2850 | + |
---|
| 2851 | + TP_fast_assign( |
---|
| 2852 | + __entry->dev = sb->s_dev; |
---|
| 2853 | + __entry->tag = tag; |
---|
| 2854 | + __entry->ino = ino; |
---|
| 2855 | + __entry->priv1 = priv1; |
---|
| 2856 | + __entry->priv2 = priv2; |
---|
| 2857 | + ), |
---|
| 2858 | + |
---|
| 2859 | + TP_printk("FC Replay %d,%d: tag %d, ino %d, data1 %d, data2 %d", |
---|
| 2860 | + MAJOR(__entry->dev), MINOR(__entry->dev), |
---|
| 2861 | + __entry->tag, __entry->ino, __entry->priv1, __entry->priv2) |
---|
| 2862 | +); |
---|
| 2863 | + |
---|
| 2864 | +TRACE_EVENT(ext4_fc_commit_start, |
---|
| 2865 | + TP_PROTO(struct super_block *sb), |
---|
| 2866 | + |
---|
| 2867 | + TP_ARGS(sb), |
---|
| 2868 | + |
---|
| 2869 | + TP_STRUCT__entry( |
---|
| 2870 | + __field(dev_t, dev) |
---|
| 2871 | + ), |
---|
| 2872 | + |
---|
| 2873 | + TP_fast_assign( |
---|
| 2874 | + __entry->dev = sb->s_dev; |
---|
| 2875 | + ), |
---|
| 2876 | + |
---|
| 2877 | + TP_printk("fast_commit started on dev %d,%d", |
---|
| 2878 | + MAJOR(__entry->dev), MINOR(__entry->dev)) |
---|
| 2879 | +); |
---|
| 2880 | + |
---|
| 2881 | +TRACE_EVENT(ext4_fc_commit_stop, |
---|
| 2882 | + TP_PROTO(struct super_block *sb, int nblks, int reason), |
---|
| 2883 | + |
---|
| 2884 | + TP_ARGS(sb, nblks, reason), |
---|
| 2885 | + |
---|
| 2886 | + TP_STRUCT__entry( |
---|
| 2887 | + __field(dev_t, dev) |
---|
| 2888 | + __field(int, nblks) |
---|
| 2889 | + __field(int, reason) |
---|
| 2890 | + __field(int, num_fc) |
---|
| 2891 | + __field(int, num_fc_ineligible) |
---|
| 2892 | + __field(int, nblks_agg) |
---|
| 2893 | + ), |
---|
| 2894 | + |
---|
| 2895 | + TP_fast_assign( |
---|
| 2896 | + __entry->dev = sb->s_dev; |
---|
| 2897 | + __entry->nblks = nblks; |
---|
| 2898 | + __entry->reason = reason; |
---|
| 2899 | + __entry->num_fc = EXT4_SB(sb)->s_fc_stats.fc_num_commits; |
---|
| 2900 | + __entry->num_fc_ineligible = |
---|
| 2901 | + EXT4_SB(sb)->s_fc_stats.fc_ineligible_commits; |
---|
| 2902 | + __entry->nblks_agg = EXT4_SB(sb)->s_fc_stats.fc_numblks; |
---|
| 2903 | + ), |
---|
| 2904 | + |
---|
| 2905 | + TP_printk("fc on [%d,%d] nblks %d, reason %d, fc = %d, ineligible = %d, agg_nblks %d", |
---|
| 2906 | + MAJOR(__entry->dev), MINOR(__entry->dev), |
---|
| 2907 | + __entry->nblks, __entry->reason, __entry->num_fc, |
---|
| 2908 | + __entry->num_fc_ineligible, __entry->nblks_agg) |
---|
| 2909 | +); |
---|
| 2910 | + |
---|
| 2911 | +#define FC_REASON_NAME_STAT(reason) \ |
---|
| 2912 | + show_fc_reason(reason), \ |
---|
| 2913 | + __entry->fc_ineligible_rc[reason] |
---|
| 2914 | + |
---|
| 2915 | +TRACE_EVENT(ext4_fc_stats, |
---|
| 2916 | + TP_PROTO(struct super_block *sb), |
---|
| 2917 | + |
---|
| 2918 | + TP_ARGS(sb), |
---|
| 2919 | + |
---|
| 2920 | + TP_STRUCT__entry( |
---|
| 2921 | + __field(dev_t, dev) |
---|
| 2922 | + __array(unsigned int, fc_ineligible_rc, EXT4_FC_REASON_MAX) |
---|
| 2923 | + __field(unsigned long, fc_commits) |
---|
| 2924 | + __field(unsigned long, fc_ineligible_commits) |
---|
| 2925 | + __field(unsigned long, fc_numblks) |
---|
| 2926 | + ), |
---|
| 2927 | + |
---|
| 2928 | + TP_fast_assign( |
---|
| 2929 | + int i; |
---|
| 2930 | + |
---|
| 2931 | + __entry->dev = sb->s_dev; |
---|
| 2932 | + for (i = 0; i < EXT4_FC_REASON_MAX; i++) { |
---|
| 2933 | + __entry->fc_ineligible_rc[i] = |
---|
| 2934 | + EXT4_SB(sb)->s_fc_stats.fc_ineligible_reason_count[i]; |
---|
| 2935 | + } |
---|
| 2936 | + __entry->fc_commits = EXT4_SB(sb)->s_fc_stats.fc_num_commits; |
---|
| 2937 | + __entry->fc_ineligible_commits = |
---|
| 2938 | + EXT4_SB(sb)->s_fc_stats.fc_ineligible_commits; |
---|
| 2939 | + __entry->fc_numblks = EXT4_SB(sb)->s_fc_stats.fc_numblks; |
---|
| 2940 | + ), |
---|
| 2941 | + |
---|
| 2942 | + TP_printk("dev %d,%d fc ineligible reasons:\n" |
---|
| 2943 | + "%s:%u, %s:%u, %s:%u, %s:%u, %s:%u, %s:%u, %s:%u, %s:%u, %s:%u " |
---|
| 2944 | + "num_commits:%lu, ineligible: %lu, numblks: %lu", |
---|
| 2945 | + MAJOR(__entry->dev), MINOR(__entry->dev), |
---|
| 2946 | + FC_REASON_NAME_STAT(EXT4_FC_REASON_XATTR), |
---|
| 2947 | + FC_REASON_NAME_STAT(EXT4_FC_REASON_CROSS_RENAME), |
---|
| 2948 | + FC_REASON_NAME_STAT(EXT4_FC_REASON_JOURNAL_FLAG_CHANGE), |
---|
| 2949 | + FC_REASON_NAME_STAT(EXT4_FC_REASON_NOMEM), |
---|
| 2950 | + FC_REASON_NAME_STAT(EXT4_FC_REASON_SWAP_BOOT), |
---|
| 2951 | + FC_REASON_NAME_STAT(EXT4_FC_REASON_RESIZE), |
---|
| 2952 | + FC_REASON_NAME_STAT(EXT4_FC_REASON_RENAME_DIR), |
---|
| 2953 | + FC_REASON_NAME_STAT(EXT4_FC_REASON_FALLOC_RANGE), |
---|
| 2954 | + FC_REASON_NAME_STAT(EXT4_FC_REASON_INODE_JOURNAL_DATA), |
---|
| 2955 | + __entry->fc_commits, __entry->fc_ineligible_commits, |
---|
| 2956 | + __entry->fc_numblks) |
---|
| 2957 | +); |
---|
| 2958 | + |
---|
| 2959 | +#define DEFINE_TRACE_DENTRY_EVENT(__type) \ |
---|
| 2960 | + TRACE_EVENT(ext4_fc_track_##__type, \ |
---|
| 2961 | + TP_PROTO(struct inode *inode, struct dentry *dentry, int ret), \ |
---|
| 2962 | + \ |
---|
| 2963 | + TP_ARGS(inode, dentry, ret), \ |
---|
| 2964 | + \ |
---|
| 2965 | + TP_STRUCT__entry( \ |
---|
| 2966 | + __field(dev_t, dev) \ |
---|
| 2967 | + __field(int, ino) \ |
---|
| 2968 | + __field(int, error) \ |
---|
| 2969 | + ), \ |
---|
| 2970 | + \ |
---|
| 2971 | + TP_fast_assign( \ |
---|
| 2972 | + __entry->dev = inode->i_sb->s_dev; \ |
---|
| 2973 | + __entry->ino = inode->i_ino; \ |
---|
| 2974 | + __entry->error = ret; \ |
---|
| 2975 | + ), \ |
---|
| 2976 | + \ |
---|
| 2977 | + TP_printk("dev %d:%d, inode %d, error %d, fc_%s", \ |
---|
| 2978 | + MAJOR(__entry->dev), MINOR(__entry->dev), \ |
---|
| 2979 | + __entry->ino, __entry->error, \ |
---|
| 2980 | + #__type) \ |
---|
| 2981 | + ) |
---|
| 2982 | + |
---|
| 2983 | +DEFINE_TRACE_DENTRY_EVENT(create); |
---|
| 2984 | +DEFINE_TRACE_DENTRY_EVENT(link); |
---|
| 2985 | +DEFINE_TRACE_DENTRY_EVENT(unlink); |
---|
| 2986 | + |
---|
| 2987 | +TRACE_EVENT(ext4_fc_track_inode, |
---|
| 2988 | + TP_PROTO(struct inode *inode, int ret), |
---|
| 2989 | + |
---|
| 2990 | + TP_ARGS(inode, ret), |
---|
| 2991 | + |
---|
| 2992 | + TP_STRUCT__entry( |
---|
| 2993 | + __field(dev_t, dev) |
---|
| 2994 | + __field(int, ino) |
---|
| 2995 | + __field(int, error) |
---|
| 2996 | + ), |
---|
| 2997 | + |
---|
| 2998 | + TP_fast_assign( |
---|
| 2999 | + __entry->dev = inode->i_sb->s_dev; |
---|
| 3000 | + __entry->ino = inode->i_ino; |
---|
| 3001 | + __entry->error = ret; |
---|
| 3002 | + ), |
---|
| 3003 | + |
---|
| 3004 | + TP_printk("dev %d:%d, inode %d, error %d", |
---|
| 3005 | + MAJOR(__entry->dev), MINOR(__entry->dev), |
---|
| 3006 | + __entry->ino, __entry->error) |
---|
| 3007 | + ); |
---|
| 3008 | + |
---|
| 3009 | +TRACE_EVENT(ext4_fc_track_range, |
---|
| 3010 | + TP_PROTO(struct inode *inode, long start, long end, int ret), |
---|
| 3011 | + |
---|
| 3012 | + TP_ARGS(inode, start, end, ret), |
---|
| 3013 | + |
---|
| 3014 | + TP_STRUCT__entry( |
---|
| 3015 | + __field(dev_t, dev) |
---|
| 3016 | + __field(int, ino) |
---|
| 3017 | + __field(long, start) |
---|
| 3018 | + __field(long, end) |
---|
| 3019 | + __field(int, error) |
---|
| 3020 | + ), |
---|
| 3021 | + |
---|
| 3022 | + TP_fast_assign( |
---|
| 3023 | + __entry->dev = inode->i_sb->s_dev; |
---|
| 3024 | + __entry->ino = inode->i_ino; |
---|
| 3025 | + __entry->start = start; |
---|
| 3026 | + __entry->end = end; |
---|
| 3027 | + __entry->error = ret; |
---|
| 3028 | + ), |
---|
| 3029 | + |
---|
| 3030 | + TP_printk("dev %d:%d, inode %d, error %d, start %ld, end %ld", |
---|
| 3031 | + MAJOR(__entry->dev), MINOR(__entry->dev), |
---|
| 3032 | + __entry->ino, __entry->error, __entry->start, |
---|
| 3033 | + __entry->end) |
---|
| 3034 | + ); |
---|
| 3035 | + |
---|
2651 | 3036 | #endif /* _TRACE_EXT4_H */ |
---|
2652 | 3037 | |
---|
2653 | 3038 | /* This part must be outside protection */ |
---|