• Qu Wenruo's avatar
    btrfs: refactor btrfs_invalidatepage() for subpage support · 3b835840
    Qu Wenruo authored
    This patch will refactor btrfs_invalidatepage() for the incoming subpage
    support.
    
    The involved modifications are:
    
    - Use while() loop instead of "goto again;"
    - Use single variable to determine whether to delete extent states
      Each branch will also have comments why we can or cannot delete the
      extent states
    - Do qgroup free and extent states deletion per-loop
      Current code can only work for PAGE_SIZE == sectorsize case.
    
    This refactor also makes it clear what we do for different sectors:
    
    - Sectors without ordered extent
      We're completely safe to remove all extent states for the sector(s)
    
    - Sectors with ordered extent, but no Private2 bit
      This means the endio has already been executed, we can't remove all
      extent states for the sector(s).
    
    - Sectors with ordere extent, still has Private2 bit
      This means we need to decrease the ordered extent accounting.
      And then it comes to two different variants:
    
      * We have finished and removed the ordered extent
        Then it's the same as "sectors without ordered extent"
      * We didn't finished the ordered extent
        We can remove some extent states, but not all.
    Signed-off-by: default avatarQu Wenruo <wqu@suse.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    3b835840
inode.c 298 KB