Skip to content

Commit a1e6884

Browse files
riteshharjanigregkh
authored andcommitted
ext4: fix ext4_fc_stats trace point
commit 7af1974 upstream. ftrace's __print_symbolic() requires that any enum values used in the symbol to string translation table be wrapped in a TRACE_DEFINE_ENUM so that the enum value can be decoded from the ftrace ring buffer by user space tooling. This patch also fixes few other problems found in this trace point. e.g. dereferencing structures in TP_printk which should not be done at any cost. Also to avoid checkpatch warnings, this patch removes those whitespaces/tab stops issues. Cc: [email protected] Fixes: aa75f4d ("ext4: main fast-commit commit path") Reported-by: Steven Rostedt <[email protected]> Signed-off-by: Ritesh Harjani <[email protected]> Reviewed-by: Jan Kara <[email protected]> Reviewed-by: Steven Rostedt (Google) <[email protected]> Reviewed-by: Harshad Shirwadkar <[email protected]> Link: https://lore.kernel.org/r/b4b9691414c35c62e570b723e661c80674169f9a.1647057583.git.riteshh@linux.ibm.com Signed-off-by: Theodore Ts'o <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
1 parent c119fb6 commit a1e6884

File tree

1 file changed

+49
-29
lines changed

1 file changed

+49
-29
lines changed

include/trace/events/ext4.h

Lines changed: 49 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,17 @@ TRACE_DEFINE_ENUM(ES_REFERENCED_B);
9595
{ FALLOC_FL_COLLAPSE_RANGE, "COLLAPSE_RANGE"}, \
9696
{ FALLOC_FL_ZERO_RANGE, "ZERO_RANGE"})
9797

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+
98109
#define show_fc_reason(reason) \
99110
__print_symbolic(reason, \
100111
{ EXT4_FC_REASON_XATTR, "XATTR"}, \
@@ -2899,41 +2910,50 @@ TRACE_EVENT(ext4_fc_commit_stop,
28992910

29002911
#define FC_REASON_NAME_STAT(reason) \
29012912
show_fc_reason(reason), \
2902-
__entry->sbi->s_fc_stats.fc_ineligible_reason_count[reason]
2913+
__entry->fc_ineligible_rc[reason]
29032914

29042915
TRACE_EVENT(ext4_fc_stats,
2905-
TP_PROTO(struct super_block *sb),
2906-
2907-
TP_ARGS(sb),
2916+
TP_PROTO(struct super_block *sb),
29082917

2909-
TP_STRUCT__entry(
2910-
__field(dev_t, dev)
2911-
__field(struct ext4_sb_info *, sbi)
2912-
__field(int, count)
2913-
),
2918+
TP_ARGS(sb),
29142919

2915-
TP_fast_assign(
2916-
__entry->dev = sb->s_dev;
2917-
__entry->sbi = EXT4_SB(sb);
2918-
),
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+
),
29192927

2920-
TP_printk("dev %d:%d fc ineligible reasons:\n"
2921-
"%s:%d, %s:%d, %s:%d, %s:%d, %s:%d, %s:%d, %s:%d, %s:%d, %s:%d; "
2922-
"num_commits:%ld, ineligible: %ld, numblks: %ld",
2923-
MAJOR(__entry->dev), MINOR(__entry->dev),
2924-
FC_REASON_NAME_STAT(EXT4_FC_REASON_XATTR),
2925-
FC_REASON_NAME_STAT(EXT4_FC_REASON_CROSS_RENAME),
2926-
FC_REASON_NAME_STAT(EXT4_FC_REASON_JOURNAL_FLAG_CHANGE),
2927-
FC_REASON_NAME_STAT(EXT4_FC_REASON_NOMEM),
2928-
FC_REASON_NAME_STAT(EXT4_FC_REASON_SWAP_BOOT),
2929-
FC_REASON_NAME_STAT(EXT4_FC_REASON_RESIZE),
2930-
FC_REASON_NAME_STAT(EXT4_FC_REASON_RENAME_DIR),
2931-
FC_REASON_NAME_STAT(EXT4_FC_REASON_FALLOC_RANGE),
2932-
FC_REASON_NAME_STAT(EXT4_FC_REASON_INODE_JOURNAL_DATA),
2933-
__entry->sbi->s_fc_stats.fc_num_commits,
2934-
__entry->sbi->s_fc_stats.fc_ineligible_commits,
2935-
__entry->sbi->s_fc_stats.fc_numblks)
2928+
TP_fast_assign(
2929+
int i;
29362930

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)
29372957
);
29382958

29392959
#define DEFINE_TRACE_DENTRY_EVENT(__type) \

0 commit comments

Comments
 (0)