From: Dave Chinner <dchinner@xxxxxxxxxx> As of v6.0, the DIO memory buffer alignment is no longer aligned to the logical sector size of the underlying block device. There is now a specific DMA alignment parameter that memory buffers should be aligned to. statx(STATX_DIOALIGN) gets this right, but XFS_IOC_DIOINFO does not - it still uses the older fixed alignment defined by the block device logical sector size. This was found because the s390 DASD driver increased DMA alignment to PAGE_SIZE in commit bc792884b76f ("s390/dasd: Establish DMA alignment") and DIO aligned to logical sector sizes have started failing on kernels with that commit. Fixing the "userspace fails because device alignment constraints increased" issue is not XFS's problem, but we really should be reporting the correct device memory alignment in XFS_IOC_DIOINFO. Signed-off-by: Dave Chinner <dchinner@xxxxxxxxxx> --- fs/xfs/xfs_ioctl.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/fs/xfs/xfs_ioctl.c b/fs/xfs/xfs_ioctl.c index f0117188f302..71eba4849e03 100644 --- a/fs/xfs/xfs_ioctl.c +++ b/fs/xfs/xfs_ioctl.c @@ -1368,7 +1368,8 @@ xfs_file_ioctl( struct xfs_buftarg *target = xfs_inode_buftarg(ip); struct dioattr da; - da.d_mem = da.d_miniosz = target->bt_logical_sectorsize; + da.d_mem = bdev_dma_alignment(target->bt_bdev); + da.d_miniosz = target->bt_logical_sectorsize; da.d_maxiosz = INT_MAX & ~(da.d_miniosz - 1); if (copy_to_user(arg, &da, sizeof(da))) -- 2.45.1