btrfs: remove search_file_offset_in_bio
authorChristoph Hellwig <hch@lst.de>
Wed, 22 Feb 2023 17:07:01 +0000 (09:07 -0800)
committerDavid Sterba <dsterba@suse.com>
Mon, 17 Apr 2023 16:01:16 +0000 (18:01 +0200)
There is no need to search for a file offset in a bio, it is now always
provided in bbio->file_offset (set at bio allocation time since
0d495430db8d ("btrfs: set bbio->file_offset in alloc_new_bio")).  Just
use that with the offset into the bio.

Reviewed-by: Anand Jain <anand.jain@oracle.com>
Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/file-item.c

index fff09e5..9df9b91 100644 (file)
@@ -336,48 +336,6 @@ out:
 }
 
 /*
- * Locate the file_offset of @cur_disk_bytenr of a @bio.
- *
- * Bio of btrfs represents read range of
- * [bi_sector << 9, bi_sector << 9 + bi_size).
- * Knowing this, we can iterate through each bvec to locate the page belong to
- * @cur_disk_bytenr and get the file offset.
- *
- * @inode is used to determine if the bvec page really belongs to @inode.
- *
- * Return false if we can't find the file offset
- * Return true if we find the file offset and restore it to @file_offset_ret
- */
-static int search_file_offset_in_bio(struct bio *bio, struct inode *inode,
-                                    u64 disk_bytenr, u64 *file_offset_ret)
-{
-       struct bvec_iter iter;
-       struct bio_vec bvec;
-       u64 cur = bio->bi_iter.bi_sector << SECTOR_SHIFT;
-       bool ret = false;
-
-       bio_for_each_segment(bvec, bio, iter) {
-               struct page *page = bvec.bv_page;
-
-               if (cur > disk_bytenr)
-                       break;
-               if (cur + bvec.bv_len <= disk_bytenr) {
-                       cur += bvec.bv_len;
-                       continue;
-               }
-               ASSERT(in_range(disk_bytenr, cur, bvec.bv_len));
-               if (page->mapping && page->mapping->host &&
-                   page->mapping->host == inode) {
-                       ret = true;
-                       *file_offset_ret = page_offset(page) + bvec.bv_offset +
-                                          disk_bytenr - cur;
-                       break;
-               }
-       }
-       return ret;
-}
-
-/*
  * Lookup the checksum for the read bio in csum tree.
  *
  * Return: BLK_STS_RESOURCE if allocating memory fails, BLK_STS_OK otherwise.
@@ -386,7 +344,6 @@ blk_status_t btrfs_lookup_bio_sums(struct btrfs_bio *bbio)
 {
        struct btrfs_inode *inode = bbio->inode;
        struct btrfs_fs_info *fs_info = inode->root->fs_info;
-       struct extent_io_tree *io_tree = &inode->io_tree;
        struct bio *bio = &bbio->bio;
        struct btrfs_path *path;
        const u32 sectorsize = fs_info->sectorsize;
@@ -493,13 +450,10 @@ blk_status_t btrfs_lookup_bio_sums(struct btrfs_bio *bbio)
 
                        if (inode->root->root_key.objectid ==
                            BTRFS_DATA_RELOC_TREE_OBJECTID) {
-                               u64 file_offset;
+                               u64 file_offset = bbio->file_offset +
+                                       cur_disk_bytenr - orig_disk_bytenr;
 
-                               if (search_file_offset_in_bio(bio,
-                                                             &inode->vfs_inode,
-                                                             cur_disk_bytenr,
-                                                             &file_offset))
-                                       set_extent_bits(io_tree, file_offset,
+                               set_extent_bits(&inode->io_tree, file_offset,
                                                file_offset + sectorsize - 1,
                                                EXTENT_NODATASUM);
                        } else {