hc
2024-01-31 f9004dbfff8a3fbbd7e2a88c8a4327c7f2f8e5b2
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,30 @@
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_ENCRYPTED_FILENAME);
108
+TRACE_DEFINE_ENUM(EXT4_FC_REASON_MAX);
109
+
110
+#define show_fc_reason(reason) \
111
+ __print_symbolic(reason, \
112
+ { EXT4_FC_REASON_XATTR, "XATTR"}, \
113
+ { EXT4_FC_REASON_CROSS_RENAME, "CROSS_RENAME"}, \
114
+ { EXT4_FC_REASON_JOURNAL_FLAG_CHANGE, "JOURNAL_FLAG_CHANGE"}, \
115
+ { EXT4_FC_REASON_NOMEM, "NO_MEM"}, \
116
+ { EXT4_FC_REASON_SWAP_BOOT, "SWAP_BOOT"}, \
117
+ { EXT4_FC_REASON_RESIZE, "RESIZE"}, \
118
+ { EXT4_FC_REASON_RENAME_DIR, "RENAME_DIR"}, \
119
+ { EXT4_FC_REASON_FALLOC_RANGE, "FALLOC_RANGE"}, \
120
+ { EXT4_FC_REASON_INODE_JOURNAL_DATA, "INODE_JOURNAL_DATA"}, \
121
+ { EXT4_FC_REASON_ENCRYPTED_FILENAME, "ENCRYPTED_FILENAME"})
77122
78123 TRACE_EVENT(ext4_other_inode_update_time,
79124 TP_PROTO(struct inode *inode, ino_t orig_ino),
....@@ -725,24 +770,29 @@
725770 );
726771
727772 TRACE_EVENT(ext4_discard_preallocations,
728
- TP_PROTO(struct inode *inode),
773
+ TP_PROTO(struct inode *inode, unsigned int len, unsigned int needed),
729774
730
- TP_ARGS(inode),
775
+ TP_ARGS(inode, len, needed),
731776
732777 TP_STRUCT__entry(
733
- __field( dev_t, dev )
734
- __field( ino_t, ino )
778
+ __field( dev_t, dev )
779
+ __field( ino_t, ino )
780
+ __field( unsigned int, len )
781
+ __field( unsigned int, needed )
735782
736783 ),
737784
738785 TP_fast_assign(
739786 __entry->dev = inode->i_sb->s_dev;
740787 __entry->ino = inode->i_ino;
788
+ __entry->len = len;
789
+ __entry->needed = needed;
741790 ),
742791
743
- TP_printk("dev %d,%d ino %lu",
792
+ TP_printk("dev %d,%d ino %lu len: %u needed %u",
744793 MAJOR(__entry->dev), MINOR(__entry->dev),
745
- (unsigned long) __entry->ino)
794
+ (unsigned long) __entry->ino, __entry->len,
795
+ __entry->needed)
746796 );
747797
748798 TRACE_EVENT(ext4_mb_discard_preallocations,
....@@ -1291,18 +1341,34 @@
12911341 TP_ARGS(sb, group)
12921342 );
12931343
1294
-DEFINE_EVENT(ext4__bitmap_load, ext4_read_block_bitmap_load,
1344
+DEFINE_EVENT(ext4__bitmap_load, ext4_load_inode_bitmap,
12951345
12961346 TP_PROTO(struct super_block *sb, unsigned long group),
12971347
12981348 TP_ARGS(sb, group)
12991349 );
13001350
1301
-DEFINE_EVENT(ext4__bitmap_load, ext4_load_inode_bitmap,
1351
+TRACE_EVENT(ext4_read_block_bitmap_load,
1352
+ TP_PROTO(struct super_block *sb, unsigned long group, bool prefetch),
13021353
1303
- TP_PROTO(struct super_block *sb, unsigned long group),
1354
+ TP_ARGS(sb, group, prefetch),
13041355
1305
- TP_ARGS(sb, group)
1356
+ TP_STRUCT__entry(
1357
+ __field( dev_t, dev )
1358
+ __field( __u32, group )
1359
+ __field( bool, prefetch )
1360
+
1361
+ ),
1362
+
1363
+ TP_fast_assign(
1364
+ __entry->dev = sb->s_dev;
1365
+ __entry->group = group;
1366
+ __entry->prefetch = prefetch;
1367
+ ),
1368
+
1369
+ TP_printk("dev %d,%d group %u prefetch %d",
1370
+ MAJOR(__entry->dev), MINOR(__entry->dev),
1371
+ __entry->group, __entry->prefetch)
13061372 );
13071373
13081374 TRACE_EVENT(ext4_direct_IO_enter,
....@@ -1724,9 +1790,9 @@
17241790 );
17251791
17261792 TRACE_EVENT(ext4_load_inode,
1727
- TP_PROTO(struct inode *inode),
1793
+ TP_PROTO(struct super_block *sb, unsigned long ino),
17281794
1729
- TP_ARGS(inode),
1795
+ TP_ARGS(sb, ino),
17301796
17311797 TP_STRUCT__entry(
17321798 __field( dev_t, dev )
....@@ -1734,8 +1800,8 @@
17341800 ),
17351801
17361802 TP_fast_assign(
1737
- __entry->dev = inode->i_sb->s_dev;
1738
- __entry->ino = inode->i_ino;
1803
+ __entry->dev = sb->s_dev;
1804
+ __entry->ino = ino;
17391805 ),
17401806
17411807 TP_printk("dev %d,%d ino %ld",
....@@ -1745,15 +1811,16 @@
17451811
17461812 TRACE_EVENT(ext4_journal_start,
17471813 TP_PROTO(struct super_block *sb, int blocks, int rsv_blocks,
1748
- unsigned long IP),
1814
+ int revoke_creds, unsigned long IP),
17491815
1750
- TP_ARGS(sb, blocks, rsv_blocks, IP),
1816
+ TP_ARGS(sb, blocks, rsv_blocks, revoke_creds, IP),
17511817
17521818 TP_STRUCT__entry(
17531819 __field( dev_t, dev )
17541820 __field(unsigned long, ip )
17551821 __field( int, blocks )
17561822 __field( int, rsv_blocks )
1823
+ __field( int, revoke_creds )
17571824 ),
17581825
17591826 TP_fast_assign(
....@@ -1761,11 +1828,13 @@
17611828 __entry->ip = IP;
17621829 __entry->blocks = blocks;
17631830 __entry->rsv_blocks = rsv_blocks;
1831
+ __entry->revoke_creds = revoke_creds;
17641832 ),
17651833
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)
1834
+ TP_printk("dev %d,%d blocks %d, rsv_blocks %d, revoke_creds %d, "
1835
+ "caller %pS", MAJOR(__entry->dev), MINOR(__entry->dev),
1836
+ __entry->blocks, __entry->rsv_blocks, __entry->revoke_creds,
1837
+ (void *)__entry->ip)
17691838 );
17701839
17711840 TRACE_EVENT(ext4_journal_start_reserved,
....@@ -2055,21 +2124,23 @@
20552124 );
20562125
20572126 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),
2127
+ TP_PROTO(struct inode *inode, struct ext4_extent *ex,
2128
+ ext4_lblk_t from, ext4_fsblk_t to,
2129
+ struct partial_cluster *pc),
20612130
2062
- TP_ARGS(inode, ex, from, to, partial_cluster),
2131
+ TP_ARGS(inode, ex, from, to, pc),
20632132
20642133 TP_STRUCT__entry(
20652134 __field( dev_t, dev )
20662135 __field( ino_t, ino )
20672136 __field( ext4_lblk_t, from )
20682137 __field( ext4_lblk_t, to )
2069
- __field( long long, partial )
20702138 __field( ext4_fsblk_t, ee_pblk )
20712139 __field( ext4_lblk_t, ee_lblk )
20722140 __field( unsigned short, ee_len )
2141
+ __field( ext4_fsblk_t, pc_pclu )
2142
+ __field( ext4_lblk_t, pc_lblk )
2143
+ __field( int, pc_state)
20732144 ),
20742145
20752146 TP_fast_assign(
....@@ -2077,14 +2148,16 @@
20772148 __entry->ino = inode->i_ino;
20782149 __entry->from = from;
20792150 __entry->to = to;
2080
- __entry->partial = partial_cluster;
20812151 __entry->ee_pblk = ext4_ext_pblock(ex);
20822152 __entry->ee_lblk = le32_to_cpu(ex->ee_block);
20832153 __entry->ee_len = ext4_ext_get_actual_len(ex);
2154
+ __entry->pc_pclu = pc->pclu;
2155
+ __entry->pc_lblk = pc->lblk;
2156
+ __entry->pc_state = pc->state;
20842157 ),
20852158
20862159 TP_printk("dev %d,%d ino %lu extent [%u(%llu), %u]"
2087
- "from %u to %u partial_cluster %lld",
2160
+ "from %u to %u partial [pclu %lld lblk %u state %d]",
20882161 MAJOR(__entry->dev), MINOR(__entry->dev),
20892162 (unsigned long) __entry->ino,
20902163 (unsigned) __entry->ee_lblk,
....@@ -2092,45 +2165,53 @@
20922165 (unsigned short) __entry->ee_len,
20932166 (unsigned) __entry->from,
20942167 (unsigned) __entry->to,
2095
- (long long) __entry->partial)
2168
+ (long long) __entry->pc_pclu,
2169
+ (unsigned int) __entry->pc_lblk,
2170
+ (int) __entry->pc_state)
20962171 );
20972172
20982173 TRACE_EVENT(ext4_ext_rm_leaf,
20992174 TP_PROTO(struct inode *inode, ext4_lblk_t start,
21002175 struct ext4_extent *ex,
2101
- long long partial_cluster),
2176
+ struct partial_cluster *pc),
21022177
2103
- TP_ARGS(inode, start, ex, partial_cluster),
2178
+ TP_ARGS(inode, start, ex, pc),
21042179
21052180 TP_STRUCT__entry(
21062181 __field( dev_t, dev )
21072182 __field( ino_t, ino )
2108
- __field( long long, partial )
21092183 __field( ext4_lblk_t, start )
21102184 __field( ext4_lblk_t, ee_lblk )
21112185 __field( ext4_fsblk_t, ee_pblk )
21122186 __field( short, ee_len )
2187
+ __field( ext4_fsblk_t, pc_pclu )
2188
+ __field( ext4_lblk_t, pc_lblk )
2189
+ __field( int, pc_state)
21132190 ),
21142191
21152192 TP_fast_assign(
21162193 __entry->dev = inode->i_sb->s_dev;
21172194 __entry->ino = inode->i_ino;
2118
- __entry->partial = partial_cluster;
21192195 __entry->start = start;
21202196 __entry->ee_lblk = le32_to_cpu(ex->ee_block);
21212197 __entry->ee_pblk = ext4_ext_pblock(ex);
21222198 __entry->ee_len = ext4_ext_get_actual_len(ex);
2199
+ __entry->pc_pclu = pc->pclu;
2200
+ __entry->pc_lblk = pc->lblk;
2201
+ __entry->pc_state = pc->state;
21232202 ),
21242203
21252204 TP_printk("dev %d,%d ino %lu start_lblk %u last_extent [%u(%llu), %u]"
2126
- "partial_cluster %lld",
2205
+ "partial [pclu %lld lblk %u state %d]",
21272206 MAJOR(__entry->dev), MINOR(__entry->dev),
21282207 (unsigned long) __entry->ino,
21292208 (unsigned) __entry->start,
21302209 (unsigned) __entry->ee_lblk,
21312210 (unsigned long long) __entry->ee_pblk,
21322211 (unsigned short) __entry->ee_len,
2133
- (long long) __entry->partial)
2212
+ (long long) __entry->pc_pclu,
2213
+ (unsigned int) __entry->pc_lblk,
2214
+ (int) __entry->pc_state)
21342215 );
21352216
21362217 TRACE_EVENT(ext4_ext_rm_idx,
....@@ -2188,9 +2269,9 @@
21882269
21892270 TRACE_EVENT(ext4_ext_remove_space_done,
21902271 TP_PROTO(struct inode *inode, ext4_lblk_t start, ext4_lblk_t end,
2191
- int depth, long long partial, __le16 eh_entries),
2272
+ int depth, struct partial_cluster *pc, __le16 eh_entries),
21922273
2193
- TP_ARGS(inode, start, end, depth, partial, eh_entries),
2274
+ TP_ARGS(inode, start, end, depth, pc, eh_entries),
21942275
21952276 TP_STRUCT__entry(
21962277 __field( dev_t, dev )
....@@ -2198,7 +2279,9 @@
21982279 __field( ext4_lblk_t, start )
21992280 __field( ext4_lblk_t, end )
22002281 __field( int, depth )
2201
- __field( long long, partial )
2282
+ __field( ext4_fsblk_t, pc_pclu )
2283
+ __field( ext4_lblk_t, pc_lblk )
2284
+ __field( int, pc_state )
22022285 __field( unsigned short, eh_entries )
22032286 ),
22042287
....@@ -2208,18 +2291,23 @@
22082291 __entry->start = start;
22092292 __entry->end = end;
22102293 __entry->depth = depth;
2211
- __entry->partial = partial;
2294
+ __entry->pc_pclu = pc->pclu;
2295
+ __entry->pc_lblk = pc->lblk;
2296
+ __entry->pc_state = pc->state;
22122297 __entry->eh_entries = le16_to_cpu(eh_entries);
22132298 ),
22142299
2215
- TP_printk("dev %d,%d ino %lu since %u end %u depth %d partial %lld "
2300
+ TP_printk("dev %d,%d ino %lu since %u end %u depth %d "
2301
+ "partial [pclu %lld lblk %u state %d] "
22162302 "remaining_entries %u",
22172303 MAJOR(__entry->dev), MINOR(__entry->dev),
22182304 (unsigned long) __entry->ino,
22192305 (unsigned) __entry->start,
22202306 (unsigned) __entry->end,
22212307 __entry->depth,
2222
- (long long) __entry->partial,
2308
+ (long long) __entry->pc_pclu,
2309
+ (unsigned int) __entry->pc_lblk,
2310
+ (int) __entry->pc_state,
22232311 (unsigned short) __entry->eh_entries)
22242312 );
22252313
....@@ -2242,7 +2330,7 @@
22422330 __entry->ino = inode->i_ino;
22432331 __entry->lblk = es->es_lblk;
22442332 __entry->len = es->es_len;
2245
- __entry->pblk = ext4_es_pblock(es);
2333
+ __entry->pblk = ext4_es_show_pblock(es);
22462334 __entry->status = ext4_es_status(es);
22472335 ),
22482336
....@@ -2290,7 +2378,7 @@
22902378 __entry->lblk, __entry->len)
22912379 );
22922380
2293
-TRACE_EVENT(ext4_es_find_delayed_extent_range_enter,
2381
+TRACE_EVENT(ext4_es_find_extent_range_enter,
22942382 TP_PROTO(struct inode *inode, ext4_lblk_t lblk),
22952383
22962384 TP_ARGS(inode, lblk),
....@@ -2312,7 +2400,7 @@
23122400 (unsigned long) __entry->ino, __entry->lblk)
23132401 );
23142402
2315
-TRACE_EVENT(ext4_es_find_delayed_extent_range_exit,
2403
+TRACE_EVENT(ext4_es_find_extent_range_exit,
23162404 TP_PROTO(struct inode *inode, struct extent_status *es),
23172405
23182406 TP_ARGS(inode, es),
....@@ -2331,7 +2419,7 @@
23312419 __entry->ino = inode->i_ino;
23322420 __entry->lblk = es->es_lblk;
23332421 __entry->len = es->es_len;
2334
- __entry->pblk = ext4_es_pblock(es);
2422
+ __entry->pblk = ext4_es_show_pblock(es);
23352423 __entry->status = ext4_es_status(es);
23362424 ),
23372425
....@@ -2385,7 +2473,7 @@
23852473 __entry->ino = inode->i_ino;
23862474 __entry->lblk = es->es_lblk;
23872475 __entry->len = es->es_len;
2388
- __entry->pblk = ext4_es_pblock(es);
2476
+ __entry->pblk = ext4_es_show_pblock(es);
23892477 __entry->status = ext4_es_status(es);
23902478 __entry->found = found;
23912479 ),
....@@ -2532,6 +2620,41 @@
25322620 __entry->scan_time, __entry->nr_skipped, __entry->retried)
25332621 );
25342622
2623
+TRACE_EVENT(ext4_es_insert_delayed_block,
2624
+ TP_PROTO(struct inode *inode, struct extent_status *es,
2625
+ bool allocated),
2626
+
2627
+ TP_ARGS(inode, es, allocated),
2628
+
2629
+ TP_STRUCT__entry(
2630
+ __field( dev_t, dev )
2631
+ __field( ino_t, ino )
2632
+ __field( ext4_lblk_t, lblk )
2633
+ __field( ext4_lblk_t, len )
2634
+ __field( ext4_fsblk_t, pblk )
2635
+ __field( char, status )
2636
+ __field( bool, allocated )
2637
+ ),
2638
+
2639
+ TP_fast_assign(
2640
+ __entry->dev = inode->i_sb->s_dev;
2641
+ __entry->ino = inode->i_ino;
2642
+ __entry->lblk = es->es_lblk;
2643
+ __entry->len = es->es_len;
2644
+ __entry->pblk = ext4_es_show_pblock(es);
2645
+ __entry->status = ext4_es_status(es);
2646
+ __entry->allocated = allocated;
2647
+ ),
2648
+
2649
+ TP_printk("dev %d,%d ino %lu es [%u/%u) mapped %llu status %s "
2650
+ "allocated %d",
2651
+ MAJOR(__entry->dev), MINOR(__entry->dev),
2652
+ (unsigned long) __entry->ino,
2653
+ __entry->lblk, __entry->len,
2654
+ __entry->pblk, show_extent_status(__entry->status),
2655
+ __entry->allocated)
2656
+);
2657
+
25352658 /* fsmap traces */
25362659 DECLARE_EVENT_CLASS(ext4_fsmap_class,
25372660 TP_PROTO(struct super_block *sb, u32 keydev, u32 agno, u64 bno, u64 len,
....@@ -2648,6 +2771,271 @@
26482771 __entry->function, __entry->line)
26492772 );
26502773
2774
+TRACE_EVENT(ext4_prefetch_bitmaps,
2775
+ TP_PROTO(struct super_block *sb, ext4_group_t group,
2776
+ ext4_group_t next, unsigned int prefetch_ios),
2777
+
2778
+ TP_ARGS(sb, group, next, prefetch_ios),
2779
+
2780
+ TP_STRUCT__entry(
2781
+ __field( dev_t, dev )
2782
+ __field( __u32, group )
2783
+ __field( __u32, next )
2784
+ __field( __u32, ios )
2785
+ ),
2786
+
2787
+ TP_fast_assign(
2788
+ __entry->dev = sb->s_dev;
2789
+ __entry->group = group;
2790
+ __entry->next = next;
2791
+ __entry->ios = prefetch_ios;
2792
+ ),
2793
+
2794
+ TP_printk("dev %d,%d group %u next %u ios %u",
2795
+ MAJOR(__entry->dev), MINOR(__entry->dev),
2796
+ __entry->group, __entry->next, __entry->ios)
2797
+);
2798
+
2799
+TRACE_EVENT(ext4_lazy_itable_init,
2800
+ TP_PROTO(struct super_block *sb, ext4_group_t group),
2801
+
2802
+ TP_ARGS(sb, group),
2803
+
2804
+ TP_STRUCT__entry(
2805
+ __field( dev_t, dev )
2806
+ __field( __u32, group )
2807
+ ),
2808
+
2809
+ TP_fast_assign(
2810
+ __entry->dev = sb->s_dev;
2811
+ __entry->group = group;
2812
+ ),
2813
+
2814
+ TP_printk("dev %d,%d group %u",
2815
+ MAJOR(__entry->dev), MINOR(__entry->dev), __entry->group)
2816
+);
2817
+
2818
+TRACE_EVENT(ext4_fc_replay_scan,
2819
+ TP_PROTO(struct super_block *sb, int error, int off),
2820
+
2821
+ TP_ARGS(sb, error, off),
2822
+
2823
+ TP_STRUCT__entry(
2824
+ __field(dev_t, dev)
2825
+ __field(int, error)
2826
+ __field(int, off)
2827
+ ),
2828
+
2829
+ TP_fast_assign(
2830
+ __entry->dev = sb->s_dev;
2831
+ __entry->error = error;
2832
+ __entry->off = off;
2833
+ ),
2834
+
2835
+ TP_printk("FC scan pass on dev %d,%d: error %d, off %d",
2836
+ MAJOR(__entry->dev), MINOR(__entry->dev),
2837
+ __entry->error, __entry->off)
2838
+);
2839
+
2840
+TRACE_EVENT(ext4_fc_replay,
2841
+ TP_PROTO(struct super_block *sb, int tag, int ino, int priv1, int priv2),
2842
+
2843
+ TP_ARGS(sb, tag, ino, priv1, priv2),
2844
+
2845
+ TP_STRUCT__entry(
2846
+ __field(dev_t, dev)
2847
+ __field(int, tag)
2848
+ __field(int, ino)
2849
+ __field(int, priv1)
2850
+ __field(int, priv2)
2851
+ ),
2852
+
2853
+ TP_fast_assign(
2854
+ __entry->dev = sb->s_dev;
2855
+ __entry->tag = tag;
2856
+ __entry->ino = ino;
2857
+ __entry->priv1 = priv1;
2858
+ __entry->priv2 = priv2;
2859
+ ),
2860
+
2861
+ TP_printk("FC Replay %d,%d: tag %d, ino %d, data1 %d, data2 %d",
2862
+ MAJOR(__entry->dev), MINOR(__entry->dev),
2863
+ __entry->tag, __entry->ino, __entry->priv1, __entry->priv2)
2864
+);
2865
+
2866
+TRACE_EVENT(ext4_fc_commit_start,
2867
+ TP_PROTO(struct super_block *sb),
2868
+
2869
+ TP_ARGS(sb),
2870
+
2871
+ TP_STRUCT__entry(
2872
+ __field(dev_t, dev)
2873
+ ),
2874
+
2875
+ TP_fast_assign(
2876
+ __entry->dev = sb->s_dev;
2877
+ ),
2878
+
2879
+ TP_printk("fast_commit started on dev %d,%d",
2880
+ MAJOR(__entry->dev), MINOR(__entry->dev))
2881
+);
2882
+
2883
+TRACE_EVENT(ext4_fc_commit_stop,
2884
+ TP_PROTO(struct super_block *sb, int nblks, int reason),
2885
+
2886
+ TP_ARGS(sb, nblks, reason),
2887
+
2888
+ TP_STRUCT__entry(
2889
+ __field(dev_t, dev)
2890
+ __field(int, nblks)
2891
+ __field(int, reason)
2892
+ __field(int, num_fc)
2893
+ __field(int, num_fc_ineligible)
2894
+ __field(int, nblks_agg)
2895
+ ),
2896
+
2897
+ TP_fast_assign(
2898
+ __entry->dev = sb->s_dev;
2899
+ __entry->nblks = nblks;
2900
+ __entry->reason = reason;
2901
+ __entry->num_fc = EXT4_SB(sb)->s_fc_stats.fc_num_commits;
2902
+ __entry->num_fc_ineligible =
2903
+ EXT4_SB(sb)->s_fc_stats.fc_ineligible_commits;
2904
+ __entry->nblks_agg = EXT4_SB(sb)->s_fc_stats.fc_numblks;
2905
+ ),
2906
+
2907
+ TP_printk("fc on [%d,%d] nblks %d, reason %d, fc = %d, ineligible = %d, agg_nblks %d",
2908
+ MAJOR(__entry->dev), MINOR(__entry->dev),
2909
+ __entry->nblks, __entry->reason, __entry->num_fc,
2910
+ __entry->num_fc_ineligible, __entry->nblks_agg)
2911
+);
2912
+
2913
+#define FC_REASON_NAME_STAT(reason) \
2914
+ show_fc_reason(reason), \
2915
+ __entry->fc_ineligible_rc[reason]
2916
+
2917
+TRACE_EVENT(ext4_fc_stats,
2918
+ TP_PROTO(struct super_block *sb),
2919
+
2920
+ TP_ARGS(sb),
2921
+
2922
+ TP_STRUCT__entry(
2923
+ __field(dev_t, dev)
2924
+ __array(unsigned int, fc_ineligible_rc, EXT4_FC_REASON_MAX)
2925
+ __field(unsigned long, fc_commits)
2926
+ __field(unsigned long, fc_ineligible_commits)
2927
+ __field(unsigned long, fc_numblks)
2928
+ ),
2929
+
2930
+ TP_fast_assign(
2931
+ int i;
2932
+
2933
+ __entry->dev = sb->s_dev;
2934
+ for (i = 0; i < EXT4_FC_REASON_MAX; i++) {
2935
+ __entry->fc_ineligible_rc[i] =
2936
+ EXT4_SB(sb)->s_fc_stats.fc_ineligible_reason_count[i];
2937
+ }
2938
+ __entry->fc_commits = EXT4_SB(sb)->s_fc_stats.fc_num_commits;
2939
+ __entry->fc_ineligible_commits =
2940
+ EXT4_SB(sb)->s_fc_stats.fc_ineligible_commits;
2941
+ __entry->fc_numblks = EXT4_SB(sb)->s_fc_stats.fc_numblks;
2942
+ ),
2943
+
2944
+ TP_printk("dev %d,%d fc ineligible reasons:\n"
2945
+ "%s:%u, %s:%u, %s:%u, %s:%u, %s:%u, %s:%u, %s:%u, %s:%u, %s:%u, %s:%u"
2946
+ "num_commits:%lu, ineligible: %lu, numblks: %lu",
2947
+ MAJOR(__entry->dev), MINOR(__entry->dev),
2948
+ FC_REASON_NAME_STAT(EXT4_FC_REASON_XATTR),
2949
+ FC_REASON_NAME_STAT(EXT4_FC_REASON_CROSS_RENAME),
2950
+ FC_REASON_NAME_STAT(EXT4_FC_REASON_JOURNAL_FLAG_CHANGE),
2951
+ FC_REASON_NAME_STAT(EXT4_FC_REASON_NOMEM),
2952
+ FC_REASON_NAME_STAT(EXT4_FC_REASON_SWAP_BOOT),
2953
+ FC_REASON_NAME_STAT(EXT4_FC_REASON_RESIZE),
2954
+ FC_REASON_NAME_STAT(EXT4_FC_REASON_RENAME_DIR),
2955
+ FC_REASON_NAME_STAT(EXT4_FC_REASON_FALLOC_RANGE),
2956
+ FC_REASON_NAME_STAT(EXT4_FC_REASON_INODE_JOURNAL_DATA),
2957
+ FC_REASON_NAME_STAT(EXT4_FC_REASON_ENCRYPTED_FILENAME),
2958
+ __entry->fc_commits, __entry->fc_ineligible_commits,
2959
+ __entry->fc_numblks)
2960
+);
2961
+
2962
+#define DEFINE_TRACE_DENTRY_EVENT(__type) \
2963
+ TRACE_EVENT(ext4_fc_track_##__type, \
2964
+ TP_PROTO(struct inode *inode, struct dentry *dentry, int ret), \
2965
+ \
2966
+ TP_ARGS(inode, dentry, ret), \
2967
+ \
2968
+ TP_STRUCT__entry( \
2969
+ __field(dev_t, dev) \
2970
+ __field(int, ino) \
2971
+ __field(int, error) \
2972
+ ), \
2973
+ \
2974
+ TP_fast_assign( \
2975
+ __entry->dev = inode->i_sb->s_dev; \
2976
+ __entry->ino = inode->i_ino; \
2977
+ __entry->error = ret; \
2978
+ ), \
2979
+ \
2980
+ TP_printk("dev %d:%d, inode %d, error %d, fc_%s", \
2981
+ MAJOR(__entry->dev), MINOR(__entry->dev), \
2982
+ __entry->ino, __entry->error, \
2983
+ #__type) \
2984
+ )
2985
+
2986
+DEFINE_TRACE_DENTRY_EVENT(create);
2987
+DEFINE_TRACE_DENTRY_EVENT(link);
2988
+DEFINE_TRACE_DENTRY_EVENT(unlink);
2989
+
2990
+TRACE_EVENT(ext4_fc_track_inode,
2991
+ TP_PROTO(struct inode *inode, int ret),
2992
+
2993
+ TP_ARGS(inode, ret),
2994
+
2995
+ TP_STRUCT__entry(
2996
+ __field(dev_t, dev)
2997
+ __field(int, ino)
2998
+ __field(int, error)
2999
+ ),
3000
+
3001
+ TP_fast_assign(
3002
+ __entry->dev = inode->i_sb->s_dev;
3003
+ __entry->ino = inode->i_ino;
3004
+ __entry->error = ret;
3005
+ ),
3006
+
3007
+ TP_printk("dev %d:%d, inode %d, error %d",
3008
+ MAJOR(__entry->dev), MINOR(__entry->dev),
3009
+ __entry->ino, __entry->error)
3010
+ );
3011
+
3012
+TRACE_EVENT(ext4_fc_track_range,
3013
+ TP_PROTO(struct inode *inode, long start, long end, int ret),
3014
+
3015
+ TP_ARGS(inode, start, end, ret),
3016
+
3017
+ TP_STRUCT__entry(
3018
+ __field(dev_t, dev)
3019
+ __field(int, ino)
3020
+ __field(long, start)
3021
+ __field(long, end)
3022
+ __field(int, error)
3023
+ ),
3024
+
3025
+ TP_fast_assign(
3026
+ __entry->dev = inode->i_sb->s_dev;
3027
+ __entry->ino = inode->i_ino;
3028
+ __entry->start = start;
3029
+ __entry->end = end;
3030
+ __entry->error = ret;
3031
+ ),
3032
+
3033
+ TP_printk("dev %d:%d, inode %d, error %d, start %ld, end %ld",
3034
+ MAJOR(__entry->dev), MINOR(__entry->dev),
3035
+ __entry->ino, __entry->error, __entry->start,
3036
+ __entry->end)
3037
+ );
3038
+
26513039 #endif /* _TRACE_EXT4_H */
26523040
26533041 /* This part must be outside protection */