summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosef Bacik <jbacik@fusionio.com>2013-05-29 09:08:12 -0400
committerChris Mason <chris.mason@fusionio.com>2013-06-19 13:52:41 -0400
commite0ac34931aedc0df48171f47a2b2b77a503fbc41 (patch)
treecdf46e5fc743f40a31e2b86c51be893dca0b9b70
parent439ce45e4880c1f741bf4b0681d6c476e43760b2 (diff)
Btrfs-progs: fix free space cache checks
This fixes two bugs with the free space cache checker. First is we apparently always use root->sectorsize for our unit in the kernel so we have to do that in progs otherwise bitmaps turn out to not look right if we have leafsize != sectorsize. The second is a small issue if we had skinny metadata extents set, we wouldn't advance last properly because we unconditionally use key.offset instead of root->leafsize. Thanks, Signed-off-by: Josef Bacik <jbacik@fusionio.com> Signed-off-by: Chris Mason <chris.mason@fusionio.com>
-rw-r--r--cmds-check.c16
1 files changed, 6 insertions, 10 deletions
diff --git a/cmds-check.c b/cmds-check.c
index 7bb68ceb..288b36e5 100644
--- a/cmds-check.c
+++ b/cmds-check.c
@@ -2853,7 +2853,10 @@ static int verify_space_cache(struct btrfs_root *root,
}
if (last == key.objectid) {
- last = key.objectid + key.offset;
+ if (key.type == BTRFS_EXTENT_ITEM_KEY)
+ last = key.objectid + key.offset;
+ else
+ last = key.objectid + root->leafsize;
path->slots[0]++;
continue;
}
@@ -2906,15 +2909,8 @@ static int check_space_cache(struct btrfs_root *root)
start = cache->key.objectid + cache->key.offset;
if (!cache->free_space_ctl) {
- int sectorsize;
-
- if (cache->flags & (BTRFS_BLOCK_GROUP_METADATA |
- BTRFS_BLOCK_GROUP_SYSTEM))
- sectorsize = root->leafsize;
- else
- sectorsize = root->sectorsize;
-
- if (btrfs_init_free_space_ctl(cache, sectorsize)) {
+ if (btrfs_init_free_space_ctl(cache,
+ root->sectorsize)) {
ret = -ENOMEM;
break;
}