Skip to content

Commit

Permalink
[PATCH] alloc_kmemlist: Some cleanup in preparation for a real memory…
Browse files Browse the repository at this point in the history
… leak fix

Inspired by Jesper Juhl's patch from today

1. Get rid of err
	We do not set it to anything else but zero.

2. Drop the CONFIG_NUMA stuff.
	There are definitions for alloc_alien_cache and free_alien_cache()
	that do the right thing for the non NUMA case.

3. Better naming of variables.

4. Remove redundant cachep->nodelists[node] expressions.

Signed-off-by: Christoph Lameter <clameter@sgi.com>
Signed-off-by: Jesper Juhl <jesper.juhl@gmail.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
  • Loading branch information
Christoph Lameter authored and Linus Torvalds committed Mar 25, 2006
1 parent e00946f commit cafeb02
Showing 1 changed file with 17 additions and 17 deletions.
34 changes: 17 additions & 17 deletions mm/slab.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand All @@ -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 {
Expand Down

0 comments on commit cafeb02

Please sign in to comment.