• Qu Wenruo's avatar
    btrfs: subpage: make lzo_compress_pages() compatible · d4088803
    Qu Wenruo authored
    There are several problems in lzo_compress_pages() preventing it from
    being subpage compatible:
    
    - No page offset is calculated when reading from inode pages
      For subpage case, we could have @start which is not aligned to
      PAGE_SIZE.
    
      Thus the destination where we read data from must take offset in page
      into consideration.
    
    - The padding for segment header is bound to PAGE_SIZE
      This means, for subpage case we can skip several corners where on x86
      machines we need to add padding zeros.
    
    The rework will:
    
    - Update the comment to replace "page" with "sector"
    
    - Introduce a new helper, copy_compressed_data_to_page(), to do the copy
      So that we don't need to bother page switching for both input and
      output.
    
      Now in lzo_compress_pages() we only care about page switching for
      input, while in copy_compressed_data_to_page() we only care about the
      page switching for output.
    
    - Only one main cursor
      For lzo_compress_pages() we use @cur_in as main cursor.
      It will be the file offset we are currently at.
    
      All other helper variables will be only declared inside the loop.
    
      For copy_compressed_data_to_page() it's similar, we will have
      @cur_out at the main cursor, which records how many bytes are in the
      output.
    Signed-off-by: default avatarQu Wenruo <wqu@suse.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    d4088803
lzo.c 11.8 KB