diff options
Diffstat (limited to 'mm/failslab.c')
| -rw-r--r-- | mm/failslab.c | 14 | 
1 files changed, 8 insertions, 6 deletions
| diff --git a/mm/failslab.c b/mm/failslab.c index ffc420c0e767..af16c2ed578f 100644 --- a/mm/failslab.c +++ b/mm/failslab.c @@ -1,5 +1,6 @@  // SPDX-License-Identifier: GPL-2.0  #include <linux/fault-inject.h> +#include <linux/error-injection.h>  #include <linux/slab.h>  #include <linux/mm.h>  #include "slab.h" @@ -14,23 +15,23 @@ static struct {  	.cache_filter = false,  }; -bool __should_failslab(struct kmem_cache *s, gfp_t gfpflags) +int should_failslab(struct kmem_cache *s, gfp_t gfpflags)  {  	int flags = 0;  	/* No fault-injection for bootstrap cache */  	if (unlikely(s == kmem_cache)) -		return false; +		return 0;  	if (gfpflags & __GFP_NOFAIL) -		return false; +		return 0;  	if (failslab.ignore_gfp_reclaim &&  			(gfpflags & __GFP_DIRECT_RECLAIM)) -		return false; +		return 0;  	if (failslab.cache_filter && !(s->flags & SLAB_FAILSLAB)) -		return false; +		return 0;  	/*  	 * In some cases, it expects to specify __GFP_NOWARN @@ -41,8 +42,9 @@ bool __should_failslab(struct kmem_cache *s, gfp_t gfpflags)  	if (gfpflags & __GFP_NOWARN)  		flags |= FAULT_NOWARN; -	return should_fail_ex(&failslab.attr, s->object_size, flags); +	return should_fail_ex(&failslab.attr, s->object_size, flags) ? -ENOMEM : 0;  } +ALLOW_ERROR_INJECTION(should_failslab, ERRNO);  static int __init setup_failslab(char *str)  { |