|
@@ -10129,6 +10129,11 @@ int btrfs_read_block_groups(struct btrfs_root *root)
|
|
|
struct extent_buffer *leaf;
|
|
|
int need_clear = 0;
|
|
|
u64 cache_gen;
|
|
|
+ u64 feature;
|
|
|
+ int mixed;
|
|
|
+
|
|
|
+ feature = btrfs_super_incompat_flags(info->super_copy);
|
|
|
+ mixed = !!(feature & BTRFS_FEATURE_INCOMPAT_MIXED_GROUPS);
|
|
|
|
|
|
root = info->extent_root;
|
|
|
key.objectid = 0;
|
|
@@ -10182,6 +10187,15 @@ int btrfs_read_block_groups(struct btrfs_root *root)
|
|
|
btrfs_item_ptr_offset(leaf, path->slots[0]),
|
|
|
sizeof(cache->item));
|
|
|
cache->flags = btrfs_block_group_flags(&cache->item);
|
|
|
+ if (!mixed &&
|
|
|
+ ((cache->flags & BTRFS_BLOCK_GROUP_METADATA) &&
|
|
|
+ (cache->flags & BTRFS_BLOCK_GROUP_DATA))) {
|
|
|
+ btrfs_err(info,
|
|
|
+"bg %llu is a mixed block group but filesystem hasn't enabled mixed block groups",
|
|
|
+ cache->key.objectid);
|
|
|
+ ret = -EINVAL;
|
|
|
+ goto error;
|
|
|
+ }
|
|
|
|
|
|
key.objectid = found_key.objectid + found_key.offset;
|
|
|
btrfs_release_path(path);
|