summaryrefslogtreecommitdiff
path: root/mm/failslab.c
diff options
context:
space:
mode:
authorMarcel Ziswiler <marcel.ziswiler@toradex.com>2012-11-12 15:28:39 +0100
committerMarcel Ziswiler <marcel.ziswiler@toradex.com>2012-11-12 15:28:39 +0100
commitf987e832a9e79d2ce8009a5ea9c7b677624b3b30 (patch)
tree0dd09a5e6b4c60ee0a9916907dfc2cda83f3e496 /mm/failslab.c
parentf737b7f46a72c099cf8ac88baff02fbf61b1a47c (diff)
parentfc993d9bc48f772133d8cd156c67c296477db070 (diff)
Merge branch 'l4t/l4t-r16-r2' into colibri
Conflicts: arch/arm/mach-tegra/tegra3_usb_phy.c arch/arm/mach-tegra/usb_phy.c drivers/usb/gadget/tegra_udc.c drivers/usb/otg/Makefile drivers/video/tegra/fb.c sound/soc/tegra/tegra_pcm.c
Diffstat (limited to 'mm/failslab.c')
-rw-r--r--mm/failslab.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/mm/failslab.c b/mm/failslab.c
index 0dd7b8fec71c..49598688c44f 100644
--- a/mm/failslab.c
+++ b/mm/failslab.c
@@ -5,14 +5,29 @@ static struct {
struct fault_attr attr;
u32 ignore_gfp_wait;
int cache_filter;
+ u32 size;
} failslab = {
.attr = FAULT_ATTR_INITIALIZER,
.ignore_gfp_wait = 1,
.cache_filter = 0,
+ .size = 0,
};
+static void fail_dump(struct fault_attr *attr)
+{
+ if (attr->verbose > 0)
+ printk(KERN_NOTICE "FAULT_INJECTION: forcing a failure\n");
+ if (attr->verbose > 1)
+ dump_stack();
+}
+
bool should_failslab(size_t size, gfp_t gfpflags, unsigned long cache_flags)
{
+ if (failslab.size && size > failslab.size) {
+ fail_dump(&failslab.attr);
+ return true;
+ }
+
if (gfpflags & __GFP_NOFAIL)
return false;
@@ -48,6 +63,10 @@ static int __init failslab_debugfs_init(void)
&failslab.cache_filter))
goto fail;
+ if (!debugfs_create_u32("size", mode, dir,
+ &failslab.size))
+ goto fail;
+
return 0;
fail:
debugfs_remove_recursive(dir);