root/mm/failslab.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. __should_failslab
  2. setup_failslab
  3. failslab_debugfs_init

   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 &&
  27                         (gfpflags & __GFP_DIRECT_RECLAIM))
  28                 return false;
  29 
  30         if (failslab.cache_filter && !(s->flags & SLAB_FAILSLAB))
  31                 return false;
  32 
  33         return should_fail(&failslab.attr, s->object_size);
  34 }
  35 
  36 static int __init setup_failslab(char *str)
  37 {
  38         return setup_fault_attr(&failslab.attr, str);
  39 }
  40 __setup("failslab=", setup_failslab);
  41 
  42 #ifdef CONFIG_FAULT_INJECTION_DEBUG_FS
  43 static int __init failslab_debugfs_init(void)
  44 {
  45         struct dentry *dir;
  46         umode_t mode = S_IFREG | 0600;
  47 
  48         dir = fault_create_debugfs_attr("failslab", NULL, &failslab.attr);
  49         if (IS_ERR(dir))
  50                 return PTR_ERR(dir);
  51 
  52         debugfs_create_bool("ignore-gfp-wait", mode, dir,
  53                             &failslab.ignore_gfp_reclaim);
  54         debugfs_create_bool("cache-filter", mode, dir,
  55                             &failslab.cache_filter);
  56 
  57         return 0;
  58 }
  59 
  60 late_initcall(failslab_debugfs_init);
  61 
  62 #endif /* CONFIG_FAULT_INJECTION_DEBUG_FS */

/* [<][>][^][v][top][bottom][index][help] */