From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paul Jackson Date: Wed, 06 Dec 2006 02:49:51 -0800 Message-Id: <20061206104951.766.40407.sendpatchset@v0> Subject: [PATCH] mm: fallback_alloc cpuset_zone_allowed irq fix Sender: owner-linux-mm@kvack.org From: Paul Jackson Return-Path: To: Andrew Morton , linux-kernel@vger.kernel.org Cc: linux-mm@kvack.org, menage@google.com, Paul Jackson , clameter@sgi.com List-ID: 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 --- mm/slab.c | 3 ++- 1 files changed, 2 insertions(+), 1 deletion(-) --- 2.6.19-rc6-mm2.orig/mm/slab.c 2006-11-30 19:45:50.000000000 -0800 +++ 2.6.19-rc6-mm2/mm/slab.c 2006-12-05 22:41:49.000000000 -0800 @@ -3261,7 +3261,8 @@ void *fallback_alloc(struct kmem_cache * int nid = zone_to_nid(*z); if (zone_idx(*z) <= ZONE_NORMAL && - cpuset_zone_allowed(*z, flags) && + cpuset_zone_allowed(*z, + flags | __GFP_HARDWALL) && cache->nodelists[nid]) obj = ____cache_alloc_node(cache, flags | __GFP_THISNODE, nid); -- I won't rest till it's the best ... Programmer, Linux Scalability Paul Jackson 1.925.600.0401 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org