check_spinlock_acquired(cachep);   cachep->lists.free_objects += nr_objects;
struct kmem_list3 *l3;
static void free_block(kmem_cache_t *cachep, void **objpp, int nr_objects){	int i;	check_spinlock_acquired(cachep);	/* NUMA: move add into loop */	cachep->lists.free_objects += nr_objects;	for (i = 0; i < nr_objects; i++) {		void *objp = objpp[i];		struct slab *slabp;		unsigned int objnr;		slabp = GET_PAGE_SLAB(virt_to_page(objp));		list_del(&slabp->list);		objnr = (objp - slabp->s_mem) / cachep->objsize;		check_slabp(cachep, slabp);#if DEBUG		if (slab_bufctl(slabp)[objnr] != BUFCTL_FREE) {			printk(KERN_ERR "slab: double free detected in cache '%s', objp %p.\n",						cachep->name, objp);			BUG();		}#endif		slab_bufctl(slabp)[objnr] = slabp->free;		slabp->free = objnr;		STATS_DEC_ACTIVE(cachep);		slabp->inuse--;		check_slabp(cachep, slabp);		/* fixup slab chains */		if (slabp->inuse == 0) {			if (cachep->lists.free_objects > cachep->free_limit) {				cachep->lists.free_objects -= cachep->num;				slab_destroy(cachep, slabp);			} else {				list_add(&slabp->list,				&list3_data_ptr(cachep, objp)->slabs_free);			}		} else {			/* Unconditionally move a slab to the end of the			 * partial list on free - maximum time for the			 * other objects to be freed, too.			 */			list_add_tail(&slabp->list,				&list3_data_ptr(cachep, objp)->slabs_partial);		}	}}