diff options
Diffstat (limited to 'mm')
-rw-r--r-- | mm/slub.c | 21 |
1 files changed, 11 insertions, 10 deletions
@@ -4444,30 +4444,31 @@ static ssize_t show_slab_objects(struct kmem_cache *s, | |||
4444 | 4444 | ||
4445 | for_each_possible_cpu(cpu) { | 4445 | for_each_possible_cpu(cpu) { |
4446 | struct kmem_cache_cpu *c = per_cpu_ptr(s->cpu_slab, cpu); | 4446 | struct kmem_cache_cpu *c = per_cpu_ptr(s->cpu_slab, cpu); |
4447 | int node = ACCESS_ONCE(c->node); | ||
4447 | struct page *page; | 4448 | struct page *page; |
4448 | 4449 | ||
4449 | if (!c || c->node < 0) | 4450 | if (node < 0) |
4450 | continue; | 4451 | continue; |
4451 | 4452 | page = ACCESS_ONCE(c->page); | |
4452 | if (c->page) { | 4453 | if (page) { |
4453 | if (flags & SO_TOTAL) | 4454 | if (flags & SO_TOTAL) |
4454 | x = c->page->objects; | 4455 | x = page->objects; |
4455 | else if (flags & SO_OBJECTS) | 4456 | else if (flags & SO_OBJECTS) |
4456 | x = c->page->inuse; | 4457 | x = page->inuse; |
4457 | else | 4458 | else |
4458 | x = 1; | 4459 | x = 1; |
4459 | 4460 | ||
4460 | total += x; | 4461 | total += x; |
4461 | nodes[c->node] += x; | 4462 | nodes[node] += x; |
4462 | } | 4463 | } |
4463 | page = c->partial; | 4464 | page = c->partial; |
4464 | 4465 | ||
4465 | if (page) { | 4466 | if (page) { |
4466 | x = page->pobjects; | 4467 | x = page->pobjects; |
4467 | total += x; | 4468 | total += x; |
4468 | nodes[c->node] += x; | 4469 | nodes[node] += x; |
4469 | } | 4470 | } |
4470 | per_cpu[c->node]++; | 4471 | per_cpu[node]++; |
4471 | } | 4472 | } |
4472 | } | 4473 | } |
4473 | 4474 | ||