• Qu Wenruo's avatar
    btrfs: introduce btrfs_subpage for data inodes · 32443de3
    Qu Wenruo authored
    To support subpage sector size, data also need extra info to make sure
    which sectors in a page are uptodate/dirty/...
    
    This patch will make pages for data inodes get btrfs_subpage structure
    attached, and detached when the page is freed.
    
    This patch also slightly changes the timing when
    set_page_extent_mapped() is called to make sure:
    
    - We have page->mapping set
      page->mapping->host is used to grab btrfs_fs_info, thus we can only
      call this function after page is mapped to an inode.
    
      One call site attaches pages to inode manually, thus we have to modify
      the timing of set_page_extent_mapped() a bit.
    
    - As soon as possible, before other operations
      Since memory allocation can fail, we have to do extra error handling.
      Calling set_page_extent_mapped() as soon as possible can simply the
      error handling for several call sites.
    
    The idea is pretty much the same as iomap_page, but with more bitmaps
    for btrfs specific cases.
    
    Currently the plan is to switch iomap if iomap can provide sector
    aligned write back (only write back dirty sectors, but not the full
    page, data balance require this feature).
    
    So we will stick to btrfs specific bitmap for now.
    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>
    32443de3
inode.c 289 KB