Blame view
mm/failslab.c
1.29 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 10 |
} failslab = { .attr = FAULT_ATTR_INITIALIZER, .ignore_gfp_wait = 1, |
4c13dd3b4 failslab: add abi... |
11 |
.cache_filter = 0, |
773ff60e8 SLUB: failslab su... |
12 |
}; |
4c13dd3b4 failslab: add abi... |
13 |
bool should_failslab(size_t size, gfp_t gfpflags, unsigned long cache_flags) |
773ff60e8 SLUB: failslab su... |
14 15 16 17 18 19 |
{ if (gfpflags & __GFP_NOFAIL) return false; if (failslab.ignore_gfp_wait && (gfpflags & __GFP_WAIT)) return false; |
4c13dd3b4 failslab: add abi... |
20 21 |
if (failslab.cache_filter && !(cache_flags & SLAB_FAILSLAB)) return false; |
773ff60e8 SLUB: failslab su... |
22 23 24 25 26 27 28 29 30 31 |
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... |
32 33 |
static int __init failslab_debugfs_init(void) { |
dd48c085c fault-injection: ... |
34 |
struct dentry *dir; |
f4ae40a6a switch debugfs to... |
35 |
umode_t mode = S_IFREG | S_IRUSR | S_IWUSR; |
773ff60e8 SLUB: failslab su... |
36 |
|
dd48c085c fault-injection: ... |
37 38 39 |
dir = fault_create_debugfs_attr("failslab", NULL, &failslab.attr); if (IS_ERR(dir)) return PTR_ERR(dir); |
773ff60e8 SLUB: failslab su... |
40 |
|
dd48c085c fault-injection: ... |
41 |
if (!debugfs_create_bool("ignore-gfp-wait", mode, dir, |
810f09b87 failslab: simplif... |
42 43 |
&failslab.ignore_gfp_wait)) goto fail; |
dd48c085c fault-injection: ... |
44 |
if (!debugfs_create_bool("cache-filter", mode, dir, |
810f09b87 failslab: simplif... |
45 46 |
&failslab.cache_filter)) goto fail; |
4c13dd3b4 failslab: add abi... |
47 |
|
810f09b87 failslab: simplif... |
48 49 |
return 0; fail: |
dd48c085c fault-injection: ... |
50 |
debugfs_remove_recursive(dir); |
773ff60e8 SLUB: failslab su... |
51 |
|
810f09b87 failslab: simplif... |
52 |
return -ENOMEM; |
773ff60e8 SLUB: failslab su... |
53 54 55 56 57 |
} late_initcall(failslab_debugfs_init); #endif /* CONFIG_FAULT_INJECTION_DEBUG_FS */ |