static inline key_ref_t __key_update(key_ref_t key_ref,				     const void *payload, size_t plen){	struct key *key = key_ref_to_ptr(key_ref);	int ret;	/* need write permission on the key to update it */	ret = -EACCES;	if (!key_permission(key_ref, KEY_WRITE))		goto error;	ret = -EEXIST;	if (!key->type->update)		goto error;	down_write(&key->sem);	ret = key->type->update(key, payload, plen);	if (ret == 0)		/* updating a negative key instantiates it */		clear_bit(KEY_FLAG_NEGATIVE, &key->flags);	up_write(&key->sem);	if (ret < 0)		goto error;out:	return key_ref;error:	key_put(key);	key_ref = ERR_PTR(ret);	goto out;} /* end __key_update() */
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/29db9190634067c5a328ee5fcc2890251b836b4b/key.c/clean/security/keys/key.c