Message ID | 20250320022230.1938110-1-chao@kernel.org (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | [f2fs-dev,v2,1/2] f2fs: add a proc entry show inject stats | expand |
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 <chao@kernel.org> Reviewed-by: Zhiguo Niu <zhiguo.niu@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
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);
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@kernel.org> --- 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(+)