• Q
    btrfs: handle sectorsize < PAGE_SIZE case for extent buffer accessors · 884b07d0
    Qu Wenruo 提交于
    To support sectorsize < PAGE_SIZE case, we need to take extra care of
    extent buffer accessors.
    
    Since sectorsize is smaller than PAGE_SIZE, one page can contain
    multiple tree blocks, we must use eb->start to determine the real offset
    to read/write for extent buffer accessors.
    
    This patch introduces two helpers to do this:
    
    - get_eb_page_index()
      This is to calculate the index to access extent_buffer::pages.
      It's just a simple wrapper around "start >> PAGE_SHIFT".
    
      For sectorsize == PAGE_SIZE case, nothing is changed.
      For sectorsize < PAGE_SIZE case, we always get index as 0, and
      the existing page shift also works.
    
    - get_eb_offset_in_page()
      This is to calculate the offset to access extent_buffer::pages.
      This needs to take extent_buffer::start into consideration.
    
      For sectorsize == PAGE_SIZE case, extent_buffer::start is always
      aligned to PAGE_SIZE, thus adding extent_buffer::start to
      offset_in_page() won't change the result.
      For sectorsize < PAGE_SIZE case, adding extent_buffer::start gives
      us the correct offset to access.
    
    This patch will touch the following parts to cover all extent buffer
    accessors:
    
    - BTRFS_SETGET_HEADER_FUNCS()
    - read_extent_buffer()
    - read_extent_buffer_to_user()
    - memcmp_extent_buffer()
    - write_extent_buffer_chunk_tree_uuid()
    - write_extent_buffer_fsid()
    - write_extent_buffer()
    - memzero_extent_buffer()
    - copy_extent_buffer_full()
    - copy_extent_buffer()
    - memcpy_extent_buffer()
    - memmove_extent_buffer()
    - btrfs_get_token_##bits()
    - btrfs_get_##bits()
    - btrfs_set_token_##bits()
    - btrfs_set_##bits()
    - generic_bin_search()
    Signed-off-by: NGoldwyn Rodrigues <rgoldwyn@suse.com>
    Signed-off-by: NQu Wenruo <wqu@suse.com>
    Reviewed-by: NDavid Sterba <dsterba@suse.com>
    Signed-off-by: NDavid Sterba <dsterba@suse.com>
    884b07d0
ctree.c 140.9 KB