From: Qu Wenruo Date: Tue, 3 Mar 2026 08:15:10 +0000 (+1030) Subject: btrfs: move the mapping_set_error() out of the loop in end_bbio_data_write() X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=9d7db41000570e7a6bb2c7a16811532dae2ef986;p=thirdparty%2Fkernel%2Flinux.git btrfs: move the mapping_set_error() out of the loop in end_bbio_data_write() 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 Signed-off-by: Qu Wenruo Signed-off-by: David Sterba --- diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c index c7309e8bcc53a..9648fbd201378 100644 --- a/fs/btrfs/extent_io.c +++ b/fs/btrfs/extent_io.c @@ -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); }