mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH -mm] slub: update cpu after new_slab()
@ 2007-04-25 15:21 Hugh Dickins
  2007-04-25 15:29 ` Christoph Lameter
  0 siblings, 1 reply; 6+ messages in thread
From: Hugh Dickins @ 2007-04-25 15:21 UTC (permalink / raw)
  To: Andrew Morton; +Cc: Christoph Lameter, linux-kernel

SLUB gave me a NULL pointer dereference in slab_alloc(), in the
slab_lock(page) of its "Current cpuslab is acceptable" block: cpu
1 had been looking at cpu_slab[2], which then went NULL beneath it.
Since new_slab() may reenable interrupts and sleep (when __GFP_WAIT),
we may get rescheduled on a different cpu: so need to reevaluate it.

Signed-off-by: Hugh Dickins <hugh@veritas.com>

--- 2.6.21-rc7-mm1/mm/slub.c	2007-04-24 20:26:48.000000000 +0100
+++ linux/mm/slub.c	2007-04-25 15:49:12.000000000 +0100
@@ -1234,11 +1234,12 @@ have_slab:
 
 	page = new_slab(s, gfpflags, node);
 	if (page) {
+		cpu = smp_processor_id();
 		if (s->cpu_slab[cpu]) {
 			/*
-			 * Someone else populated the cpu_slab while
-			 * we enabled interrupts. The page may not
-			 * be on the requested node.
+			 * Someone else populated the cpu_slab while we enabled
+			 * interrupts, or we have got scheduled on another cpu.
+			 * The page may not be on the requested node.
 			 */
 			if (node == -1 ||
 				page_to_nid(s->cpu_slab[cpu]) == node) {

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2007-04-25 16:21 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2007-04-25 15:21 [PATCH -mm] slub: update cpu after new_slab() Hugh Dickins
2007-04-25 15:29 ` Christoph Lameter
2007-04-25 15:49   ` Hugh Dickins
2007-04-25 15:58     ` Christoph Lameter
2007-04-25 16:13       ` Hugh Dickins
2007-04-25 16:21         ` Christoph Lameter

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®