]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
btrfs: move the mapping_set_error() out of the loop in end_bbio_data_write()
authorQu Wenruo <wqu@suse.com>
Tue, 3 Mar 2026 08:15:10 +0000 (18:45 +1030)
committerDavid Sterba <dsterba@suse.com>
Tue, 7 Apr 2026 16:56:00 +0000 (18:56 +0200)
Previously we have to call mapping_set_error() inside the
for_each_folio_all() loop, because we do not have a better way to grab
an inode, other than through folio->mapping.

But nowadays every btrfs_bio has its inode member populated, thus we can
easily grab the inode and its i_mapping easily, without the help from a
folio.

Now we can move that mapping_set_error() out of the loop, and use
bbio->inode to grab the i_mapping.

Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: Qu Wenruo <wqu@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/extent_io.c

index c7309e8bcc53a260280db8c508e76df908f88809..9648fbd2013788fb5b1e3d5834bd9733d7adbab7 100644 (file)
@@ -530,14 +530,14 @@ static void end_bbio_data_write(struct btrfs_bio *bbio)
                u32 len = fi.length;
 
                bio_size += len;
-               if (error)
-                       mapping_set_error(folio->mapping, error);
-
                ASSERT(btrfs_folio_test_ordered(fs_info, folio, start, len));
                btrfs_folio_clear_ordered(fs_info, folio, start, len);
                btrfs_folio_clear_writeback(fs_info, folio, start, len);
        }
 
+       if (error)
+               mapping_set_error(bbio->inode->vfs_inode.i_mapping, error);
+
        btrfs_finish_ordered_extent(bbio->ordered, bbio->file_offset, bio_size, !error);
        bio_put(bio);
 }