btrfsck: make sure to dirty all block groups as we fix accounting

The code that corrects the count of bytes used in each block group
was only marking block groups dirty when they contained extents.  This
fixes things to dirty all the block groups, so any empty block groups
are written with their correct (zero) count.

Signed-off-by: Chris Mason <chris.mason@oracle.com>
master
Chris Mason 2012-02-09 09:29:19 -05:00
parent d01fcebeb5
commit 0bc5e18aac
1 changed files with 6 additions and 0 deletions

View File

@ -3378,6 +3378,8 @@ int btrfs_fix_block_accounting(struct btrfs_trans_handle *trans,
struct btrfs_block_group_cache *cache;
struct btrfs_fs_info *fs_info = root->fs_info;
root = root->fs_info->extent_root;
while(1) {
cache = btrfs_lookup_block_group(fs_info, start);
if (!cache)
@ -3385,6 +3387,10 @@ int btrfs_fix_block_accounting(struct btrfs_trans_handle *trans,
start = cache->key.objectid + cache->key.offset;
btrfs_set_block_group_used(&cache->item, 0);
cache->space_info->bytes_used = 0;
set_extent_bits(&root->fs_info->block_group_cache,
cache->key.objectid,
cache->key.objectid + cache->key.offset -1,
BLOCK_GROUP_DIRTY, GFP_NOFS);
}
btrfs_init_path(&path);