]> git.baikalelectronics.ru Git - kernel.git/commit
btrfs: qgroup: account shared subtrees during snapshot delete
authorMark Fasheh <mfasheh@suse.de>
Thu, 17 Jul 2014 19:39:01 +0000 (12:39 -0700)
committerChris Mason <clm@fb.com>
Fri, 15 Aug 2014 14:43:14 +0000 (07:43 -0700)
commit0b0ccec7619839b53c16305bde58538e9ae89037
treea7d5b02f161a7c4f9cdab947a68569475a93146c
parent19391229bcef09015854f7783ccfffc1ccef638f
btrfs: qgroup: account shared subtrees during snapshot delete

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: Mark Fasheh <mfasheh@suse.de>
Reviewed-by: Josef Bacik <jbacik@fb.com>
Signed-off-by: Chris Mason <clm@fb.com>
fs/btrfs/extent-tree.c
fs/btrfs/qgroup.c
fs/btrfs/qgroup.h