write_lock(&key->lock);  
int key_negate_and_link(struct key *key,			unsigned timeout,			struct key *keyring){	struct timespec now;	int ret, awaken;	key_check(key);	key_check(keyring);	awaken = 0;	ret = -EBUSY;	if (keyring)		down_write(&keyring->sem);	down_write(&key_construction_sem);	/* can't instantiate twice */	if (!(key->flags & KEY_FLAG_INSTANTIATED)) {		/* mark the key as being negatively instantiated */		write_lock(&key->lock);		atomic_inc(&key->user->nikeys);		key->flags |= KEY_FLAG_INSTANTIATED | KEY_FLAG_NEGATIVE;		now = current_kernel_time();		key->expiry = now.tv_sec + timeout;		if (key->flags & KEY_FLAG_USER_CONSTRUCT) {			key->flags &= ~KEY_FLAG_USER_CONSTRUCT;			awaken = 1;		}		write_unlock(&key->lock);		ret = 0;		/* and link it into the destination keyring */		if (keyring)			ret = __key_link(keyring, key);	}	up_write(&key_construction_sem);	if (keyring)		up_write(&keyring->sem);	/* wake up anyone waiting for a key to be constructed */	if (awaken)		wake_up_all(&request_key_conswq);	return ret;} /* end key_negate_and_link() */
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/76d8aeabfeb1c42641a81c44280177b9a08670d8/key.c/clean/security/keys/key.c