summaryrefslogtreecommitdiffstats
path: root/fs/btrfs/tree-checker.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/btrfs/tree-checker.c')
-rw-r--r--fs/btrfs/tree-checker.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/fs/btrfs/tree-checker.c b/fs/btrfs/tree-checker.c
index 3bade2ad39e8..db835635372f 100644
--- a/fs/btrfs/tree-checker.c
+++ b/fs/btrfs/tree-checker.c
@@ -496,9 +496,22 @@ static int check_leaf(struct btrfs_fs_info *fs_info, struct extent_buffer *leaf,
496 * skip this check for relocation trees. 496 * skip this check for relocation trees.
497 */ 497 */
498 if (nritems == 0 && !btrfs_header_flag(leaf, BTRFS_HEADER_FLAG_RELOC)) { 498 if (nritems == 0 && !btrfs_header_flag(leaf, BTRFS_HEADER_FLAG_RELOC)) {
499 u64 owner = btrfs_header_owner(leaf);
499 struct btrfs_root *check_root; 500 struct btrfs_root *check_root;
500 501
501 key.objectid = btrfs_header_owner(leaf); 502 /* These trees must never be empty */
503 if (owner == BTRFS_ROOT_TREE_OBJECTID ||
504 owner == BTRFS_CHUNK_TREE_OBJECTID ||
505 owner == BTRFS_EXTENT_TREE_OBJECTID ||
506 owner == BTRFS_DEV_TREE_OBJECTID ||
507 owner == BTRFS_FS_TREE_OBJECTID ||
508 owner == BTRFS_DATA_RELOC_TREE_OBJECTID) {
509 generic_err(fs_info, leaf, 0,
510 "invalid root, root %llu must never be empty",
511 owner);
512 return -EUCLEAN;
513 }
514 key.objectid = owner;
502 key.type = BTRFS_ROOT_ITEM_KEY; 515 key.type = BTRFS_ROOT_ITEM_KEY;
503 key.offset = (u64)-1; 516 key.offset = (u64)-1;
504 517