On Tue, Aug 12, 2014 at 02:22:31PM -0400, Chris Mason wrote:
> 
> 
> On 07/17/2014 03:39 PM, Mark Fasheh wrote:
> > 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 <mfas...@suse.de>
> > Reviewed-by: Josef Bacik <jba...@fb.com>
> > diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
> > index 813537f..1aa4325 100644
> > --- a/fs/btrfs/extent-tree.c
> > +++ b/fs/btrfs/extent-tree.c
> > @@ -8078,6 +8331,14 @@ int btrfs_drop_snapshot(struct btrfs_root *root,
> >     }
> >     root_dropped = true;
> >  out_end_trans:
> > +   ret = btrfs_delayed_qgroup_accounting(trans, root->fs_info);
>                                                      ^^^^^^^^^^^
> 
> CONFIG_DEBUG_PAGEALLOC noticed that root is already free at this point.
>  I switched it to tree_root instead ;)

Oh nice catch, thanks for pointing it out.

Time to go update my suse patches.
        --Mark


--
Mark Fasheh
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to