|
@@ -5536,8 +5536,12 @@ xfs_getbmap(
|
|
|
if (bmv->bmv_count > ULONG_MAX / sizeof(struct getbmapx))
|
|
|
return XFS_ERROR(ENOMEM);
|
|
|
out = kmem_zalloc(bmv->bmv_count * sizeof(struct getbmapx), KM_MAYFAIL);
|
|
|
- if (!out)
|
|
|
- return XFS_ERROR(ENOMEM);
|
|
|
+ if (!out) {
|
|
|
+ out = kmem_zalloc_large(bmv->bmv_count *
|
|
|
+ sizeof(struct getbmapx));
|
|
|
+ if (!out)
|
|
|
+ return XFS_ERROR(ENOMEM);
|
|
|
+ }
|
|
|
|
|
|
xfs_ilock(ip, XFS_IOLOCK_SHARED);
|
|
|
if (whichfork == XFS_DATA_FORK && !(iflags & BMV_IF_DELALLOC)) {
|
|
@@ -5661,7 +5665,10 @@ xfs_getbmap(
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
- kmem_free(out);
|
|
|
+ if (is_vmalloc_addr(out))
|
|
|
+ kmem_free_large(out);
|
|
|
+ else
|
|
|
+ kmem_free(out);
|
|
|
return error;
|
|
|
}
|
|
|
|