• Qu Wenruo's avatar
    btrfs: refactor __extent_writepage_io() to do sector-by-sector submission · 81891974
    Qu Wenruo authored
    Unlike the bitmap usage inside raid56, for __extent_writepage_io() we
    handle the subpage submission not sector-by-sector, but for each dirty
    range we found.
    
    This is not a big deal normally, as the subpage complex code is already
    mostly optimized out by the compiler for x86_64.
    
    However for the sake of consistency and for the future of subpage
    sector-perfect compression support, this patch does:
    
    - Extract the sector submission code into submit_one_sector()
    
    - Add the needed code to extract the dirty bitmap for subpage case
      There is a small pitfall for non-subpage case, as we cleared page
      dirty before starting writeback, so we have to manually set
      the default dirty_bitmap to 1 for such case.
    
    - Use bitmap_and() to calculate the target sectors we need to submit
      This is done for both subpage and non-subpage cases, and will later
      be expanded to skip inline/compression ranges.
    
    For x86_64, the dirty bitmap will be fixed to 1, with the length of 1,
    so we're still doing the same workload per sector.
    
    For larger page sizes, the overhead will be a little larger, as previous
    we only need to do one extent_map lookup per-dirty-range, but now it
    will be one extent_map lookup per-sector.
    
    But that is the same frequency as x86_64, so we're just aligning the
    behavior to x86_64.
    Reviewed-by: default avatarJosef Bacik <josef@toxicpanda.com>
    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>
    81891974
subpage.c 31.1 KB