Commit c2fa821c authored by Josef Bacik's avatar Josef Bacik Committed by David Sterba
Browse files

btrfs: tree-checker: don't fail on empty extent roots for extent tree v2



For extent tree v2 we can definitely have empty extent roots, so skip
this particular check if we have that set.

Signed-off-by: default avatarJosef Bacik <josef@toxicpanda.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent 63cd070d
Loading
Loading
Loading
Loading
+13 −1
Original line number Original line Diff line number Diff line
@@ -1648,7 +1648,6 @@ static int check_leaf(struct extent_buffer *leaf, bool check_item_data)
		/* These trees must never be empty */
		/* These trees must never be empty */
		if (unlikely(owner == BTRFS_ROOT_TREE_OBJECTID ||
		if (unlikely(owner == BTRFS_ROOT_TREE_OBJECTID ||
			     owner == BTRFS_CHUNK_TREE_OBJECTID ||
			     owner == BTRFS_CHUNK_TREE_OBJECTID ||
			     owner == BTRFS_EXTENT_TREE_OBJECTID ||
			     owner == BTRFS_DEV_TREE_OBJECTID ||
			     owner == BTRFS_DEV_TREE_OBJECTID ||
			     owner == BTRFS_FS_TREE_OBJECTID ||
			     owner == BTRFS_FS_TREE_OBJECTID ||
			     owner == BTRFS_DATA_RELOC_TREE_OBJECTID)) {
			     owner == BTRFS_DATA_RELOC_TREE_OBJECTID)) {
@@ -1657,12 +1656,25 @@ static int check_leaf(struct extent_buffer *leaf, bool check_item_data)
				    owner);
				    owner);
			return -EUCLEAN;
			return -EUCLEAN;
		}
		}

		/* Unknown tree */
		/* Unknown tree */
		if (unlikely(owner == 0)) {
		if (unlikely(owner == 0)) {
			generic_err(leaf, 0,
			generic_err(leaf, 0,
				"invalid owner, root 0 is not defined");
				"invalid owner, root 0 is not defined");
			return -EUCLEAN;
			return -EUCLEAN;
		}
		}

		/* EXTENT_TREE_V2 can have empty extent trees. */
		if (btrfs_fs_incompat(fs_info, EXTENT_TREE_V2))
			return 0;

		if (unlikely(owner == BTRFS_EXTENT_TREE_OBJECTID)) {
			generic_err(leaf, 0,
			"invalid root, root %llu must never be empty",
				    owner);
			return -EUCLEAN;
		}

		return 0;
		return 0;
	}
	}