diff options
author | Darrick J. Wong <darrick.wong@oracle.com> | 2018-10-29 19:42:03 -0400 |
---|---|---|
committer | Dave Chinner <david@fromorbit.com> | 2018-10-29 19:42:03 -0400 |
commit | df3658361951e17364f1e1c3fa92862a990ad8bd (patch) | |
tree | 6a8654d7e37881b951eab42f3b28cf90b9a68766 | |
parent | 452ce65951a2f0719e4e119ecca134c06cfe22ee (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>
-rw-r--r-- | fs/overlayfs/file.c | 3 | ||||
-rw-r--r-- | fs/read_write.c | 9 | ||||
-rw-r--r-- | include/linux/fs.h | 2 |
3 files changed, 9 insertions, 5 deletions
diff --git a/fs/overlayfs/file.c b/fs/overlayfs/file.c index 0393815c8971..84dd957efa24 100644 --- a/fs/overlayfs/file.c +++ b/fs/overlayfs/file.c | |||
@@ -467,7 +467,8 @@ static loff_t ovl_copyfile(struct file *file_in, loff_t pos_in, | |||
467 | 467 | ||
468 | case OVL_DEDUPE: | 468 | case OVL_DEDUPE: |
469 | ret = vfs_dedupe_file_range_one(real_in.file, pos_in, | 469 | ret = vfs_dedupe_file_range_one(real_in.file, pos_in, |
470 | real_out.file, pos_out, len); | 470 | real_out.file, pos_out, len, |
471 | flags); | ||
471 | break; | 472 | break; |
472 | } | 473 | } |
473 | revert_creds(old_cred); | 474 | revert_creds(old_cred); |
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 | ||
2011 | loff_t vfs_dedupe_file_range_one(struct file *src_file, loff_t src_pos, | 2011 | loff_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); |
2048 | out_drop_write: | 2050 | out_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) |
diff --git a/include/linux/fs.h b/include/linux/fs.h index 1c5e55d2a67d..544ab5083b48 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
@@ -1859,7 +1859,7 @@ extern int vfs_dedupe_file_range(struct file *file, | |||
1859 | struct file_dedupe_range *same); | 1859 | struct file_dedupe_range *same); |
1860 | extern loff_t vfs_dedupe_file_range_one(struct file *src_file, loff_t src_pos, | 1860 | extern loff_t vfs_dedupe_file_range_one(struct file *src_file, loff_t src_pos, |
1861 | struct file *dst_file, loff_t dst_pos, | 1861 | struct file *dst_file, loff_t dst_pos, |
1862 | loff_t len); | 1862 | loff_t len, unsigned int remap_flags); |
1863 | 1863 | ||
1864 | 1864 | ||
1865 | struct super_operations { | 1865 | struct super_operations { |