* [f2fs-dev] [PATCH] [PATCH v2] f2fs: Add trace_f2fs_fault_report
@ 2026-04-15 11:42 liujinbao1
2026-04-17 1:26 ` Chao Yu via Linux-f2fs-devel
` (2 more replies)
0 siblings, 3 replies; 5+ messages in thread
From: liujinbao1 @ 2026-04-15 11:42 UTC (permalink / raw)
To: jaegeuk; +Cc: jinbaoliu365, shengyong1, liujinbao1, linux-f2fs-devel
From: liujinbao1 <liujinbao1@xiaomi.com>
Add trace_f2fs_fault_report to trigger reporting upon f2fs_bug_on,
need_fsck, stop_checkpoint, and handle_eio. Since f2fs_bug_on and
need_fsck can be triggered in hundreds of scenarios, define set_sbi_flag
as a macro to help capture the effective fault function and line number.
Signed-off-by: shengyong1 <shengyong1@xiaomi.com>
Signed-off-by: liujinbao1 <liujinbao1@xiaomi.com>
---
fs/f2fs/f2fs.h | 18 +++++++++++++++++-
fs/f2fs/super.c | 9 +++++++++
include/trace/events/f2fs.h | 28 ++++++++++++++++++++++++++++
3 files changed, 54 insertions(+), 1 deletion(-)
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 56c4af4b1737..2249a68d6bf5 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -97,6 +97,15 @@ extern const char *f2fs_fault_name[FAULT_MAX];
#define DEFAULT_FAILURE_RETRY_COUNT 1
#endif
+enum {
+ REPORT_FAULT_NEED_FSCK,
+ REPORT_FAULT_STOP_CP,
+ REPORT_FAULT_MAX,
+};
+
+void f2fs_fault_report(struct super_block *sb, unsigned int err_code,
+ const char *func, unsigned int data);
+
/*
* For mount options
*/
@@ -2278,11 +2287,18 @@ static inline bool is_sbi_flag_set(struct f2fs_sb_info *sbi, unsigned int type)
return test_bit(type, &sbi->s_flag);
}
-static inline void set_sbi_flag(struct f2fs_sb_info *sbi, unsigned int type)
+static inline void __set_sbi_flag(struct f2fs_sb_info *sbi, unsigned int type)
{
set_bit(type, &sbi->s_flag);
}
+#define set_sbi_flag(sbi, type) \
+do { \
+ __set_sbi_flag(sbi, type); \
+ if ((type) == SBI_NEED_FSCK) \
+ f2fs_fault_report(sbi->sb, REPORT_FAULT_NEED_FSCK, __func__, __LINE__); \
+} while (0)
+
static inline void clear_sbi_flag(struct f2fs_sb_info *sbi, unsigned int type)
{
clear_bit(type, &sbi->s_flag);
diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c
index ccf806b676f5..b431842751d6 100644
--- a/fs/f2fs/super.c
+++ b/fs/f2fs/super.c
@@ -4724,9 +4724,18 @@ static void f2fs_handle_critical_error(struct f2fs_sb_info *sbi,
*/
}
+void f2fs_fault_report(struct super_block *sb, unsigned int err_code,
+ const char *func, unsigned int data)
+{
+ trace_f2fs_fault_report(sb, err_code, func, data);
+}
+
void f2fs_stop_checkpoint(struct f2fs_sb_info *sbi, bool end_io,
unsigned char reason)
{
+ if (reason != STOP_CP_REASON_SHUTDOWN)
+ f2fs_fault_report(sbi->sb, REPORT_FAULT_STOP_CP, __func__, reason);
+
f2fs_build_fault_attr(sbi, 0, 0, FAULT_ALL);
if (!end_io)
f2fs_flush_merged_writes(sbi);
diff --git a/include/trace/events/f2fs.h b/include/trace/events/f2fs.h
index 9364e6775562..b97bc3bf499a 100644
--- a/include/trace/events/f2fs.h
+++ b/include/trace/events/f2fs.h
@@ -2582,6 +2582,34 @@ DEFINE_EVENT(f2fs_priority_update, f2fs_priority_restore,
TP_ARGS(sbi, lock_name, is_write, p, orig_prio, new_prio)
);
+TRACE_EVENT(f2fs_fault_report,
+
+ TP_PROTO(struct super_block *sb, unsigned int err_code,
+ const char *func, unsigned int data),
+
+ TP_ARGS(sb, err_code, func, data),
+
+ TP_STRUCT__entry(
+ __field(dev_t, dev)
+ __field(unsigned int, err_code)
+ __string(func, func)
+ __field(unsigned int, data)
+ ),
+
+ TP_fast_assign(
+ __entry->dev = sb->s_dev;
+ __entry->err_code = err_code;
+ __assign_str(func, func);
+ __entry->data = data;
+ ),
+
+ TP_printk("dev = (%d,%d), err_code = %u, func = %s, data = %u",
+ show_dev(__entry->dev),
+ __entry->err_code,
+ __get_str(func),
+ __entry->data)
+);
+
#endif /* _TRACE_F2FS_H */
/* This part must be outside protection */
--
2.43.0
_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [f2fs-dev] [PATCH] [PATCH v2] f2fs: Add trace_f2fs_fault_report
2026-04-15 11:42 [f2fs-dev] [PATCH] [PATCH v2] f2fs: Add trace_f2fs_fault_report liujinbao1
@ 2026-04-17 1:26 ` Chao Yu via Linux-f2fs-devel
[not found] ` <5a216f80-fe22-4134-abb7-28fbd0731b52@gmail.com>
2026-04-17 7:43 ` Chao Yu via Linux-f2fs-devel
2026-05-01 4:58 ` Jaegeuk Kim via Linux-f2fs-devel
2 siblings, 1 reply; 5+ messages in thread
From: Chao Yu via Linux-f2fs-devel @ 2026-04-17 1:26 UTC (permalink / raw)
To: liujinbao1, jaegeuk; +Cc: shengyong1, liujinbao1, linux-f2fs-devel
On 4/15/2026 7:42 PM, liujinbao1 wrote:
> From: liujinbao1 <liujinbao1@xiaomi.com>
>
> Add trace_f2fs_fault_report to trigger reporting upon f2fs_bug_on,
> need_fsck, stop_checkpoint, and handle_eio. Since f2fs_bug_on and
> need_fsck can be triggered in hundreds of scenarios, define set_sbi_flag
> as a macro to help capture the effective fault function and line number.
>
> Signed-off-by: shengyong1 <shengyong1@xiaomi.com>
> Signed-off-by: liujinbao1 <liujinbao1@xiaomi.com>
> ---
> fs/f2fs/f2fs.h | 18 +++++++++++++++++-
> fs/f2fs/super.c | 9 +++++++++
> include/trace/events/f2fs.h | 28 ++++++++++++++++++++++++++++
> 3 files changed, 54 insertions(+), 1 deletion(-)
>
> diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
> index 56c4af4b1737..2249a68d6bf5 100644
> --- a/fs/f2fs/f2fs.h
> +++ b/fs/f2fs/f2fs.h
> @@ -97,6 +97,15 @@ extern const char *f2fs_fault_name[FAULT_MAX];
> #define DEFAULT_FAILURE_RETRY_COUNT 1
> #endif
>
> +enum {
> + REPORT_FAULT_NEED_FSCK,
> + REPORT_FAULT_STOP_CP,
> + REPORT_FAULT_MAX,
> +};
> +
> +void f2fs_fault_report(struct super_block *sb, unsigned int err_code,
> + const char *func, unsigned int data);
> +
> /*
> * For mount options
> */
> @@ -2278,11 +2287,18 @@ static inline bool is_sbi_flag_set(struct f2fs_sb_info *sbi, unsigned int type)
> return test_bit(type, &sbi->s_flag);
> }
>
> -static inline void set_sbi_flag(struct f2fs_sb_info *sbi, unsigned int type)
> +static inline void __set_sbi_flag(struct f2fs_sb_info *sbi, unsigned int type)
> {
> set_bit(type, &sbi->s_flag);
> }
>
> +#define set_sbi_flag(sbi, type) \
> +do { \
> + __set_sbi_flag(sbi, type); \
> + if ((type) == SBI_NEED_FSCK) \
> + f2fs_fault_report(sbi->sb, REPORT_FAULT_NEED_FSCK, __func__, __LINE__); \
> +} while (0)
It's minor, but, what about?
void f2fs_fault_report(struct super_block *sb, unsigned int err_code,
const char *func, unsigned int data);
static inline void set_sbi_flag(struct f2fs_sb_info *sbi, unsigned int type)
{
set_bit(type, &sbi->s_flag);
if ((type) == SBI_NEED_FSCK)
f2fs_fault_report(sbi->sb, REPORT_FAULT_NEED_FSCK, __func__, __LINE__);
}
Thanks,
> +
> static inline void clear_sbi_flag(struct f2fs_sb_info *sbi, unsigned int type)
> {
> clear_bit(type, &sbi->s_flag);
> diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c
> index ccf806b676f5..b431842751d6 100644
> --- a/fs/f2fs/super.c
> +++ b/fs/f2fs/super.c
> @@ -4724,9 +4724,18 @@ static void f2fs_handle_critical_error(struct f2fs_sb_info *sbi,
> */
> }
>
> +void f2fs_fault_report(struct super_block *sb, unsigned int err_code,
> + const char *func, unsigned int data)
> +{
> + trace_f2fs_fault_report(sb, err_code, func, data);
> +}
> +
> void f2fs_stop_checkpoint(struct f2fs_sb_info *sbi, bool end_io,
> unsigned char reason)
> {
> + if (reason != STOP_CP_REASON_SHUTDOWN)
> + f2fs_fault_report(sbi->sb, REPORT_FAULT_STOP_CP, __func__, reason);
> +
> f2fs_build_fault_attr(sbi, 0, 0, FAULT_ALL);
> if (!end_io)
> f2fs_flush_merged_writes(sbi);
> diff --git a/include/trace/events/f2fs.h b/include/trace/events/f2fs.h
> index 9364e6775562..b97bc3bf499a 100644
> --- a/include/trace/events/f2fs.h
> +++ b/include/trace/events/f2fs.h
> @@ -2582,6 +2582,34 @@ DEFINE_EVENT(f2fs_priority_update, f2fs_priority_restore,
> TP_ARGS(sbi, lock_name, is_write, p, orig_prio, new_prio)
> );
>
> +TRACE_EVENT(f2fs_fault_report,
> +
> + TP_PROTO(struct super_block *sb, unsigned int err_code,
> + const char *func, unsigned int data),
> +
> + TP_ARGS(sb, err_code, func, data),
> +
> + TP_STRUCT__entry(
> + __field(dev_t, dev)
> + __field(unsigned int, err_code)
> + __string(func, func)
> + __field(unsigned int, data)
> + ),
> +
> + TP_fast_assign(
> + __entry->dev = sb->s_dev;
> + __entry->err_code = err_code;
> + __assign_str(func, func);
> + __entry->data = data;
> + ),
> +
> + TP_printk("dev = (%d,%d), err_code = %u, func = %s, data = %u",
> + show_dev(__entry->dev),
> + __entry->err_code,
> + __get_str(func),
> + __entry->data)
> +);
> +
> #endif /* _TRACE_F2FS_H */
>
> /* This part must be outside protection */
_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [f2fs-dev] [PATCH] [PATCH v2] f2fs: Add trace_f2fs_fault_report
[not found] ` <5a216f80-fe22-4134-abb7-28fbd0731b52@gmail.com>
@ 2026-04-17 7:42 ` Chao Yu via Linux-f2fs-devel
0 siblings, 0 replies; 5+ messages in thread
From: Chao Yu via Linux-f2fs-devel @ 2026-04-17 7:42 UTC (permalink / raw)
To: liujinbao1, jaegeuk; +Cc: shengyong1, liujinbao1, linux-f2fs-devel
On 4/17/2026 12:02 PM, liujinbao1 wrote:
>
> 在 2026/4/17 09:26, Chao Yu 写道:
>> On 4/15/2026 7:42 PM, liujinbao1 wrote:
>>> From: liujinbao1 <liujinbao1@xiaomi.com>
>>>
>>> Add trace_f2fs_fault_report to trigger reporting upon f2fs_bug_on,
>>> need_fsck, stop_checkpoint, and handle_eio. Since f2fs_bug_on and
>>> need_fsck can be triggered in hundreds of scenarios, define set_sbi_flag
>>> as a macro to help capture the effective fault function and line number.
>>>
>>> Signed-off-by: shengyong1 <shengyong1@xiaomi.com>
>>> Signed-off-by: liujinbao1 <liujinbao1@xiaomi.com>
>>> ---
>>> fs/f2fs/f2fs.h | 18 +++++++++++++++++-
>>> fs/f2fs/super.c | 9 +++++++++
>>> include/trace/events/f2fs.h | 28 ++++++++++++++++++++++++++++
>>> 3 files changed, 54 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
>>> index 56c4af4b1737..2249a68d6bf5 100644
>>> --- a/fs/f2fs/f2fs.h
>>> +++ b/fs/f2fs/f2fs.h
>>> @@ -97,6 +97,15 @@ extern const char *f2fs_fault_name[FAULT_MAX];
>>> #define DEFAULT_FAILURE_RETRY_COUNT 1
>>> #endif
>>> +enum {
>>> + REPORT_FAULT_NEED_FSCK,
>>> + REPORT_FAULT_STOP_CP,
>>> + REPORT_FAULT_MAX,
>>> +};
>>> +
>>> +void f2fs_fault_report(struct super_block *sb, unsigned int err_code,
>>> + const char *func, unsigned int data);
>>> +
>>> /*
>>> * For mount options
>>> */
>>> @@ -2278,11 +2287,18 @@ static inline bool is_sbi_flag_set(struct f2fs_sb_info *sbi, unsigned int type)
>>> return test_bit(type, &sbi->s_flag);
>>> }
>>> -static inline void set_sbi_flag(struct f2fs_sb_info *sbi, unsigned int type)
>>> +static inline void __set_sbi_flag(struct f2fs_sb_info *sbi, unsigned int type)
>>> {
>>> set_bit(type, &sbi->s_flag);
>>> }
>>> +#define set_sbi_flag(sbi, type) \
>>> +do { \
>>> + __set_sbi_flag(sbi, type); \
>>> + if ((type) == SBI_NEED_FSCK) \
>>> + f2fs_fault_report(sbi->sb, REPORT_FAULT_NEED_FSCK, __func__, __LINE__); \
>>> +} while (0)
>>
>> It's minor, but, what about?
>>
>> void f2fs_fault_report(struct super_block *sb, unsigned int err_code,
>> const char *func, unsigned int data);
>> static inline void set_sbi_flag(struct f2fs_sb_info *sbi, unsigned int type)
>> {
>> set_bit(type, &sbi->s_flag);
>> if ((type) == SBI_NEED_FSCK)
>> f2fs_fault_report(sbi->sb, REPORT_FAULT_NEED_FSCK, __func__, __LINE__);
>> }
>>
>> Thanks,
>>
> The advantage of defining|set_sbi_flag|as a macro is that,
> when|f2fs_bug_on|and|need_fsck|are triggered,
> the function name and line number where the fault occurred can be directly captured.
> If it were implemented as a function, the function and line number passed in would be invalid,
> leaving only the option to infer the fault location from the call stack.
Oh, right, I missed that.
Thanks,
> But I'm fine with either approach — I'll go with your suggestion.
>
> Thanks
>
>>> +
>>> static inline void clear_sbi_flag(struct f2fs_sb_info *sbi, unsigned int type)
>>> {
>>> clear_bit(type, &sbi->s_flag);
>>> diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c
>>> index ccf806b676f5..b431842751d6 100644
>>> --- a/fs/f2fs/super.c
>>> +++ b/fs/f2fs/super.c
>>> @@ -4724,9 +4724,18 @@ static void f2fs_handle_critical_error(struct f2fs_sb_info *sbi,
>>> */
>>> }
>>> +void f2fs_fault_report(struct super_block *sb, unsigned int err_code,
>>> + const char *func, unsigned int data)
>>> +{
>>> + trace_f2fs_fault_report(sb, err_code, func, data);
>>> +}
>>> +
>>> void f2fs_stop_checkpoint(struct f2fs_sb_info *sbi, bool end_io,
>>> unsigned char reason)
>>> {
>>> + if (reason != STOP_CP_REASON_SHUTDOWN)
>>> + f2fs_fault_report(sbi->sb, REPORT_FAULT_STOP_CP, __func__, reason);
>>> +
>>> f2fs_build_fault_attr(sbi, 0, 0, FAULT_ALL);
>>> if (!end_io)
>>> f2fs_flush_merged_writes(sbi);
>>> diff --git a/include/trace/events/f2fs.h b/include/trace/events/f2fs.h
>>> index 9364e6775562..b97bc3bf499a 100644
>>> --- a/include/trace/events/f2fs.h
>>> +++ b/include/trace/events/f2fs.h
>>> @@ -2582,6 +2582,34 @@ DEFINE_EVENT(f2fs_priority_update, f2fs_priority_restore,
>>> TP_ARGS(sbi, lock_name, is_write, p, orig_prio, new_prio)
>>> );
>>> +TRACE_EVENT(f2fs_fault_report,
>>> +
>>> + TP_PROTO(struct super_block *sb, unsigned int err_code,
>>> + const char *func, unsigned int data),
>>> +
>>> + TP_ARGS(sb, err_code, func, data),
>>> +
>>> + TP_STRUCT__entry(
>>> + __field(dev_t, dev)
>>> + __field(unsigned int, err_code)
>>> + __string(func, func)
>>> + __field(unsigned int, data)
>>> + ),
>>> +
>>> + TP_fast_assign(
>>> + __entry->dev = sb->s_dev;
>>> + __entry->err_code = err_code;
>>> + __assign_str(func, func);
>>> + __entry->data = data;
>>> + ),
>>> +
>>> + TP_printk("dev = (%d,%d), err_code = %u, func = %s, data = %u",
>>> + show_dev(__entry->dev),
>>> + __entry->err_code,
>>> + __get_str(func),
>>> + __entry->data)
>>> +);
>>> +
>>> #endif /* _TRACE_F2FS_H */
>>> /* This part must be outside protection */
>>
_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [f2fs-dev] [PATCH] [PATCH v2] f2fs: Add trace_f2fs_fault_report
2026-04-15 11:42 [f2fs-dev] [PATCH] [PATCH v2] f2fs: Add trace_f2fs_fault_report liujinbao1
2026-04-17 1:26 ` Chao Yu via Linux-f2fs-devel
@ 2026-04-17 7:43 ` Chao Yu via Linux-f2fs-devel
2026-05-01 4:58 ` Jaegeuk Kim via Linux-f2fs-devel
2 siblings, 0 replies; 5+ messages in thread
From: Chao Yu via Linux-f2fs-devel @ 2026-04-17 7:43 UTC (permalink / raw)
To: liujinbao1, jaegeuk; +Cc: shengyong1, liujinbao1, linux-f2fs-devel
On 4/15/2026 7:42 PM, liujinbao1 wrote:
> From: liujinbao1 <liujinbao1@xiaomi.com>
>
> Add trace_f2fs_fault_report to trigger reporting upon f2fs_bug_on,
> need_fsck, stop_checkpoint, and handle_eio. Since f2fs_bug_on and
> need_fsck can be triggered in hundreds of scenarios, define set_sbi_flag
> as a macro to help capture the effective fault function and line number.
>
> Signed-off-by: shengyong1 <shengyong1@xiaomi.com>
> Signed-off-by: liujinbao1 <liujinbao1@xiaomi.com>
Reviewed-by: Chao Yu <chao@kernel.org>
Thanks,
_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [f2fs-dev] [PATCH] [PATCH v2] f2fs: Add trace_f2fs_fault_report
2026-04-15 11:42 [f2fs-dev] [PATCH] [PATCH v2] f2fs: Add trace_f2fs_fault_report liujinbao1
2026-04-17 1:26 ` Chao Yu via Linux-f2fs-devel
2026-04-17 7:43 ` Chao Yu via Linux-f2fs-devel
@ 2026-05-01 4:58 ` Jaegeuk Kim via Linux-f2fs-devel
2 siblings, 0 replies; 5+ messages in thread
From: Jaegeuk Kim via Linux-f2fs-devel @ 2026-05-01 4:58 UTC (permalink / raw)
To: liujinbao1; +Cc: shengyong1, liujinbao1, linux-f2fs-devel
It seems this patch fails to build on linux-next. Could you please check?
On 04/15, liujinbao1 wrote:
> From: liujinbao1 <liujinbao1@xiaomi.com>
>
> Add trace_f2fs_fault_report to trigger reporting upon f2fs_bug_on,
> need_fsck, stop_checkpoint, and handle_eio. Since f2fs_bug_on and
> need_fsck can be triggered in hundreds of scenarios, define set_sbi_flag
> as a macro to help capture the effective fault function and line number.
>
> Signed-off-by: shengyong1 <shengyong1@xiaomi.com>
> Signed-off-by: liujinbao1 <liujinbao1@xiaomi.com>
> ---
> fs/f2fs/f2fs.h | 18 +++++++++++++++++-
> fs/f2fs/super.c | 9 +++++++++
> include/trace/events/f2fs.h | 28 ++++++++++++++++++++++++++++
> 3 files changed, 54 insertions(+), 1 deletion(-)
>
> diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
> index 56c4af4b1737..2249a68d6bf5 100644
> --- a/fs/f2fs/f2fs.h
> +++ b/fs/f2fs/f2fs.h
> @@ -97,6 +97,15 @@ extern const char *f2fs_fault_name[FAULT_MAX];
> #define DEFAULT_FAILURE_RETRY_COUNT 1
> #endif
>
> +enum {
> + REPORT_FAULT_NEED_FSCK,
> + REPORT_FAULT_STOP_CP,
> + REPORT_FAULT_MAX,
> +};
> +
> +void f2fs_fault_report(struct super_block *sb, unsigned int err_code,
> + const char *func, unsigned int data);
> +
> /*
> * For mount options
> */
> @@ -2278,11 +2287,18 @@ static inline bool is_sbi_flag_set(struct f2fs_sb_info *sbi, unsigned int type)
> return test_bit(type, &sbi->s_flag);
> }
>
> -static inline void set_sbi_flag(struct f2fs_sb_info *sbi, unsigned int type)
> +static inline void __set_sbi_flag(struct f2fs_sb_info *sbi, unsigned int type)
> {
> set_bit(type, &sbi->s_flag);
> }
>
> +#define set_sbi_flag(sbi, type) \
> +do { \
> + __set_sbi_flag(sbi, type); \
> + if ((type) == SBI_NEED_FSCK) \
> + f2fs_fault_report(sbi->sb, REPORT_FAULT_NEED_FSCK, __func__, __LINE__); \
> +} while (0)
> +
> static inline void clear_sbi_flag(struct f2fs_sb_info *sbi, unsigned int type)
> {
> clear_bit(type, &sbi->s_flag);
> diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c
> index ccf806b676f5..b431842751d6 100644
> --- a/fs/f2fs/super.c
> +++ b/fs/f2fs/super.c
> @@ -4724,9 +4724,18 @@ static void f2fs_handle_critical_error(struct f2fs_sb_info *sbi,
> */
> }
>
> +void f2fs_fault_report(struct super_block *sb, unsigned int err_code,
> + const char *func, unsigned int data)
> +{
> + trace_f2fs_fault_report(sb, err_code, func, data);
> +}
> +
> void f2fs_stop_checkpoint(struct f2fs_sb_info *sbi, bool end_io,
> unsigned char reason)
> {
> + if (reason != STOP_CP_REASON_SHUTDOWN)
> + f2fs_fault_report(sbi->sb, REPORT_FAULT_STOP_CP, __func__, reason);
> +
> f2fs_build_fault_attr(sbi, 0, 0, FAULT_ALL);
> if (!end_io)
> f2fs_flush_merged_writes(sbi);
> diff --git a/include/trace/events/f2fs.h b/include/trace/events/f2fs.h
> index 9364e6775562..b97bc3bf499a 100644
> --- a/include/trace/events/f2fs.h
> +++ b/include/trace/events/f2fs.h
> @@ -2582,6 +2582,34 @@ DEFINE_EVENT(f2fs_priority_update, f2fs_priority_restore,
> TP_ARGS(sbi, lock_name, is_write, p, orig_prio, new_prio)
> );
>
> +TRACE_EVENT(f2fs_fault_report,
> +
> + TP_PROTO(struct super_block *sb, unsigned int err_code,
> + const char *func, unsigned int data),
> +
> + TP_ARGS(sb, err_code, func, data),
> +
> + TP_STRUCT__entry(
> + __field(dev_t, dev)
> + __field(unsigned int, err_code)
> + __string(func, func)
> + __field(unsigned int, data)
> + ),
> +
> + TP_fast_assign(
> + __entry->dev = sb->s_dev;
> + __entry->err_code = err_code;
> + __assign_str(func, func);
> + __entry->data = data;
> + ),
> +
> + TP_printk("dev = (%d,%d), err_code = %u, func = %s, data = %u",
> + show_dev(__entry->dev),
> + __entry->err_code,
> + __get_str(func),
> + __entry->data)
> +);
> +
> #endif /* _TRACE_F2FS_H */
>
> /* This part must be outside protection */
> --
> 2.43.0
_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2026-05-01 4:58 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-04-15 11:42 [f2fs-dev] [PATCH] [PATCH v2] f2fs: Add trace_f2fs_fault_report liujinbao1
2026-04-17 1:26 ` Chao Yu via Linux-f2fs-devel
[not found] ` <5a216f80-fe22-4134-abb7-28fbd0731b52@gmail.com>
2026-04-17 7:42 ` Chao Yu via Linux-f2fs-devel
2026-04-17 7:43 ` Chao Yu via Linux-f2fs-devel
2026-05-01 4:58 ` Jaegeuk Kim via Linux-f2fs-devel
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox