From 4a7c94de04d277d80c9f5abdd92f6ca188ae5728 Mon Sep 17 00:00:00 2001 From: Christoph Lameter Date: Sat, 25 Mar 2006 03:06:46 -0800 Subject: [PATCH] --- yaml --- r: 23510 b: refs/heads/master c: cafeb02e098ecd58fb0bd797b2c9fbba3edf54f8 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/mm/slab.c | 34 +++++++++++++++++----------------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/[refs] b/[refs] index 1497d2abde2a..dcd8f6dad8f5 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: e00946fe2351307eb3eda7a3343530f6d2d1af2e +refs/heads/master: cafeb02e098ecd58fb0bd797b2c9fbba3edf54f8 diff --git a/trunk/mm/slab.c b/trunk/mm/slab.c index 351aa6c587f7..ef9f60fe37d6 100644 --- a/trunk/mm/slab.c +++ b/trunk/mm/slab.c @@ -3424,37 +3424,38 @@ static int alloc_kmemlist(struct kmem_cache *cachep) { int node; struct kmem_list3 *l3; - int err = 0; + struct array_cache *new_shared; + struct array_cache **new_alien; for_each_online_node(node) { - struct array_cache *nc = NULL, *new; - struct array_cache **new_alien = NULL; -#ifdef CONFIG_NUMA + new_alien = alloc_alien_cache(node, cachep->limit); if (!new_alien) goto fail; -#endif - new = alloc_arraycache(node, cachep->shared*cachep->batchcount, + + new_shared = alloc_arraycache(node, cachep->shared*cachep->batchcount, 0xbaadf00d); - if (!new) + if (!new_shared) goto fail; + l3 = cachep->nodelists[node]; if (l3) { + struct array_cache *shared = l3->shared; + spin_lock_irq(&l3->list_lock); - nc = cachep->nodelists[node]->shared; - if (nc) - free_block(cachep, nc->entry, nc->avail, node); + if (shared) + free_block(cachep, shared->entry, shared->avail, node); - l3->shared = new; - if (!cachep->nodelists[node]->alien) { + l3->shared = new_shared; + if (!l3->alien) { l3->alien = new_alien; new_alien = NULL; } l3->free_limit = (1 + nr_cpus_node(node)) * cachep->batchcount + cachep->num; spin_unlock_irq(&l3->list_lock); - kfree(nc); + kfree(shared); free_alien_cache(new_alien); continue; } @@ -3465,16 +3466,15 @@ static int alloc_kmemlist(struct kmem_cache *cachep) kmem_list3_init(l3); l3->next_reap = jiffies + REAPTIMEOUT_LIST3 + ((unsigned long)cachep) % REAPTIMEOUT_LIST3; - l3->shared = new; + l3->shared = new_shared; l3->alien = new_alien; l3->free_limit = (1 + nr_cpus_node(node)) * cachep->batchcount + cachep->num; cachep->nodelists[node] = l3; } - return err; + return 0; fail: - err = -ENOMEM; - return err; + return -ENOMEM; } struct ccupdate_struct {