* skip this check for relocation trees.
         */
        if (nritems == 0 && !btrfs_header_flag(leaf, BTRFS_HEADER_FLAG_RELOC)) {
+               u64 owner = btrfs_header_owner(leaf);
                struct btrfs_root *check_root;
 
-               key.objectid = btrfs_header_owner(leaf);
+               /* These trees must never be empty */
+               if (owner == BTRFS_ROOT_TREE_OBJECTID ||
+                   owner == BTRFS_CHUNK_TREE_OBJECTID ||
+                   owner == BTRFS_EXTENT_TREE_OBJECTID ||
+                   owner == BTRFS_DEV_TREE_OBJECTID ||
+                   owner == BTRFS_FS_TREE_OBJECTID ||
+                   owner == BTRFS_DATA_RELOC_TREE_OBJECTID) {
+                       generic_err(fs_info, leaf, 0,
+                       "invalid root, root %llu must never be empty",
+                                   owner);
+                       return -EUCLEAN;
+               }
+               key.objectid = owner;
                key.type = BTRFS_ROOT_ITEM_KEY;
                key.offset = (u64)-1;