btrfs: reduce pointer intdirections in btree_readpage_end_io_hook
authorDavid Sterba <dsterba@suse.com>
Thu, 28 Nov 2019 15:15:04 +0000 (16:15 +0100)
committerDavid Sterba <dsterba@suse.com>
Mon, 23 Mar 2020 16:01:45 +0000 (17:01 +0100)
All we need to read is checksum size from fs_info superblock, and
fs_info is provided by extent buffer so we can get rid of the wild
pointer indirections from page/inode/root.

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

index f109607..a4493e5 100644 (file)
@@ -604,9 +604,8 @@ static int btree_readpage_end_io_hook(struct btrfs_io_bio *io_bio,
        u64 found_start;
        int found_level;
        struct extent_buffer *eb;
-       struct btrfs_root *root = BTRFS_I(page->mapping->host)->root;
-       struct btrfs_fs_info *fs_info = root->fs_info;
-       u16 csum_size = btrfs_super_csum_size(fs_info->super_copy);
+       struct btrfs_fs_info *fs_info;
+       u16 csum_size;
        int ret = 0;
        u8 result[BTRFS_CSUM_SIZE];
        int reads_done;
@@ -615,6 +614,8 @@ static int btree_readpage_end_io_hook(struct btrfs_io_bio *io_bio,
                goto out;
 
        eb = (struct extent_buffer *)page->private;
+       fs_info = eb->fs_info;
+       csum_size = btrfs_super_csum_size(fs_info->super_copy);
 
        /* the pending IO might have been the only thing that kept this buffer
         * in memory.  Make sure we have a ref for all this other checks