]> git.baikalelectronics.ru Git - kernel.git/commit
btrfs: qgroup: allow to remove qgroup which has parent but no child.
authorDongsheng Yang <yangds.fnst@cn.fujitsu.com>
Mon, 24 Nov 2014 15:27:09 +0000 (10:27 -0500)
committerChris Mason <clm@fb.com>
Mon, 13 Apr 2015 14:52:52 +0000 (07:52 -0700)
commite006b9c61b1e763e010f82b8961b4c12470dd09c
tree48a56daac94c95f58f3a6c10ef5c10bf0d7d0c19
parent7990cada7c1c28e2a71e983ac6de12b005038c37
btrfs: qgroup: allow to remove qgroup which has parent but no child.

When a qgroup has parents but no child, it should be removable in
Theory I think. But currently, we can not remove it when it has
either parent or child.

Example:
# btrfs quota enable /mnt
# btrfs qgroup create 1/0 /mnt
# btrfs qgroup create 2/0 /mnt
# btrfs qgroup assign 1/0 2/0 /mnt
# btrfs qgroup show -pcre /mnt
qgroupid rfer  excl  max_rfer max_excl parent  child
-------- ----  ----  -------- -------- ------  -----
0/5      16384 16384 0        0        ---     ---
1/0      0     0     0        0        2/0     ---
2/0      0     0     0        0        ---     1/0

At this time, there is no subvol or qgroup depending on it.
Just a qgroup 2/0 is its parent, but 2/0 can work well without
1/0. So I think 1/0 should be removalbe. But:
# btrfs qgroup destroy 1/0 /mnt
ERROR: unable to destroy quota group: Device or resource busy

This patch remove the check of qgroup->parent in removing it,
then we can remove a qgroup when it has a parent.

Signed-off-by: Dongsheng Yang <yangds.fnst@cn.fujitsu.com>
Signed-off-by: Chris Mason <clm@fb.com>
fs/btrfs/qgroup.c