summaryrefslogtreecommitdiffstats
path: root/fs/read_write.c
diff options
context:
space:
mode:
authorDarrick J. Wong <darrick.wong@oracle.com>2018-10-29 19:42:03 -0400
committerDave Chinner <david@fromorbit.com>2018-10-29 19:42:03 -0400
commitdf3658361951e17364f1e1c3fa92862a990ad8bd (patch)
tree6a8654d7e37881b951eab42f3b28cf90b9a68766 /fs/read_write.c
parent452ce65951a2f0719e4e119ecca134c06cfe22ee (diff)
vfs: plumb remap flags through the vfs dedupe functions
Plumb a remap_flags argument through the vfs_dedupe_file_range_one functions so that dedupe can take advantage of it. Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Amir Goldstein <amir73il@gmail.com> Signed-off-by: Dave Chinner <david@fromorbit.com>
Diffstat (limited to 'fs/read_write.c')
-rw-r--r--fs/read_write.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/fs/read_write.c b/fs/read_write.c
index 0d1ac1b9bc22..ea30666013b0 100644
--- a/fs/read_write.c
+++ b/fs/read_write.c
@@ -2010,10 +2010,12 @@ EXPORT_SYMBOL(vfs_dedupe_file_range_compare);
2010 2010
2011loff_t vfs_dedupe_file_range_one(struct file *src_file, loff_t src_pos, 2011loff_t vfs_dedupe_file_range_one(struct file *src_file, loff_t src_pos,
2012 struct file *dst_file, loff_t dst_pos, 2012 struct file *dst_file, loff_t dst_pos,
2013 loff_t len) 2013 loff_t len, unsigned int remap_flags)
2014{ 2014{
2015 loff_t ret; 2015 loff_t ret;
2016 2016
2017 WARN_ON_ONCE(remap_flags & ~(REMAP_FILE_DEDUP));
2018
2017 ret = mnt_want_write_file(dst_file); 2019 ret = mnt_want_write_file(dst_file);
2018 if (ret) 2020 if (ret)
2019 return ret; 2021 return ret;
@@ -2044,7 +2046,7 @@ loff_t vfs_dedupe_file_range_one(struct file *src_file, loff_t src_pos,
2044 } 2046 }
2045 2047
2046 ret = dst_file->f_op->remap_file_range(src_file, src_pos, dst_file, 2048 ret = dst_file->f_op->remap_file_range(src_file, src_pos, dst_file,
2047 dst_pos, len, REMAP_FILE_DEDUP); 2049 dst_pos, len, remap_flags | REMAP_FILE_DEDUP);
2048out_drop_write: 2050out_drop_write:
2049 mnt_drop_write_file(dst_file); 2051 mnt_drop_write_file(dst_file);
2050 2052
@@ -2112,7 +2114,8 @@ int vfs_dedupe_file_range(struct file *file, struct file_dedupe_range *same)
2112 } 2114 }
2113 2115
2114 deduped = vfs_dedupe_file_range_one(file, off, dst_file, 2116 deduped = vfs_dedupe_file_range_one(file, off, dst_file,
2115 info->dest_offset, len); 2117 info->dest_offset, len,
2118 0);
2116 if (deduped == -EBADE) 2119 if (deduped == -EBADE)
2117 info->status = FILE_DEDUPE_RANGE_DIFFERS; 2120 info->status = FILE_DEDUPE_RANGE_DIFFERS;
2118 else if (deduped < 0) 2121 else if (deduped < 0)