~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/mm/failslab.c

Version: ~ [ linux-5.6 ] ~ [ linux-5.5.13 ] ~ [ linux-5.4.28 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.113 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.174 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.217 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.217 ] ~ [ linux-4.3.6 ] ~ [ linux-4.2.8 ] ~ [ linux-4.1.52 ] ~ [ linux-4.0.9 ] ~ [ linux-3.19.8 ] ~ [ linux-3.18.140 ] ~ [ linux-3.17.8 ] ~ [ linux-3.16.82 ] ~ [ linux-3.15.10 ] ~ [ linux-3.14.79 ] ~ [ linux-3.13.11 ] ~ [ linux-3.12.74 ] ~ [ linux-3.11.10 ] ~ [ linux-3.10.108 ] ~ [ linux-3.9.11 ] ~ [ linux-3.8.13 ] ~ [ linux-3.7.10 ] ~ [ linux-3.6.11 ] ~ [ linux-3.5.7 ] ~ [ linux-3.4.113 ] ~ [ linux-3.3.8 ] ~ [ linux-3.2.102 ] ~ [ linux-3.1.10 ] ~ [ linux-3.0.101 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.5 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 // SPDX-License-Identifier: GPL-2.0
  2 #include <linux/fault-inject.h>
  3 #include <linux/slab.h>
  4 #include <linux/mm.h>
  5 #include "slab.h"
  6 
  7 static struct {
  8         struct fault_attr attr;
  9         bool ignore_gfp_reclaim;
 10         bool cache_filter;
 11 } failslab = {
 12         .attr = FAULT_ATTR_INITIALIZER,
 13         .ignore_gfp_reclaim = true,
 14         .cache_filter = false,
 15 };
 16 
 17 bool __should_failslab(struct kmem_cache *s, gfp_t gfpflags)
 18 {
 19         /* No fault-injection for bootstrap cache */
 20         if (unlikely(s == kmem_cache))
 21                 return false;
 22 
 23         if (gfpflags & __GFP_NOFAIL)
 24                 return false;
 25 
 26         if (failslab.ignore_gfp_reclaim && (gfpflags & __GFP_RECLAIM))
 27                 return false;
 28 
 29         if (failslab.cache_filter && !(s->flags & SLAB_FAILSLAB))
 30                 return false;
 31 
 32         return should_fail(&failslab.attr, s->object_size);
 33 }
 34 
 35 static int __init setup_failslab(char *str)
 36 {
 37         return setup_fault_attr(&failslab.attr, str);
 38 }
 39 __setup("failslab=", setup_failslab);
 40 
 41 #ifdef CONFIG_FAULT_INJECTION_DEBUG_FS
 42 static int __init failslab_debugfs_init(void)
 43 {
 44         struct dentry *dir;
 45         umode_t mode = S_IFREG | 0600;
 46 
 47         dir = fault_create_debugfs_attr("failslab", NULL, &failslab.attr);
 48         if (IS_ERR(dir))
 49                 return PTR_ERR(dir);
 50 
 51         if (!debugfs_create_bool("ignore-gfp-wait", mode, dir,
 52                                 &failslab.ignore_gfp_reclaim))
 53                 goto fail;
 54         if (!debugfs_create_bool("cache-filter", mode, dir,
 55                                 &failslab.cache_filter))
 56                 goto fail;
 57 
 58         return 0;
 59 fail:
 60         debugfs_remove_recursive(dir);
 61 
 62         return -ENOMEM;
 63 }
 64 
 65 late_initcall(failslab_debugfs_init);
 66 
 67 #endif /* CONFIG_FAULT_INJECTION_DEBUG_FS */
 68 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | Wiki (Japanese) | Wiki (English) | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

osdn.jp