 security_key_free(key); 
static void key_cleanup(void *data){	struct rb_node *_n;	struct key *key; go_again:	/* look for a dead key in the tree */	spin_lock(&key_serial_lock);	for (_n = rb_first(&key_serial_tree); _n; _n = rb_next(_n)) {		key = rb_entry(_n, struct key, serial_node);		if (atomic_read(&key->usage) == 0)			goto found_dead_key;	}	spin_unlock(&key_serial_lock);	return; found_dead_key:	/* we found a dead key - once we've removed it from the tree, we can	 * drop the lock */	rb_erase(&key->serial_node, &key_serial_tree);	spin_unlock(&key_serial_lock);	key_check(key);	/* deal with the user's key tracking and quota */	if (test_bit(KEY_FLAG_IN_QUOTA, &key->flags)) {		spin_lock(&key->user->lock);		key->user->qnkeys--;		key->user->qnbytes -= key->quotalen;		spin_unlock(&key->user->lock);	}	atomic_dec(&key->user->nkeys);	if (test_bit(KEY_FLAG_INSTANTIATED, &key->flags))		atomic_dec(&key->user->nikeys);	key_user_put(key->user);	/* now throw away the key memory */	if (key->type->destroy)		key->type->destroy(key);	kfree(key->description);#ifdef KEY_DEBUGGING	key->magic = KEY_DEBUG_MAGIC_X;#endif	kmem_cache_free(key_jar, key);	/* there may, of course, be more than one key to destroy */	goto go_again;} /* end key_cleanup() */
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/29db9190634067c5a328ee5fcc2890251b836b4b/key.c/clean/security/keys/key.c