]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
bcachefs: support REMAP_FILE_DEDUP in bch2_remap_file_range
authorReed Riley <reed@riley.engineer>
Sat, 11 May 2024 00:20:12 +0000 (00:20 +0000)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 14 Jul 2024 23:00:15 +0000 (19:00 -0400)
By removing the early-exit when REMAP_FILE_DEDUP is set, we should be
able to support the fideduperange ioctl, albeit less efficiently than if
we handled some of the extent locking and comparison logic inside
bcachefs.  Extent comparison logic already exists inside of
`__generic_remap_file_range_prep`.

Signed-off-by: Reed Riley <reed@riley.engineer>
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/fs-io.c

index fead9ab10e4a985222e7e341db5a33ba7e5a6d4e..77b85da30fb2ebe1c09fb169c6773e173bac61b8 100644 (file)
@@ -867,9 +867,6 @@ loff_t bch2_remap_file_range(struct file *file_src, loff_t pos_src,
        if (remap_flags & ~(REMAP_FILE_DEDUP|REMAP_FILE_ADVISORY))
                return -EINVAL;
 
-       if (remap_flags & REMAP_FILE_DEDUP)
-               return -EOPNOTSUPP;
-
        if ((pos_src & (block_bytes(c) - 1)) ||
            (pos_dst & (block_bytes(c) - 1)))
                return -EINVAL;
@@ -902,7 +899,8 @@ loff_t bch2_remap_file_range(struct file *file_src, loff_t pos_src,
        if (ret)
                goto err;
 
-       file_update_time(file_dst);
+       if (!(remap_flags & REMAP_FILE_DEDUP))
+               file_update_time(file_dst);
 
        bch2_mark_pagecache_unallocated(src, pos_src >> 9,
                                   (pos_src + aligned_len) >> 9);