]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
btrfs: remove redundant writeback error check during fsync
authorFilipe Manana <fdmanana@suse.com>
Mon, 27 Apr 2026 14:37:41 +0000 (15:37 +0100)
committerDavid Sterba <dsterba@suse.com>
Mon, 8 Jun 2026 13:53:34 +0000 (15:53 +0200)
If we can skip logging the inode during fsync, we check for writeback
errors in the inode's mapping by calling filemap_check_wb_err() and then
jump to the 'out_release_extents' label, which in turn jumps to the 'out'
label under which we check again for a writeback error by calling
file_check_and_advance_wb_err(). So the filemap_check_wb_err() ends up
being redundant. This happens since commit 333427a505be ("btrfs: minimal
conversion to errseq_t writeback error reporting on fsync").

Remove the filemap_check_wb_err() call.

Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Signed-off-by: Filipe Manana <fdmanana@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/file.c

index 42914c9785e54c3cc5f4249eddcf2f432f495cff..f77ccef837b961977db84ac9b0f05a48c9ce85d8 100644 (file)
@@ -1688,14 +1688,6 @@ int btrfs_sync_file(struct file *file, loff_t start, loff_t end, int datasync)
                 * reason, it's no longer relevant.
                 */
                clear_bit(BTRFS_INODE_NEEDS_FULL_SYNC, &inode->runtime_flags);
-               /*
-                * An ordered extent might have started before and completed
-                * already with io errors, in which case the inode was not
-                * updated and we end up here. So check the inode's mapping
-                * for any errors that might have happened since we last
-                * checked called fsync.
-                */
-               ret = filemap_check_wb_err(inode->vfs_inode.i_mapping, file->f_wb_err);
                goto out_release_extents;
        }
 
@@ -1811,6 +1803,10 @@ out:
        ASSERT(list_empty(&ctx.list));
        ASSERT(list_empty(&ctx.conflict_inodes));
        ASSERT(ret <= 0, "ret=%d", ret);
+       /*
+        * Ordered extents might have started and completed before this fsync,
+        * so check for any io errors and advance the writeback error sequence.
+        */
        err = file_check_and_advance_wb_err(file);
        if (!ret)
                ret = err;