atomic_inc(&key->user->nikeys); key->flags |= KEY_FLAG_INSTANTIATED;  if (key->flags & KEY_FLAG_USER_CONSTRUCT) { key->flags &= ~KEY_FLAG_USER_CONSTRUCT; 
if (test_and_clear_bit(KEY_FLAG_USER_CONSTRUCT, &key->flags)) 
static int __key_instantiate_and_link(struct key *key,				      const void *data,				      size_t datalen,				      struct key *keyring){	int ret, awaken;	key_check(key);	key_check(keyring);	awaken = 0;	ret = -EBUSY;	down_write(&key_construction_sem);	/* can't instantiate twice */	if (!(key->flags & KEY_FLAG_INSTANTIATED)) {		/* instantiate the key */		ret = key->type->instantiate(key, data, datalen);		if (ret == 0) {			/* mark the key as being instantiated */			write_lock(&key->lock);			atomic_inc(&key->user->nikeys);			key->flags |= KEY_FLAG_INSTANTIATED;			if (key->flags & KEY_FLAG_USER_CONSTRUCT) {				key->flags &= ~KEY_FLAG_USER_CONSTRUCT;				awaken = 1;			}			write_unlock(&key->lock);			/* and link it into the destination keyring */			if (keyring)				ret = __key_link(keyring, key);		}	}	up_write(&key_construction_sem);	/* wake up anyone waiting for a key to be constructed */	if (awaken)		wake_up_all(&request_key_conswq);	return ret;} /* end __key_instantiate_and_link() */
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/76d8aeabfeb1c42641a81c44280177b9a08670d8/key.c/clean/security/keys/key.c