• Qu Wenruo's avatar
    btrfs: qgroup: Split meta rsv type into meta_prealloc and meta_pertrans · 733e03a0
    Qu Wenruo authored
    Btrfs uses 2 different methods to reseve metadata qgroup space.
    
    1) Reserve at btrfs_start_transaction() time
       This is quite straightforward, caller will use the trans handler
       allocated to modify b-trees.
    
       In this case, reserved metadata should be kept until qgroup numbers
       are updated.
    
    2) Reserve by using block_rsv first, and later btrfs_join_transaction()
       This is more complicated, caller will reserve space using block_rsv
       first, and then later call btrfs_join_transaction() to get a trans
       handle.
    
       In this case, before we modify trees, the reserved space can be
       modified on demand, and after btrfs_join_transaction(), such reserved
       space should also be kept until qgroup numbers are updated.
    
    Since these two types behave differently, split the original "META"
    reservation type into 2 sub-types:
    
      META_PERTRANS:
        For above case 1)
    
      META_PREALLOC:
        For reservations that happened before btrfs_join_transaction() of
        case 2)
    
    NOTE: This patch will only convert existing qgroup meta reservation
    callers according to its situation, not ensuring all callers are at
    correct timing.
    Such fix will be added in later patches.
    Signed-off-by: default avatarQu Wenruo <wqu@suse.com>
    [ update comments ]
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    733e03a0
qgroup.c 79.1 KB