fault injection: fix failslab with CONFIG_NUMA
Currently failslab injects failures into ____cache_alloc(). But with enabling CONFIG_NUMA it's not enough to let actual slab allocator functions (kmalloc, kmem_cache_alloc, ...) return NULL. This patch moves fault injection hook inside of __cache_alloc() and __cache_alloc_node(). These are lower call path than ____cache_alloc() and enable to inject faulures to slab allocators with CONFIG_NUMA. Acked-by: Pekka Enberg <penberg@cs.helsinki.fi> Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com> Cc: Christoph Lameter <clameter@sgi.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
f0f3980b21
commit
824ebef122
1 changed files with 7 additions and 4 deletions
11
mm/slab.c
11
mm/slab.c
|
@ -3170,7 +3170,7 @@ static int __init failslab_debugfs(void)
|
|||
struct dentry *dir;
|
||||
int err;
|
||||
|
||||
err = init_fault_attr_dentries(&failslab.attr, "failslab");
|
||||
err = init_fault_attr_dentries(&failslab.attr, "failslab");
|
||||
if (err)
|
||||
return err;
|
||||
dir = failslab.attr.dentries.dir;
|
||||
|
@ -3208,9 +3208,6 @@ static inline void *____cache_alloc(struct kmem_cache *cachep, gfp_t flags)
|
|||
|
||||
check_irq_off();
|
||||
|
||||
if (should_failslab(cachep, flags))
|
||||
return NULL;
|
||||
|
||||
ac = cpu_cache_get(cachep);
|
||||
if (likely(ac->avail)) {
|
||||
STATS_INC_ALLOCHIT(cachep);
|
||||
|
@ -3402,6 +3399,9 @@ __cache_alloc_node(struct kmem_cache *cachep, gfp_t flags, int nodeid,
|
|||
unsigned long save_flags;
|
||||
void *ptr;
|
||||
|
||||
if (should_failslab(cachep, flags))
|
||||
return NULL;
|
||||
|
||||
cache_alloc_debugcheck_before(cachep, flags);
|
||||
local_irq_save(save_flags);
|
||||
|
||||
|
@ -3472,6 +3472,9 @@ __cache_alloc(struct kmem_cache *cachep, gfp_t flags, void *caller)
|
|||
unsigned long save_flags;
|
||||
void *objp;
|
||||
|
||||
if (should_failslab(cachep, flags))
|
||||
return NULL;
|
||||
|
||||
cache_alloc_debugcheck_before(cachep, flags);
|
||||
local_irq_save(save_flags);
|
||||
objp = __do_cache_alloc(cachep, flags);
|
||||
|
|
Loading…
Reference in a new issue