• Filipe Manana's avatar
    btrfs: remove leftover setting of EXTENT_UPTODATE state in an inode's io_tree · 2c8f5e8c
    Filipe Manana authored
    We don't need to set the EXTENT_UPDATE bit in an inode's io_tree to mark a
    range as uptodate, we rely on the pages themselves being uptodate - page
    reading is not triggered for already uptodate pages. Recently we removed
    most use of the EXTENT_UPTODATE for buffered IO with commit 52b029f4
    ("btrfs: remove unnecessary EXTENT_UPTODATE state in buffered I/O path"),
    but there were a few leftovers, namely when reading from holes and
    successfully finishing read repair.
    
    These leftovers are unnecessarily making an inode's tree larger and deeper,
    slowing down searches on it. So remove all the leftovers.
    
    This change is part of a patchset that has the goal to make performance
    better for applications that use lseek's SEEK_HOLE and SEEK_DATA modes to
    iterate over the extents of a file. Two examples are the cp program from
    coreutils 9.0+ and the tar program (when using its --sparse / -S option).
    A sample test and results are listed in the changelog of the last patch
    in the series:
    
      1/9 btrfs: remove leftover setting of EXTENT_UPTODATE state in an inode's io_tree
      2/9 btrfs: add an early exit when searching for delalloc range for lseek/fiemap
      3/9 btrfs: skip unnecessary delalloc searches during lseek/fiemap
      4/9 btrfs: search for delalloc more efficiently during lseek/fiemap
      5/9 btrfs: remove no longer used btrfs_next_extent_map()
      6/9 btrfs: allow passing a cached state record to count_range_bits()
      7/9 btrfs: update stale comment for count_range_bits()
      8/9 btrfs: use cached state when looking for delalloc ranges with fiemap
      9/9 btrfs: use cached state when looking for delalloc ranges with lseek
    Reported-by: default avatarWang Yugui <wangyugui@e16-tech.com>
    Link: https://lore.kernel.org/linux-btrfs/20221106073028.71F9.409509F4@e16-tech.com/
    Link: https://lore.kernel.org/linux-btrfs/CAL3q7H5NSVicm7nYBJ7x8fFkDpno8z3PYt5aPU43Bajc1H0h1Q@mail.gmail.com/Signed-off-by: default avatarFilipe Manana <fdmanana@suse.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    2c8f5e8c
extent-io-tree.h 7.2 KB