mirror of https://gitee.com/openkylin/linux.git
[PATCH] mm: fallback_alloc cpuset_zone_allowed irq fix
fallback_alloc() could end up calling cpuset_zone_allowed() with interrupts disabled (by code in kmem_cache_alloc_node()), but without __GFP_HARDWALL set, leading to a possible call of a sleeping function with interrupts disabled. This results in the BUG report: BUG: sleeping function called from invalid context at kernel/cpuset.c:1520 in_atomic():0, irqs_disabled():1 Thanks to Paul Menage for catching this one. Signed-off-by: Paul Jackson <pj@sgi.com> Cc: Paul Menage <menage@google.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
01a732eb22
commit
b8b50b6519
|
@ -3182,7 +3182,7 @@ void *fallback_alloc(struct kmem_cache *cache, gfp_t flags)
|
|||
for (z = zonelist->zones; *z && !obj; z++) {
|
||||
nid = zone_to_nid(*z);
|
||||
|
||||
if (cpuset_zone_allowed(*z, flags) &&
|
||||
if (cpuset_zone_allowed(*z, flags | __GFP_HARDWALL) &&
|
||||
cache->nodelists[nid] &&
|
||||
cache->nodelists[nid]->free_objects)
|
||||
obj = ____cache_alloc_node(cache,
|
||||
|
|
Loading…
Reference in New Issue