From 28ccd4e6fcadac07bbce4dcb6cc84909d84eb73a Mon Sep 17 00:00:00 2001 From: Eric Dumazet Date: Tue, 22 Nov 2011 16:02:02 +0100 Subject: [PATCH] --- yaml --- r: 276043 b: refs/heads/master c: bc6697d8a506dedf09e8e9974ffa3a316183e608 h: refs/heads/master i: 276041: 5e021e6db90e58618ccd8424b7c6122f3bbf9ea1 276039: 2f217b7d39a2df7e31a012c115c7a6576443d9b3 v: v3 --- [refs] | 2 +- trunk/mm/slub.c | 21 +++++++++++---------- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/[refs] b/[refs] index b2e485d92031..9e95c11f09cf 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 42d623a8cd08eb93ab221d22cee5a62618895bbf +refs/heads/master: bc6697d8a506dedf09e8e9974ffa3a316183e608 diff --git a/trunk/mm/slub.c b/trunk/mm/slub.c index 2a9cfd72a3d7..ed3334d9b6da 100644 --- a/trunk/mm/slub.c +++ b/trunk/mm/slub.c @@ -4444,30 +4444,31 @@ static ssize_t show_slab_objects(struct kmem_cache *s, for_each_possible_cpu(cpu) { struct kmem_cache_cpu *c = per_cpu_ptr(s->cpu_slab, cpu); + int node = ACCESS_ONCE(c->node); struct page *page; - if (!c || c->node < 0) + if (node < 0) continue; - - if (c->page) { - if (flags & SO_TOTAL) - x = c->page->objects; + page = ACCESS_ONCE(c->page); + if (page) { + if (flags & SO_TOTAL) + x = page->objects; else if (flags & SO_OBJECTS) - x = c->page->inuse; + x = page->inuse; else x = 1; total += x; - nodes[c->node] += x; + nodes[node] += x; } page = c->partial; if (page) { x = page->pobjects; - total += x; - nodes[c->node] += x; + total += x; + nodes[node] += x; } - per_cpu[c->node]++; + per_cpu[node]++; } }