• Mark Fasheh's avatar
    btrfs: qgroup: account shared subtrees during snapshot delete · 1152651a
    Mark Fasheh authored
    During its tree walk, btrfs_drop_snapshot() will skip any shared
    subtrees it encounters. This is incorrect when we have qgroups
    turned on as those subtrees need to have their contents
    accounted. In particular, the case we're concerned with is when
    removing our snapshot root leaves the subtree with only one root
    reference.
    
    In those cases we need to find the last remaining root and add
    each extent in the subtree to the corresponding qgroup exclusive
    counts.
    
    This patch implements the shared subtree walk and a new qgroup
    operation, BTRFS_QGROUP_OPER_SUB_SUBTREE. When an operation of
    this type is encountered during qgroup accounting, we search for
    any root references to that extent and in the case that we find
    only one reference left, we go ahead and do the math on it's
    exclusive counts.
    Signed-off-by: default avatarMark Fasheh <mfasheh@suse.de>
    Reviewed-by: default avatarJosef Bacik <jbacik@fb.com>
    Signed-off-by: default avatarChris Mason <clm@fb.com>
    1152651a
qgroup.c 70.6 KB