Blame view
mm/failslab.c
1.64 KB
773ff60e8 SLUB: failslab su... |
1 |
#include <linux/fault-inject.h> |
4c13dd3b4 failslab: add abi... |
2 |
#include <linux/slab.h> |
773ff60e8 SLUB: failslab su... |
3 4 5 6 |
static struct { struct fault_attr attr; u32 ignore_gfp_wait; |
4c13dd3b4 failslab: add abi... |
7 |
int cache_filter; |
773ff60e8 SLUB: failslab su... |
8 9 |
#ifdef CONFIG_FAULT_INJECTION_DEBUG_FS struct dentry *ignore_gfp_wait_file; |
4c13dd3b4 failslab: add abi... |
10 |
struct dentry *cache_filter_file; |
773ff60e8 SLUB: failslab su... |
11 12 13 14 |
#endif } failslab = { .attr = FAULT_ATTR_INITIALIZER, .ignore_gfp_wait = 1, |
4c13dd3b4 failslab: add abi... |
15 |
.cache_filter = 0, |
773ff60e8 SLUB: failslab su... |
16 |
}; |
4c13dd3b4 failslab: add abi... |
17 |
bool should_failslab(size_t size, gfp_t gfpflags, unsigned long cache_flags) |
773ff60e8 SLUB: failslab su... |
18 19 20 21 22 23 |
{ if (gfpflags & __GFP_NOFAIL) return false; if (failslab.ignore_gfp_wait && (gfpflags & __GFP_WAIT)) return false; |
4c13dd3b4 failslab: add abi... |
24 25 |
if (failslab.cache_filter && !(cache_flags & SLAB_FAILSLAB)) return false; |
773ff60e8 SLUB: failslab su... |
26 27 28 29 30 31 32 33 34 35 |
return should_fail(&failslab.attr, size); } static int __init setup_failslab(char *str) { return setup_fault_attr(&failslab.attr, str); } __setup("failslab=", setup_failslab); #ifdef CONFIG_FAULT_INJECTION_DEBUG_FS |
773ff60e8 SLUB: failslab su... |
36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
static int __init failslab_debugfs_init(void) { mode_t mode = S_IFREG | S_IRUSR | S_IWUSR; struct dentry *dir; int err; err = init_fault_attr_dentries(&failslab.attr, "failslab"); if (err) return err; dir = failslab.attr.dentries.dir; failslab.ignore_gfp_wait_file = debugfs_create_bool("ignore-gfp-wait", mode, dir, &failslab.ignore_gfp_wait); |
4c13dd3b4 failslab: add abi... |
50 51 52 53 54 55 |
failslab.cache_filter_file = debugfs_create_bool("cache-filter", mode, dir, &failslab.cache_filter); if (!failslab.ignore_gfp_wait_file || !failslab.cache_filter_file) { |
773ff60e8 SLUB: failslab su... |
56 |
err = -ENOMEM; |
4c13dd3b4 failslab: add abi... |
57 |
debugfs_remove(failslab.cache_filter_file); |
773ff60e8 SLUB: failslab su... |
58 59 60 61 62 63 64 65 66 67 |
debugfs_remove(failslab.ignore_gfp_wait_file); cleanup_fault_attr_dentries(&failslab.attr); } return err; } late_initcall(failslab_debugfs_init); #endif /* CONFIG_FAULT_INJECTION_DEBUG_FS */ |