mirror of
https://github.com/torvalds/linux.git
synced 2026-06-01 11:03:43 +02:00
f2fs: add a proc entry show inject stats
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> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
This commit is contained in:
parent
539d33455f
commit
e073e92789
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user