• Qu Wenruo's avatar
    btrfs: cleanup metadata page pointer usage · 13df3775
    Qu Wenruo authored
    Although we have migrated extent_buffer::pages[] to folios[], we're
    still mostly using the folio_page() help to grab the page.
    
    This patch would do the following cleanups for metadata:
    
    - Introduce num_extent_folios() helper
      This is to replace most num_extent_pages() callers.
    
    - Use num_extent_folios() to iterate future large folios
      This allows us to use things like
      bio_add_folio()/bio_add_folio_nofail(), and only set the needed flags
      for the folio (aka the leading/tailing page), which reduces the loop
      iteration to 1 for large folios.
    
    - Change metadata related functions to use folio pointers
      Including their function name, involving:
      * attach_extent_buffer_page()
      * detach_extent_buffer_page()
      * page_range_has_eb()
      * btrfs_release_extent_buffer_pages()
      * btree_clear_page_dirty()
      * btrfs_page_inc_eb_refs()
      * btrfs_page_dec_eb_refs()
    
    - Change btrfs_is_subpage() to accept an address_space pointer
      This is to allow both page->mapping and folio->mapping to be utilized.
      As data is still using the old per-page code, and may keep so for a
      while.
    
    - Special corner case place holder for future order mismatches between
      extent buffer and inode filemap
      For now it's  just a block of comments and a dead ASSERT(), no real
      handling yet.
    
    The subpage code would still go page, just because subpage and large
    folio are conflicting conditions, thus we don't need to bother subpage
    with higher order folios at all. Just folio_page(folio, 0) would be
    enough.
    Signed-off-by: default avatarQu Wenruo <wqu@suse.com>
    Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
    [ minor styling tweaks ]
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    13df3775
extent_io.c 134 KB