|
@@ -2010,10 +2010,12 @@ EXPORT_SYMBOL(vfs_dedupe_file_range_compare);
|
|
|
|
|
|
loff_t vfs_dedupe_file_range_one(struct file *src_file, loff_t src_pos,
|
|
|
struct file *dst_file, loff_t dst_pos,
|
|
|
- loff_t len)
|
|
|
+ loff_t len, unsigned int remap_flags)
|
|
|
{
|
|
|
loff_t ret;
|
|
|
|
|
|
+ WARN_ON_ONCE(remap_flags & ~(REMAP_FILE_DEDUP));
|
|
|
+
|
|
|
ret = mnt_want_write_file(dst_file);
|
|
|
if (ret)
|
|
|
return ret;
|
|
@@ -2044,7 +2046,7 @@ loff_t vfs_dedupe_file_range_one(struct file *src_file, loff_t src_pos,
|
|
|
}
|
|
|
|
|
|
ret = dst_file->f_op->remap_file_range(src_file, src_pos, dst_file,
|
|
|
- dst_pos, len, REMAP_FILE_DEDUP);
|
|
|
+ dst_pos, len, remap_flags | REMAP_FILE_DEDUP);
|
|
|
out_drop_write:
|
|
|
mnt_drop_write_file(dst_file);
|
|
|
|
|
@@ -2112,7 +2114,8 @@ int vfs_dedupe_file_range(struct file *file, struct file_dedupe_range *same)
|
|
|
}
|
|
|
|
|
|
deduped = vfs_dedupe_file_range_one(file, off, dst_file,
|
|
|
- info->dest_offset, len);
|
|
|
+ info->dest_offset, len,
|
|
|
+ 0);
|
|
|
if (deduped == -EBADE)
|
|
|
info->status = FILE_DEDUPE_RANGE_DIFFERS;
|
|
|
else if (deduped < 0)
|