• Qu Wenruo's avatar
    btrfs: refactor extent buffer bitmaps operations · cb22964f
    Qu Wenruo authored
    [BACKGROUND]
    Currently we handle extent bitmaps manually in
    extent_buffer_bitmap_set() and extent_buffer_bitmap_clear().
    
    Although with various helpers like eb_bitmap_offset() it's still a little
    messy to read.  The code seems to be a copy of bitmap_set(), but with
    all the cross-page handling embedded into the code.
    
    [ENHANCEMENT]
    This patch would enhance the readability by introducing two helpers:
    
    - memset_extent_buffer()
      To handle the byte aligned range, thus all the cross-page handling is
      done there.
    
    - extent_buffer_get_byte()
      This for the first and the last byte operations, which only need to
      grab one byte, thus no need for any cross-page handling.
    
    So we can split both extent_buffer_bitmap_set() and
    extent_buffer_bitmap_clear() into 3 parts:
    
    - Handle the first byte
      If the range fits inside the first byte, we can exit early.
    
    - Handle the byte aligned part
      This is the part which can have cross-page operations, and it would
      be handled by memset_extent_buffer().
    
    - Handle the last byte
    
    This refactoring does not only make the code a little easier to read,
    but also makes later folio/page switch much easier, as the switch only
    needs to be done inside memset_extent_buffer() and extent_buffer_get_byte().
    Reviewed-by: default avatarSweet Tea Dorminy <sweettea-kernel@dorminy.me>
    Signed-off-by: default avatarQu Wenruo <wqu@suse.com>
    Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    cb22964f
extent_io.c 129 KB