Skip to content

Commit

Permalink
xfs: ensure that fpunch, fcollapse, and finsert operations are aligne…
Browse files Browse the repository at this point in the history
…d 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: Darrick J. Wong <[email protected]>
Reviewed-by: Christoph Hellwig <[email protected]>
  • Loading branch information
djwong committed Sep 16, 2020
1 parent 2a6ca4b commit fe341eb
Showing 1 changed file with 16 additions and 0 deletions.
16 changes: 16 additions & 0 deletions fs/xfs/xfs_bmap_util.c
Original file line number Diff line number Diff line change
Expand Up @@ -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.
*/
Expand Down Expand Up @@ -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;
Expand Down

0 comments on commit fe341eb

Please sign in to comment.