From 70c3306d382843bbd372ff8469ff8a18c06cf283 Mon Sep 17 00:00:00 2001 From: Jeff Mahoney Date: Fri, 9 Sep 2016 15:22:19 +0200 Subject: [PATCH] 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 Signed-off-by: David Sterba --- extent-tree.c | 2 ++ 1 file changed, 2 insertions(+) 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;