free_block(cachep, nc->entry, nc->avail); 
free_block(cachep, nc->entry, nc->avail, node); 
static int __devinit cpuup_callback(struct notifier_block *nfb,				  unsigned long action, void *hcpu){	long cpu = (long)hcpu;	kmem_cache_t* cachep;	struct kmem_list3 *l3 = NULL;	int node = cpu_to_node(cpu);	int memsize = sizeof(struct kmem_list3);	struct array_cache *nc = NULL;	switch (action) {	case CPU_UP_PREPARE:		down(&cache_chain_sem);		/* we need to do this right in the beginning since		 * alloc_arraycache's are going to use this list.		 * kmalloc_node allows us to add the slab to the right		 * kmem_list3 and not this cpu's kmem_list3		 */		list_for_each_entry(cachep, &cache_chain, next) {			/* setup the size64 kmemlist for cpu before we can			 * begin anything. Make sure some other cpu on this			 * node has not already allocated this			 */			if (!cachep->nodelists[node]) {				if (!(l3 = kmalloc_node(memsize,						GFP_KERNEL, node)))					goto bad;				kmem_list3_init(l3);				l3->next_reap = jiffies + REAPTIMEOUT_LIST3 +				  ((unsigned long)cachep)%REAPTIMEOUT_LIST3;				cachep->nodelists[node] = l3;			}			spin_lock_irq(&cachep->nodelists[node]->list_lock);			cachep->nodelists[node]->free_limit =				(1 + nr_cpus_node(node)) *				cachep->batchcount + cachep->num;			spin_unlock_irq(&cachep->nodelists[node]->list_lock);		}		/* Now we can go ahead with allocating the shared array's		  & array cache's */		list_for_each_entry(cachep, &cache_chain, next) {			nc = alloc_arraycache(node, cachep->limit,					cachep->batchcount);			if (!nc)				goto bad;			cachep->array[cpu] = nc;			l3 = cachep->nodelists[node];			BUG_ON(!l3);			if (!l3->shared) {				if (!(nc = alloc_arraycache(node,					cachep->shared*cachep->batchcount,					0xbaadf00d)))					goto  bad;				/* we are serialised from CPU_DEAD or				  CPU_UP_CANCELLED by the cpucontrol lock */				l3->shared = nc;			}		}		up(&cache_chain_sem);		break;	case CPU_ONLINE:		start_cpu_timer(cpu);		break;#ifdef CONFIG_HOTPLUG_CPU	case CPU_DEAD:		/* fall thru */	case CPU_UP_CANCELED:		down(&cache_chain_sem);		list_for_each_entry(cachep, &cache_chain, next) {			struct array_cache *nc;			cpumask_t mask;			mask = node_to_cpumask(node);			spin_lock_irq(&cachep->spinlock);			/* cpu is dead; no one can alloc from it. */			nc = cachep->array[cpu];			cachep->array[cpu] = NULL;			l3 = cachep->nodelists[node];			if (!l3)				goto unlock_cache;			spin_lock(&l3->list_lock);			/* Free limit for this kmem_list3 */			l3->free_limit -= cachep->batchcount;			if (nc)				free_block(cachep, nc->entry, nc->avail);			if (!cpus_empty(mask)) {                                spin_unlock(&l3->list_lock);                                goto unlock_cache;                        }			if (l3->shared) {				free_block(cachep, l3->shared->entry,						l3->shared->avail);				kfree(l3->shared);				l3->shared = NULL;			}			if (l3->alien) {				drain_alien_cache(cachep, l3);				free_alien_cache(l3->alien);				l3->alien = NULL;			}			/* free slabs belonging to this node */			if (__node_shrink(cachep, node)) {				cachep->nodelists[node] = NULL;				spin_unlock(&l3->list_lock);				kfree(l3);			} else {				spin_unlock(&l3->list_lock);			}unlock_cache:			spin_unlock_irq(&cachep->spinlock);			kfree(nc);		}		up(&cache_chain_sem);		break;#endif	}	return NOTIFY_OK;bad:	up(&cache_chain_sem);	return NOTIFY_BAD;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/ff69416e6323fe9d38c42a06ebdefeb58bbe9336/slab.c/buggy/mm/slab.c