Commit fe341eb1 authored by Darrick J. Wong's avatar Darrick J. Wong
Browse files

xfs: ensure that fpunch, fcollapse, and finsert operations are aligned to rt extent size



Make sure that any fallocate operation that requires the range to be
block-aligned also checks that the range is aligned to the realtime
extent size.

Signed-off-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
parent 2a6ca4ba
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -946,6 +946,14 @@ xfs_free_file_space(
	startoffset_fsb = XFS_B_TO_FSB(mp, offset);
	endoffset_fsb = XFS_B_TO_FSBT(mp, offset + len);

	/* We can only free complete realtime extents. */
	if (XFS_IS_REALTIME_INODE(ip)) {
		xfs_extlen_t	extsz = xfs_get_extsz_hint(ip);

		if ((startoffset_fsb | endoffset_fsb) & (extsz - 1))
			return -EINVAL;
	}

	/*
	 * Need to zero the stuff we're not freeing, on disk.
	 */
@@ -1139,6 +1147,14 @@ xfs_insert_file_space(

	trace_xfs_insert_file_space(ip);

	/* We can only insert complete realtime extents. */
	if (XFS_IS_REALTIME_INODE(ip)) {
		xfs_extlen_t	extsz = xfs_get_extsz_hint(ip);

		if ((stop_fsb | shift_fsb) & (extsz - 1))
			return -EINVAL;
	}

	error = xfs_bmap_can_insert_extents(ip, stop_fsb, shift_fsb);
	if (error)
		return error;