2021-08-11 13:40:43

by 李扬韬

[permalink] [raw]
Subject: [PATCH v3] f2fs: warn on when fsck flag is set

SBI_NEED_FSCK is an indicator that fsck.f2fs needs to be triggered,
this flag is set in too many places. For some scenes that are not very
reproducible, adding stack information will help locate the problem.

Signed-off-by: Yangtao Li <[email protected]>
---
v3:
-Remove extra parentheses
v2:
-Convert to WARN_ON
-One more blank
fs/f2fs/f2fs.h | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 67faa43cc141..0d08e31214a3 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -33,7 +33,7 @@
#else
#define f2fs_bug_on(sbi, condition) \
do { \
- if (WARN_ON(condition)) \
+ if (condition) \
set_sbi_flag(sbi, SBI_NEED_FSCK); \
} while (0)
#endif
@@ -1999,6 +1999,8 @@ static inline bool is_sbi_flag_set(struct f2fs_sb_info *sbi, unsigned int type)

static inline void set_sbi_flag(struct f2fs_sb_info *sbi, unsigned int type)
{
+ WARN_ON(type == SBI_NEED_FSCK);
+
set_bit(type, &sbi->s_flag);
}

--
2.32.0


2021-08-12 20:52:03

by Jaegeuk Kim

[permalink] [raw]
Subject: Re: [PATCH v3] f2fs: warn on when fsck flag is set

On 08/11, Yangtao Li wrote:
> SBI_NEED_FSCK is an indicator that fsck.f2fs needs to be triggered,
> this flag is set in too many places. For some scenes that are not very
> reproducible, adding stack information will help locate the problem.

Can we add an error history and expose it in sysfs?

>
> Signed-off-by: Yangtao Li <[email protected]>
> ---
> v3:
> -Remove extra parentheses
> v2:
> -Convert to WARN_ON
> -One more blank
> fs/f2fs/f2fs.h | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
> index 67faa43cc141..0d08e31214a3 100644
> --- a/fs/f2fs/f2fs.h
> +++ b/fs/f2fs/f2fs.h
> @@ -33,7 +33,7 @@
> #else
> #define f2fs_bug_on(sbi, condition) \
> do { \
> - if (WARN_ON(condition)) \
> + if (condition) \
> set_sbi_flag(sbi, SBI_NEED_FSCK); \
> } while (0)
> #endif
> @@ -1999,6 +1999,8 @@ static inline bool is_sbi_flag_set(struct f2fs_sb_info *sbi, unsigned int type)
>
> static inline void set_sbi_flag(struct f2fs_sb_info *sbi, unsigned int type)
> {
> + WARN_ON(type == SBI_NEED_FSCK);
> +
> set_bit(type, &sbi->s_flag);
> }
>
> --
> 2.32.0