if (value) kfree(value); 
kfree(value); 
reiserfs_set_acl(struct inode *inode, int type, struct posix_acl *acl){	char *name;	void *value = NULL;	struct posix_acl **p_acl;	size_t size;	int error;	struct reiserfs_inode_info *reiserfs_i = REISERFS_I(inode);	if (S_ISLNK(inode->i_mode))		return -EOPNOTSUPP;	switch (type) {	case ACL_TYPE_ACCESS:		name = POSIX_ACL_XATTR_ACCESS;		p_acl = &reiserfs_i->i_acl_access;		if (acl) {			mode_t mode = inode->i_mode;			error = posix_acl_equiv_mode(acl, &mode);			if (error < 0)				return error;			else {				inode->i_mode = mode;				if (error == 0)					acl = NULL;			}		}		break;	case ACL_TYPE_DEFAULT:		name = POSIX_ACL_XATTR_DEFAULT;		p_acl = &reiserfs_i->i_acl_default;		if (!S_ISDIR(inode->i_mode))			return acl ? -EACCES : 0;		break;	default:		return -EINVAL;	}	if (acl) {		value = posix_acl_to_disk(acl, &size);		if (IS_ERR(value))			return (int)PTR_ERR(value);		error = reiserfs_xattr_set(inode, name, value, size, 0);	} else {		error = reiserfs_xattr_del(inode, name);		if (error == -ENODATA) {			/* This may seem odd here, but it means that the ACL was set			 * with a value representable with mode bits. If there was			 * an ACL before, reiserfs_xattr_del already dirtied the inode.			 */			mark_inode_dirty(inode);			error = 0;		}	}	if (value)		kfree(value);	if (!error) {		/* Release the old one */		if (!IS_ERR(*p_acl) && *p_acl)			posix_acl_release(*p_acl);		if (acl == NULL)			*p_acl = ERR_PTR(-ENODATA);		else			*p_acl = posix_acl_dup(acl);	}	return error;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/833d304b22edff5cc687ab7e5549c2f0dcdd951a/xattr_acl.c/clean/fs/reiserfs/xattr_acl.c