From d4ea03e670bd2890b71bd34044486cca1eaaa683 Mon Sep 17 00:00:00 2001 From: Eric Dumazet Date: Sun, 6 May 2007 14:49:28 -0700 Subject: [PATCH] --- yaml --- r: 54191 b: refs/heads/master c: 6310984694c8204ad16a2414cd58808fae68e02b h: refs/heads/master i: 54189: cffa96258cd41fd2eed6fd7ca1355405f186b81f 54187: 8595f94a6f40ec2f6c02076a5ef2f15fb397b0fb 54183: fc502559a996f2634ff8162aae74941d8055a983 54175: 35d4a7730189b80b4fb513c7d37054d99d18c56f v: v3 --- [refs] | 2 +- trunk/mm/slab.c | 26 +++++++++++++++----------- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/[refs] b/[refs] index 86a038d1022e..0b07037ea911 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 364fbb29a0105863d76a1f7bbc01783a4af30a75 +refs/heads/master: 6310984694c8204ad16a2414cd58808fae68e02b diff --git a/trunk/mm/slab.c b/trunk/mm/slab.c index ae440b5ba60e..00f98b9f6df1 100644 --- a/trunk/mm/slab.c +++ b/trunk/mm/slab.c @@ -1223,19 +1223,20 @@ static int __cpuinit cpuup_callback(struct notifier_block *nfb, */ list_for_each_entry(cachep, &cache_chain, next) { struct array_cache *nc; - struct array_cache *shared; + struct array_cache *shared = NULL; struct array_cache **alien = NULL; nc = alloc_arraycache(node, cachep->limit, cachep->batchcount); if (!nc) goto bad; - shared = alloc_arraycache(node, + if (cachep->shared) { + shared = alloc_arraycache(node, cachep->shared * cachep->batchcount, 0xbaadf00d); - if (!shared) - goto bad; - + if (!shared) + goto bad; + } if (use_alien_caches) { alien = alloc_alien_cache(node, cachep->limit); if (!alien) @@ -1317,8 +1318,8 @@ static int __cpuinit cpuup_callback(struct notifier_block *nfb, shared = l3->shared; if (shared) { - free_block(cachep, l3->shared->entry, - l3->shared->avail, node); + free_block(cachep, shared->entry, + shared->avail, node); l3->shared = NULL; } @@ -3870,12 +3871,15 @@ static int alloc_kmemlist(struct kmem_cache *cachep) goto fail; } - new_shared = alloc_arraycache(node, + new_shared = NULL; + if (cachep->shared) { + new_shared = alloc_arraycache(node, cachep->shared*cachep->batchcount, 0xbaadf00d); - if (!new_shared) { - free_alien_cache(new_alien); - goto fail; + if (!new_shared) { + free_alien_cache(new_alien); + goto fail; + } } l3 = cachep->nodelists[node];