summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Mahoney <jeffm@suse.com>2016-09-09 15:22:19 +0200
committerDavid Sterba <dsterba@suse.com>2016-09-21 11:49:36 +0200
commit70c3306d382843bbd372ff8469ff8a18c06cf283 (patch)
treee54fa6bcc5fcf72c76af92d6008361d27cf74d04
parentdb7b7cd95f53c15c1b302fc404d28dce2aa7394b (diff)
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>
-rw-r--r--extent-tree.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/extent-tree.c b/extent-tree.c
index 6cc8d3f5..0607be66 100644
--- a/extent-tree.c
+++ b/extent-tree.c
@@ -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;