]> git.baikalelectronics.ru Git - kernel.git/commit
Btrfs: remove empty block groups automatically
authorJosef Bacik <jbacik@fb.com>
Thu, 18 Sep 2014 15:20:02 +0000 (11:20 -0400)
committerChris Mason <clm@fb.com>
Tue, 23 Sep 2014 00:13:21 +0000 (17:13 -0700)
commit33e21c9cc06e9a26612aac4dab6e5a5d66d2ae70
tree5d1001d192e6ccd0159d59e31d705b38e17c09ef
parent4e9b2621523012847fe6ae255cc941dc9a8555ad
Btrfs: remove empty block groups automatically

One problem that has plagued us is that a user will use up all of his space with
data, remove a bunch of that data, and then try to create a bunch of small files
and run out of space.  This happens because all the chunks were allocated for
data since the metadata requirements were so low.  But now there's a bunch of
empty data block groups and not enough metadata space to do anything.  This
patch solves this problem by automatically deleting empty block groups.  If we
notice the used count go down to 0 when deleting or on mount notice that a block
group has a used count of 0 then we will queue it to be deleted.

When the cleaner thread runs we will double check to make sure the block group
is still empty and then we will delete it.  This patch has the side effect of no
longer having a bunch of BUG_ON()'s in the chunk delete code, which will be
helpful for both this and relocate.  Thanks,

Signed-off-by: Josef Bacik <jbacik@fb.com>
Signed-off-by: Chris Mason <clm@fb.com>
fs/btrfs/ctree.h
fs/btrfs/disk-io.c
fs/btrfs/extent-tree.c
fs/btrfs/tests/free-space-tests.c
fs/btrfs/volumes.c
fs/btrfs/volumes.h