diff options
Diffstat (limited to 'fs/xfs/xfs_ioctl.c')
| -rw-r--r-- | fs/xfs/xfs_ioctl.c | 14 | 
1 files changed, 10 insertions, 4 deletions
| diff --git a/fs/xfs/xfs_ioctl.c b/fs/xfs/xfs_ioctl.c index 76f3ca5cfc36..f588320dc4b9 100644 --- a/fs/xfs/xfs_ioctl.c +++ b/fs/xfs/xfs_ioctl.c @@ -450,9 +450,12 @@ xfs_attrmulti_attr_get(  	if (*len > XATTR_SIZE_MAX)  		return EINVAL; -	kbuf = kmalloc(*len, GFP_KERNEL); -	if (!kbuf) -		return ENOMEM; +	kbuf = kmem_zalloc(*len, KM_SLEEP | KM_MAYFAIL); +	if (!kbuf) { +		kbuf = kmem_zalloc_large(*len); +		if (!kbuf) +			return ENOMEM; +	}  	error = xfs_attr_get(XFS_I(inode), name, kbuf, (int *)len, flags);  	if (error) @@ -462,7 +465,10 @@ xfs_attrmulti_attr_get(  		error = EFAULT;   out_kfree: -	kfree(kbuf); +	if (is_vmalloc_addr(kbuf)) +		kmem_free_large(kbuf); +	else +		kmem_free(kbuf);  	return error;  } | 
