hc
2023-12-08 01573e231f18eb2d99162747186f59511f56b64d
kernel/include/trace/events/ext4.h
....@@ -17,6 +17,7 @@
1717 struct ext4_map_blocks;
1818 struct extent_status;
1919 struct ext4_fsmap;
20
+struct partial_cluster;
2021
2122 #define EXT4_I(inode) (container_of(inode, struct ext4_inode_info, vfs_inode))
2223
....@@ -34,7 +35,8 @@
3435 { EXT4_MB_DELALLOC_RESERVED, "DELALLOC_RESV" }, \
3536 { EXT4_MB_STREAM_ALLOC, "STREAM_ALLOC" }, \
3637 { 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" })
3840
3941 #define show_map_flags(flags) __print_flags(flags, "|", \
4042 { EXT4_GET_BLOCKS_CREATE, "CREATE" }, \
....@@ -44,8 +46,20 @@
4446 { EXT4_GET_BLOCKS_CONVERT, "CONVERT" }, \
4547 { EXT4_GET_BLOCKS_METADATA_NOFAIL, "METADATA_NOFAIL" }, \
4648 { 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);
4963
5064 #define show_mflags(flags) __print_flags(flags, "", \
5165 { EXT4_MAP_NEW, "N" }, \
....@@ -61,11 +75,18 @@
6175 { EXT4_FREE_BLOCKS_NOFREE_FIRST_CLUSTER,"1ST_CLUSTER" },\
6276 { EXT4_FREE_BLOCKS_NOFREE_LAST_CLUSTER, "LAST_CLUSTER" })
6377
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
+
6484 #define show_extent_status(status) __print_flags(status, "", \
6585 { EXTENT_STATUS_WRITTEN, "W" }, \
6686 { EXTENT_STATUS_UNWRITTEN, "U" }, \
6787 { EXTENT_STATUS_DELAYED, "D" }, \
68
- { EXTENT_STATUS_HOLE, "H" })
88
+ { EXTENT_STATUS_HOLE, "H" }, \
89
+ { EXTENT_STATUS_REFERENCED, "R" })
6990
7091 #define show_falloc_mode(mode) __print_flags(mode, "|", \
7192 { FALLOC_FL_KEEP_SIZE, "KEEP_SIZE"}, \
....@@ -74,6 +95,28 @@
7495 { FALLOC_FL_COLLAPSE_RANGE, "COLLAPSE_RANGE"}, \
7596 { FALLOC_FL_ZERO_RANGE, "ZERO_RANGE"})
7697
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"})
77120
78121 TRACE_EVENT(ext4_other_inode_update_time,
79122 TP_PROTO(struct inode *inode, ino_t orig_ino),
....@@ -725,24 +768,29 @@
725768 );
726769
727770 TRACE_EVENT(ext4_discard_preallocations,
728
- TP_PROTO(struct inode *inode),
771
+ TP_PROTO(struct inode *inode, unsigned int len, unsigned int needed),
729772
730
- TP_ARGS(inode),
773
+ TP_ARGS(inode, len, needed),
731774
732775 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 )
735780
736781 ),
737782
738783 TP_fast_assign(
739784 __entry->dev = inode->i_sb->s_dev;
740785 __entry->ino = inode->i_ino;
786
+ __entry->len = len;
787
+ __entry->needed = needed;
741788 ),
742789
743
- TP_printk("dev %d,%d ino %lu",
790
+ TP_printk("dev %d,%d ino %lu len: %u needed %u",
744791 MAJOR(__entry->dev), MINOR(__entry->dev),
745
- (unsigned long) __entry->ino)
792
+ (unsigned long) __entry->ino, __entry->len,
793
+ __entry->needed)
746794 );
747795
748796 TRACE_EVENT(ext4_mb_discard_preallocations,
....@@ -1291,18 +1339,34 @@
12911339 TP_ARGS(sb, group)
12921340 );
12931341
1294
-DEFINE_EVENT(ext4__bitmap_load, ext4_read_block_bitmap_load,
1342
+DEFINE_EVENT(ext4__bitmap_load, ext4_load_inode_bitmap,
12951343
12961344 TP_PROTO(struct super_block *sb, unsigned long group),
12971345
12981346 TP_ARGS(sb, group)
12991347 );
13001348
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),
13021351
1303
- TP_PROTO(struct super_block *sb, unsigned long group),
1352
+ TP_ARGS(sb, group, prefetch),
13041353
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)
13061370 );
13071371
13081372 TRACE_EVENT(ext4_direct_IO_enter,
....@@ -1724,9 +1788,9 @@
17241788 );
17251789
17261790 TRACE_EVENT(ext4_load_inode,
1727
- TP_PROTO(struct inode *inode),
1791
+ TP_PROTO(struct super_block *sb, unsigned long ino),
17281792
1729
- TP_ARGS(inode),
1793
+ TP_ARGS(sb, ino),
17301794
17311795 TP_STRUCT__entry(
17321796 __field( dev_t, dev )
....@@ -1734,8 +1798,8 @@
17341798 ),
17351799
17361800 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;
17391803 ),
17401804
17411805 TP_printk("dev %d,%d ino %ld",
....@@ -1745,15 +1809,16 @@
17451809
17461810 TRACE_EVENT(ext4_journal_start,
17471811 TP_PROTO(struct super_block *sb, int blocks, int rsv_blocks,
1748
- unsigned long IP),
1812
+ int revoke_creds, unsigned long IP),
17491813
1750
- TP_ARGS(sb, blocks, rsv_blocks, IP),
1814
+ TP_ARGS(sb, blocks, rsv_blocks, revoke_creds, IP),
17511815
17521816 TP_STRUCT__entry(
17531817 __field( dev_t, dev )
17541818 __field(unsigned long, ip )
17551819 __field( int, blocks )
17561820 __field( int, rsv_blocks )
1821
+ __field( int, revoke_creds )
17571822 ),
17581823
17591824 TP_fast_assign(
....@@ -1761,11 +1826,13 @@
17611826 __entry->ip = IP;
17621827 __entry->blocks = blocks;
17631828 __entry->rsv_blocks = rsv_blocks;
1829
+ __entry->revoke_creds = revoke_creds;
17641830 ),
17651831
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)
17691836 );
17701837
17711838 TRACE_EVENT(ext4_journal_start_reserved,
....@@ -2055,21 +2122,23 @@
20552122 );
20562123
20572124 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),
20612128
2062
- TP_ARGS(inode, ex, from, to, partial_cluster),
2129
+ TP_ARGS(inode, ex, from, to, pc),
20632130
20642131 TP_STRUCT__entry(
20652132 __field( dev_t, dev )
20662133 __field( ino_t, ino )
20672134 __field( ext4_lblk_t, from )
20682135 __field( ext4_lblk_t, to )
2069
- __field( long long, partial )
20702136 __field( ext4_fsblk_t, ee_pblk )
20712137 __field( ext4_lblk_t, ee_lblk )
20722138 __field( unsigned short, ee_len )
2139
+ __field( ext4_fsblk_t, pc_pclu )
2140
+ __field( ext4_lblk_t, pc_lblk )
2141
+ __field( int, pc_state)
20732142 ),
20742143
20752144 TP_fast_assign(
....@@ -2077,14 +2146,16 @@
20772146 __entry->ino = inode->i_ino;
20782147 __entry->from = from;
20792148 __entry->to = to;
2080
- __entry->partial = partial_cluster;
20812149 __entry->ee_pblk = ext4_ext_pblock(ex);
20822150 __entry->ee_lblk = le32_to_cpu(ex->ee_block);
20832151 __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;
20842155 ),
20852156
20862157 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]",
20882159 MAJOR(__entry->dev), MINOR(__entry->dev),
20892160 (unsigned long) __entry->ino,
20902161 (unsigned) __entry->ee_lblk,
....@@ -2092,45 +2163,53 @@
20922163 (unsigned short) __entry->ee_len,
20932164 (unsigned) __entry->from,
20942165 (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)
20962169 );
20972170
20982171 TRACE_EVENT(ext4_ext_rm_leaf,
20992172 TP_PROTO(struct inode *inode, ext4_lblk_t start,
21002173 struct ext4_extent *ex,
2101
- long long partial_cluster),
2174
+ struct partial_cluster *pc),
21022175
2103
- TP_ARGS(inode, start, ex, partial_cluster),
2176
+ TP_ARGS(inode, start, ex, pc),
21042177
21052178 TP_STRUCT__entry(
21062179 __field( dev_t, dev )
21072180 __field( ino_t, ino )
2108
- __field( long long, partial )
21092181 __field( ext4_lblk_t, start )
21102182 __field( ext4_lblk_t, ee_lblk )
21112183 __field( ext4_fsblk_t, ee_pblk )
21122184 __field( short, ee_len )
2185
+ __field( ext4_fsblk_t, pc_pclu )
2186
+ __field( ext4_lblk_t, pc_lblk )
2187
+ __field( int, pc_state)
21132188 ),
21142189
21152190 TP_fast_assign(
21162191 __entry->dev = inode->i_sb->s_dev;
21172192 __entry->ino = inode->i_ino;
2118
- __entry->partial = partial_cluster;
21192193 __entry->start = start;
21202194 __entry->ee_lblk = le32_to_cpu(ex->ee_block);
21212195 __entry->ee_pblk = ext4_ext_pblock(ex);
21222196 __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;
21232200 ),
21242201
21252202 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]",
21272204 MAJOR(__entry->dev), MINOR(__entry->dev),
21282205 (unsigned long) __entry->ino,
21292206 (unsigned) __entry->start,
21302207 (unsigned) __entry->ee_lblk,
21312208 (unsigned long long) __entry->ee_pblk,
21322209 (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)
21342213 );
21352214
21362215 TRACE_EVENT(ext4_ext_rm_idx,
....@@ -2188,9 +2267,9 @@
21882267
21892268 TRACE_EVENT(ext4_ext_remove_space_done,
21902269 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),
21922271
2193
- TP_ARGS(inode, start, end, depth, partial, eh_entries),
2272
+ TP_ARGS(inode, start, end, depth, pc, eh_entries),
21942273
21952274 TP_STRUCT__entry(
21962275 __field( dev_t, dev )
....@@ -2198,7 +2277,9 @@
21982277 __field( ext4_lblk_t, start )
21992278 __field( ext4_lblk_t, end )
22002279 __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 )
22022283 __field( unsigned short, eh_entries )
22032284 ),
22042285
....@@ -2208,18 +2289,23 @@
22082289 __entry->start = start;
22092290 __entry->end = end;
22102291 __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;
22122295 __entry->eh_entries = le16_to_cpu(eh_entries);
22132296 ),
22142297
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] "
22162300 "remaining_entries %u",
22172301 MAJOR(__entry->dev), MINOR(__entry->dev),
22182302 (unsigned long) __entry->ino,
22192303 (unsigned) __entry->start,
22202304 (unsigned) __entry->end,
22212305 __entry->depth,
2222
- (long long) __entry->partial,
2306
+ (long long) __entry->pc_pclu,
2307
+ (unsigned int) __entry->pc_lblk,
2308
+ (int) __entry->pc_state,
22232309 (unsigned short) __entry->eh_entries)
22242310 );
22252311
....@@ -2242,7 +2328,7 @@
22422328 __entry->ino = inode->i_ino;
22432329 __entry->lblk = es->es_lblk;
22442330 __entry->len = es->es_len;
2245
- __entry->pblk = ext4_es_pblock(es);
2331
+ __entry->pblk = ext4_es_show_pblock(es);
22462332 __entry->status = ext4_es_status(es);
22472333 ),
22482334
....@@ -2290,7 +2376,7 @@
22902376 __entry->lblk, __entry->len)
22912377 );
22922378
2293
-TRACE_EVENT(ext4_es_find_delayed_extent_range_enter,
2379
+TRACE_EVENT(ext4_es_find_extent_range_enter,
22942380 TP_PROTO(struct inode *inode, ext4_lblk_t lblk),
22952381
22962382 TP_ARGS(inode, lblk),
....@@ -2312,7 +2398,7 @@
23122398 (unsigned long) __entry->ino, __entry->lblk)
23132399 );
23142400
2315
-TRACE_EVENT(ext4_es_find_delayed_extent_range_exit,
2401
+TRACE_EVENT(ext4_es_find_extent_range_exit,
23162402 TP_PROTO(struct inode *inode, struct extent_status *es),
23172403
23182404 TP_ARGS(inode, es),
....@@ -2331,7 +2417,7 @@
23312417 __entry->ino = inode->i_ino;
23322418 __entry->lblk = es->es_lblk;
23332419 __entry->len = es->es_len;
2334
- __entry->pblk = ext4_es_pblock(es);
2420
+ __entry->pblk = ext4_es_show_pblock(es);
23352421 __entry->status = ext4_es_status(es);
23362422 ),
23372423
....@@ -2385,7 +2471,7 @@
23852471 __entry->ino = inode->i_ino;
23862472 __entry->lblk = es->es_lblk;
23872473 __entry->len = es->es_len;
2388
- __entry->pblk = ext4_es_pblock(es);
2474
+ __entry->pblk = ext4_es_show_pblock(es);
23892475 __entry->status = ext4_es_status(es);
23902476 __entry->found = found;
23912477 ),
....@@ -2532,6 +2618,41 @@
25322618 __entry->scan_time, __entry->nr_skipped, __entry->retried)
25332619 );
25342620
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
+
25352656 /* fsmap traces */
25362657 DECLARE_EVENT_CLASS(ext4_fsmap_class,
25372658 TP_PROTO(struct super_block *sb, u32 keydev, u32 agno, u64 bno, u64 len,
....@@ -2648,6 +2769,270 @@
26482769 __entry->function, __entry->line)
26492770 );
26502771
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
+
26513036 #endif /* _TRACE_EXT4_H */
26523037
26533038 /* This part must be outside protection */