]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
btrfs: update comment for delalloc flush and oe wait in btrfs_clone_files()
authorFilipe Manana <fdmanana@suse.com>
Fri, 9 Jan 2026 12:09:18 +0000 (12:09 +0000)
committerDavid Sterba <dsterba@suse.com>
Tue, 3 Feb 2026 06:51:43 +0000 (07:51 +0100)
Make the comment more detailed about why we need to flush delalloc and
wait for ordered extent completion before attempting to invalidate the
page cache.

Reviewed-by: Qu Wenruo <wqu@suse.com>
Reviewed-by: Boris Burkov <boris@bur.io>
Signed-off-by: Filipe Manana <fdmanana@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/reflink.c

index ab4ce56d69ee8dff70ccfb8d7102dd3d5f1f7737..314cb95ba846d2ff46fc5fcf9ec7b2639e908683 100644 (file)
@@ -754,8 +754,13 @@ static noinline int btrfs_clone_files(struct file *file, struct file *file_src,
 
        /*
         * We may have copied an inline extent into a page of the destination
-        * range, so wait for writeback to complete before invalidating pages
-        * from the page cache. This is a rare case.
+        * range. So flush delalloc and wait for ordered extent completion.
+        * This is to ensure the invalidation below does not fail, as if for
+        * example it finds a dirty folio, our folio release callback
+        * (btrfs_release_folio()) returns false, which makes the invalidation
+        * return an -EBUSY error. We can't ignore such failures since they
+        * could come from some range other than the copied inline extent's
+        * destination range and we have no way to know that.
         */
        ret = btrfs_wait_ordered_range(BTRFS_I(inode), destoff, len);
        if (ret < 0)