Messages in this thread |  | | Date | Fri, 16 Dec 2022 18:47:01 +0800 | Subject | Re: [PATCH] f2fs: merge f2fs_show_injection_info() into time_to_inject() | From | Chao Yu <> |
| |
On 2022/12/16 11:48, Yangtao Li wrote: >> After moving f2fs_show_injection_info() core functionality into time_to_inject(), >> __builtin_return_address(0) result changes from return address of caller of >> f2fs_show_injection_info() to return address of time_to_inject(). > > I tried the __builtin_return_address(1) parameter just now, and no error > was reported when compiling, but a null pointer problem will be triggered > when the kernel is running. > > I thought about it, and the print address didn't seem clear enough. > Let's just print the line number of the caller?
That will cause a regression when searching last injection call paths after bug occurs, since there are many similar callers of time_to_inject, but the caller's call paths are different. So, IMO, it's useful to keep __builtin_return_address in the log to distinguish the real call path of fault injection.
> > #define time_to_inject(sbi, type) __time_to_inject(sbi, type, __func__, __LINE__)
Any way to pass __builtin_return_address(0) from parameter in __time_to_inject(...)?
Thanks,
> static inline bool __time_to_inject(struct f2fs_sb_info *sbi, int type, > const char *func_name, unsigned int line) > { > struct f2fs_fault_info *ffi = &F2FS_OPTION(sbi).fault_info; > > if (!ffi->inject_rate) > return false; > > if (!IS_FAULT_SET(ffi, type)) > return false; > > atomic_inc(&ffi->inject_ops); > if (atomic_read(&ffi->inject_ops) >= ffi->inject_rate) { > atomic_set(&ffi->inject_ops, 0); > printk_ratelimited("%sF2FS-fs (%s) : inject %s in [%s] %d\n", > KERN_INFO, sbi->sb->s_id, f2fs_fault_name[type], > func_name, line); > return true; > } > return false; > } > > Thx, > Yangtao
|  |