Chao Yu via Linux-f2fs-devel <linux-f2fs-devel@lists.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 <c...@kernel.org>
Reviewed-by: Zhiguo Niu <zhiguo....@unisoc.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@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel _______________________________________________ Linux-f2fs-devel mailing list Linux-f2fs-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel