• Qu Wenruo's avatar
    btrfs: Add handler for invalidate page · b9d0b389
    Qu Wenruo authored
    For btrfs_invalidatepage() and its variant evict_inode_truncate_page(),
    there will be pages don't reach disk.
    In that case, their reserved space won't be release nor freed by
    finish_ordered_io() nor delayed_ref handler.
    
    So we must free their qgroup reserved space, or we will leaking reserved
    space again.
    
    So this will patch will call btrfs_qgroup_free_data() for
    invalidatepage() and its variant evict_inode_truncate_page().
    
    And due to the nature of new btrfs_qgroup_reserve/free_data() reserved
    space will only be reserved or freed once, so for pages which are
    already flushed to disk, their reserved space will be released and freed
    by delayed_ref handler.
    
    Double free won't be a problem.
    Signed-off-by: default avatarQu Wenruo <quwenruo@cn.fujitsu.com>
    Signed-off-by: default avatarChris Mason <clm@fb.com>
    b9d0b389
inode.c 266 KB