[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <CAHJ8P3+Z+LEJysum4ZLO0HGkdYP_JDUfWoTfBiLPcDuHFeBNRw@mail.gmail.com>
Date: Thu, 20 Mar 2025 11:32:57 +0800
From: Zhiguo Niu <niuzhiguo84@...il.com>
To: Chao Yu <chao@...nel.org>
Cc: jaegeuk@...nel.org, linux-kernel@...r.kernel.org,
linux-f2fs-devel@...ts.sourceforge.net
Subject: Re: [f2fs-dev] [PATCH v2 1/2] f2fs: add a proc entry show inject stats
Chao Yu via Linux-f2fs-devel <linux-f2fs-devel@...ts.sourceforge.net>
于2025年3月20日周四 10:27写道:
>
> This patch adds a proc entry named inject_stats to show total injected
> count for each fault type.
>
> cat /proc/fs/f2fs/<dev>/inject_stats
> fault_type injected_count
> kmalloc 0
> kvmalloc 0
> page alloc 0
> page get 0
> alloc bio(obsolete) 0
> alloc nid 0
> orphan 0
> no more block 0
> too big dir depth 0
> evict_inode fail 0
> truncate fail 0
> read IO error 0
> checkpoint error 0
> discard error 0
> write IO error 0
> slab alloc 0
> dquot initialize 0
> lock_op 0
> invalid blkaddr 0
> inconsistent blkaddr 0
> no free segment 0
> inconsistent footer 0
>
> Signed-off-by: Chao Yu <chao@...nel.org>
Reviewed-by: Zhiguo Niu <zhiguo.niu@...soc.com>
thanks!
> ---
> v2:
> - add missing CONFIG_F2FS_FAULT_INJECTION
> fs/f2fs/f2fs.h | 3 +++
> fs/f2fs/super.c | 1 +
> fs/f2fs/sysfs.c | 22 ++++++++++++++++++++++
> 3 files changed, 26 insertions(+)
>
> diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
> index f1576dc6ec67..986ee5b9326d 100644
> --- a/fs/f2fs/f2fs.h
> +++ b/fs/f2fs/f2fs.h
> @@ -73,6 +73,8 @@ struct f2fs_fault_info {
> atomic_t inject_ops;
> int inject_rate;
> unsigned int inject_type;
> + /* Used to account total count of injection for each type */
> + unsigned int inject_count[FAULT_MAX];
> };
>
> extern const char *f2fs_fault_name[FAULT_MAX];
> @@ -1902,6 +1904,7 @@ static inline bool __time_to_inject(struct f2fs_sb_info *sbi, int type,
> atomic_inc(&ffi->inject_ops);
> if (atomic_read(&ffi->inject_ops) >= ffi->inject_rate) {
> atomic_set(&ffi->inject_ops, 0);
> + ffi->inject_count[type]++;
> f2fs_info_ratelimited(sbi, "inject %s in %s of %pS",
> f2fs_fault_name[type], func, parent_func);
> return true;
> diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c
> index f087b2b71c89..dfe0604ab558 100644
> --- a/fs/f2fs/super.c
> +++ b/fs/f2fs/super.c
> @@ -47,6 +47,7 @@ const char *f2fs_fault_name[FAULT_MAX] = {
> [FAULT_KVMALLOC] = "kvmalloc",
> [FAULT_PAGE_ALLOC] = "page alloc",
> [FAULT_PAGE_GET] = "page get",
> + [FAULT_ALLOC_BIO] = "alloc bio(obsolete)",
> [FAULT_ALLOC_NID] = "alloc nid",
> [FAULT_ORPHAN] = "orphan",
> [FAULT_BLOCK] = "no more block",
> diff --git a/fs/f2fs/sysfs.c b/fs/f2fs/sysfs.c
> index c69161366467..46fa94db08a8 100644
> --- a/fs/f2fs/sysfs.c
> +++ b/fs/f2fs/sysfs.c
> @@ -1679,6 +1679,24 @@ static int __maybe_unused disk_map_seq_show(struct seq_file *seq,
> return 0;
> }
>
> +#ifdef CONFIG_F2FS_FAULT_INJECTION
> +static int __maybe_unused inject_stats_seq_show(struct seq_file *seq,
> + void *offset)
> +{
> + struct super_block *sb = seq->private;
> + struct f2fs_sb_info *sbi = F2FS_SB(sb);
> + struct f2fs_fault_info *ffi = &F2FS_OPTION(sbi).fault_info;
> + int i;
> +
> + seq_puts(seq, "fault_type injected_count\n");
> +
> + for (i = 0; i < FAULT_MAX; i++)
> + seq_printf(seq, "%-24s%-10u\n", f2fs_fault_name[i],
> + ffi->inject_count[i]);
> + return 0;
> +}
> +#endif
> +
> int __init f2fs_init_sysfs(void)
> {
> int ret;
> @@ -1770,6 +1788,10 @@ int f2fs_register_sysfs(struct f2fs_sb_info *sbi)
> discard_plist_seq_show, sb);
> proc_create_single_data("disk_map", 0444, sbi->s_proc,
> disk_map_seq_show, sb);
> +#ifdef CONFIG_F2FS_FAULT_INJECTION
> + proc_create_single_data("inject_stats", 0444, sbi->s_proc,
> + inject_stats_seq_show, sb);
> +#endif
> return 0;
> put_feature_list_kobj:
> kobject_put(&sbi->s_feature_list_kobj);
> --
> 2.48.1
>
>
>
> _______________________________________________
> Linux-f2fs-devel mailing list
> Linux-f2fs-devel@...ts.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
Powered by blists - more mailing lists