Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c25d2467 authored by Josef Bacik's avatar Josef Bacik Committed by Al Viro
Browse files

XFS: handle hole punching via fallocate properly



This patch simply allows XFS to handle the hole punching flag in fallocate
properly.  I've tested this with a little program that does a bunch of random
hole punching with FL_KEEP_SIZE and without it to make sure it does the right
thing.  Thanks,

Signed-off-by: default avatarJosef Bacik <josef@redhat.com>
Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 79124f18
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -516,6 +516,7 @@ xfs_vn_fallocate(
	loff_t		new_size = 0;
	xfs_flock64_t	bf;
	xfs_inode_t	*ip = XFS_I(inode);
	int		cmd = XFS_IOC_RESVSP;

	/* preallocation on directories not yet supported */
	error = -ENODEV;
@@ -528,6 +529,9 @@ xfs_vn_fallocate(

	xfs_ilock(ip, XFS_IOLOCK_EXCL);

	if (mode & FALLOC_FL_PUNCH_HOLE)
		cmd = XFS_IOC_UNRESVSP;

	/* check the new inode size is valid before allocating */
	if (!(mode & FALLOC_FL_KEEP_SIZE) &&
	    offset + len > i_size_read(inode)) {
@@ -537,8 +541,7 @@ xfs_vn_fallocate(
			goto out_unlock;
	}

	error = -xfs_change_file_space(ip, XFS_IOC_RESVSP, &bf,
				       0, XFS_ATTR_NOLOCK);
	error = -xfs_change_file_space(ip, cmd, &bf, 0, XFS_ATTR_NOLOCK);
	if (error)
		goto out_unlock;