diff options
author | Jaegeuk Kim <jaegeuk@kernel.org> | 2016-04-29 15:49:56 -0700 |
---|---|---|
committer | Jaegeuk Kim <jaegeuk@kernel.org> | 2016-05-07 10:32:22 -0700 |
commit | 2c63fead9e372b3b65d1883bb174df6c9820f1dd (patch) | |
tree | 885acae64bc6daf3c08ea10403b0bb36109b9a76 /fs/f2fs/f2fs.h | |
parent | 73faec4d99358b79815866dd660ae2f9f6f9110a (diff) |
f2fs: inject kmalloc failure
This patch injects kmalloc failure given a fault injection rate.
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Diffstat (limited to 'fs/f2fs/f2fs.h')
-rw-r--r-- | fs/f2fs/f2fs.h | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h index 0cf2a26388e5..cf03c57d0feb 100644 --- a/fs/f2fs/f2fs.h +++ b/fs/f2fs/f2fs.h @@ -37,6 +37,31 @@ } while (0) #endif +#ifdef CONFIG_F2FS_FAULT_INJECTION +enum { + FAULT_KMALLOC, + FAULT_MAX, +}; + +extern u32 f2fs_fault_rate; +extern atomic_t f2fs_ops; +extern char *fault_name[FAULT_MAX]; + +static inline bool time_to_inject(int type) +{ + atomic_inc(&f2fs_ops); + if (f2fs_fault_rate && (atomic_read(&f2fs_ops) >= f2fs_fault_rate)) { + atomic_set(&f2fs_ops, 0); + printk("%sF2FS-fs : inject %s in %pF\n", + KERN_INFO, + fault_name[type], + __builtin_return_address(0)); + return true; + } + return false; +} +#endif + /* * For mount options */ @@ -1647,6 +1672,10 @@ static inline bool f2fs_may_extent_tree(struct inode *inode) static inline void *f2fs_kmalloc(size_t size, gfp_t flags) { +#ifdef CONFIG_F2FS_FAULT_INJECTION + if (time_to_inject(FAULT_KMALLOC)) + return NULL; +#endif return kmalloc(size, flags); } |