diff options
Diffstat (limited to 'fs/xfs/xfs_acl.c')
| -rw-r--r-- | fs/xfs/xfs_acl.c | 14 | 
1 files changed, 5 insertions, 9 deletions
diff --git a/fs/xfs/xfs_acl.c b/fs/xfs/xfs_acl.c index cbda40d40326..96d7071cfa46 100644 --- a/fs/xfs/xfs_acl.c +++ b/fs/xfs/xfs_acl.c @@ -112,7 +112,7 @@ xfs_get_acl(struct inode *inode, int type)  {  	struct xfs_inode *ip = XFS_I(inode);  	struct posix_acl *acl = NULL; -	struct xfs_acl *xfs_acl; +	struct xfs_acl *xfs_acl = NULL;  	unsigned char *ea_name;  	int error;  	int len; @@ -135,12 +135,8 @@ xfs_get_acl(struct inode *inode, int type)  	 * go out to the disk.  	 */  	len = XFS_ACL_MAX_SIZE(ip->i_mount); -	xfs_acl = kmem_zalloc_large(len, KM_SLEEP); -	if (!xfs_acl) -		return ERR_PTR(-ENOMEM); - -	error = xfs_attr_get(ip, ea_name, (unsigned char *)xfs_acl, -							&len, ATTR_ROOT); +	error = xfs_attr_get(ip, ea_name, (unsigned char **)&xfs_acl, &len, +				ATTR_ALLOC | ATTR_ROOT);  	if (error) {  		/*  		 * If the attribute doesn't exist make sure we have a negative @@ -151,8 +147,8 @@ xfs_get_acl(struct inode *inode, int type)  	} else  {  		acl = xfs_acl_from_disk(xfs_acl, len,  					XFS_ACL_MAX_ENTRIES(ip->i_mount)); +		kmem_free(xfs_acl);  	} -	kmem_free(xfs_acl);  	return acl;  } @@ -180,7 +176,7 @@ __xfs_set_acl(struct inode *inode, struct posix_acl *acl, int type)  		struct xfs_acl *xfs_acl;  		int len = XFS_ACL_MAX_SIZE(ip->i_mount); -		xfs_acl = kmem_zalloc_large(len, KM_SLEEP); +		xfs_acl = kmem_zalloc_large(len, 0);  		if (!xfs_acl)  			return -ENOMEM;  |