Commit 8c5c836b authored by Darrick J. Wong's avatar Darrick J. Wong Committed by Dave Chinner
Browse files

vfs: clean up generic_remap_file_range_prep return value



Since the remap prep function can update the length of the remap
request, we can change this function to return the usual return status
instead of the odd behavior it has now.

Signed-off-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarDave Chinner <david@fromorbit.com>
parent c32e5f39
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -4852,7 +4852,7 @@ int ocfs2_reflink_remap_range(struct file *file_in,

	ret = generic_remap_file_range_prep(file_in, pos_in, file_out, pos_out,
			&len, remap_flags);
	if (ret <= 0)
	if (ret < 0 || len == 0)
		goto out_unlock;

	/* Lock out changes to the allocation maps and remap. */
+3 −3
Original line number Diff line number Diff line
@@ -1848,8 +1848,8 @@ out_error:
 * sense, and then flush all dirty data.  Caller must ensure that the
 * inodes have been locked against any other modifications.
 *
 * Returns: 0 for "nothing to clone", 1 for "something to clone", or
 * the usual negative error code.
 * If there's an error, then the usual negative error code is returned.
 * Otherwise returns 0 with *len set to the request length.
 */
int generic_remap_file_range_prep(struct file *file_in, loff_t pos_in,
				  struct file *file_out, loff_t pos_out,
@@ -1945,7 +1945,7 @@ int generic_remap_file_range_prep(struct file *file_in, loff_t pos_in,
			return ret;
	}

	return 1;
	return 0;
}
EXPORT_SYMBOL(generic_remap_file_range_prep);

+2 −2
Original line number Diff line number Diff line
@@ -1329,7 +1329,7 @@ xfs_reflink_remap_prep(

	ret = generic_remap_file_range_prep(file_in, pos_in, file_out, pos_out,
			len, remap_flags);
	if (ret <= 0)
	if (ret < 0 || *len == 0)
		goto out_unlock;

	/*
@@ -1409,7 +1409,7 @@ xfs_reflink_remap_range(
	/* Prepare and then clone file data. */
	ret = xfs_reflink_remap_prep(file_in, pos_in, file_out, pos_out,
			&len, remap_flags);
	if (ret <= 0)
	if (ret < 0 || len == 0)
		return ret;

	trace_xfs_reflink_remap_range(src, pos_in, len, dest, pos_out);