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

Commit 5740c99e authored by Miklos Szeredi's avatar Miklos Szeredi
Browse files

vfs: dedupe: return int

parent 92b66d2c
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -3247,7 +3247,7 @@ void btrfs_get_block_group_info(struct list_head *groups_list,
				struct btrfs_ioctl_space_info *space);
void btrfs_update_ioctl_balance_args(struct btrfs_fs_info *fs_info,
			       struct btrfs_ioctl_balance_args *bargs);
ssize_t btrfs_dedupe_file_range(struct file *src_file, u64 loff, u64 olen,
int btrfs_dedupe_file_range(struct file *src_file, u64 loff, u64 olen,
			    struct file *dst_file, u64 dst_loff);

/* file.c */
+3 −7
Original line number Diff line number Diff line
@@ -3600,13 +3600,12 @@ static int btrfs_extent_same(struct inode *src, u64 loff, u64 olen,
	return ret;
}

ssize_t btrfs_dedupe_file_range(struct file *src_file, u64 loff, u64 olen,
int btrfs_dedupe_file_range(struct file *src_file, u64 loff, u64 olen,
			    struct file *dst_file, u64 dst_loff)
{
	struct inode *src = file_inode(src_file);
	struct inode *dst = file_inode(dst_file);
	u64 bs = BTRFS_I(src)->root->fs_info->sb->s_blocksize;
	ssize_t res;

	if (WARN_ON_ONCE(bs < PAGE_SIZE)) {
		/*
@@ -3617,10 +3616,7 @@ ssize_t btrfs_dedupe_file_range(struct file *src_file, u64 loff, u64 olen,
		return -EINVAL;
	}

	res = btrfs_extent_same(src, loff, olen, dst, dst_loff);
	if (res)
		return res;
	return olen;
	return btrfs_extent_same(src, loff, olen, dst, dst_loff);
}

static int clone_finish_inode_update(struct btrfs_trans_handle *trans,
+6 −11
Original line number Diff line number Diff line
@@ -2537,19 +2537,14 @@ static int ocfs2_file_clone_range(struct file *file_in,
					 len, false);
}

static ssize_t ocfs2_file_dedupe_range(struct file *src_file,
static int ocfs2_file_dedupe_range(struct file *src_file,
				   u64 loff,
				   u64 len,
				   struct file *dst_file,
				   u64 dst_loff)
{
	int error;

	error = ocfs2_reflink_remap_range(src_file, loff, dst_file, dst_loff,
	return ocfs2_reflink_remap_range(src_file, loff, dst_file, dst_loff,
					  len, true);
	if (error)
		return error;
	return len;
}

const struct inode_operations ocfs2_file_iops = {
+2 −2
Original line number Diff line number Diff line
@@ -1976,7 +1976,7 @@ int vfs_dedupe_file_range(struct file *file, struct file_dedupe_range *same)
	u16 count = same->dest_count;
	struct file *dst_file;
	loff_t dst_off;
	ssize_t deduped;
	int deduped;

	if (!(file->f_mode & FMODE_READ))
		return -EINVAL;
@@ -2056,7 +2056,7 @@ int vfs_dedupe_file_range(struct file *file, struct file_dedupe_range *same)
			else if (deduped < 0)
				info->status = deduped;
			else
				info->bytes_deduped += deduped;
				info->bytes_deduped += len;
		}

next_file:
+2 −17
Original line number Diff line number Diff line
@@ -933,7 +933,7 @@ xfs_file_clone_range(
				     len, false);
}

STATIC ssize_t
STATIC int
xfs_file_dedupe_range(
	struct file	*src_file,
	u64		loff,
@@ -941,23 +941,8 @@ xfs_file_dedupe_range(
	struct file	*dst_file,
	u64		dst_loff)
{
	struct inode	*srci = file_inode(src_file);
	u64		max_dedupe;
	int		error;

	/*
	 * Since we have to read all these pages in to compare them, cut
	 * it off at MAX_RW_COUNT/2 rounded down to the nearest block.
	 * That means we won't do more than MAX_RW_COUNT IO per request.
	 */
	max_dedupe = (MAX_RW_COUNT >> 1) & ~(i_blocksize(srci) - 1);
	if (len > max_dedupe)
		len = max_dedupe;
	error = xfs_reflink_remap_range(src_file, loff, dst_file, dst_loff,
	return xfs_reflink_remap_range(src_file, loff, dst_file, dst_loff,
				     len, true);
	if (error)
		return error;
	return len;
}

STATIC int
Loading