btrfs-progs: avoid looping forever when a bad blockgroup key is found

If we discover a bad BLOCK_GROUP_ITEM_KEY with offset = 0, we'll end up looping
forever when we read the block groups in.  This is due to the search for the
next block group starting at the current object + the offset.  If offset is 0,
we'll just get the same key over and over and never advance.  This patch
ensures that we'll advance at least one objectid per iteration.

Signed-off-by: Jeff Mahoney <jeffm@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
Jeff Mahoney 2016-09-09 15:22:19 +02:00 committed by David Sterba
parent db7b7cd95f
commit 70c3306d38

View File

@ -3259,6 +3259,8 @@ int btrfs_read_block_groups(struct btrfs_root *root)
cache->cached = 0;
cache->pinned = 0;
key.objectid = found_key.objectid + found_key.offset;
if (found_key.offset == 0)
key.objectid++;
btrfs_release_path(path);
cache->flags = btrfs_block_group_flags(&cache->item);
bit = 0;