]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
btrfs: fix missing fields in superblock backup with BLOCK_GROUP_TREE
authorMark Harmstone <mark@harmstone.com>
Tue, 13 Jan 2026 18:37:56 +0000 (18:37 +0000)
committerDavid Sterba <dsterba@suse.com>
Tue, 20 Jan 2026 16:18:47 +0000 (17:18 +0100)
When the BLOCK_GROUP_TREE compat_ro flag is set, the extent root and
csum root fields are getting missed.

This is because EXTENT_TREE_V2 treated these differently, and when
they were split off this special-casing was mistakenly assigned to
BGT rather than the rump EXTENT_TREE_V2. There's no reason why the
existence of the block group tree should mean that we don't record the
details of the last commit's extent root and csum root.

Fix the code in backup_super_roots() so that the correct check gets
made.

Fixes: 1c56ab991903 ("btrfs: separate BLOCK_GROUP_TREE compat RO flag from EXTENT_TREE_V2")
Reviewed-by: Qu Wenruo <wqu@suse.com>
Signed-off-by: Mark Harmstone <mark@harmstone.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/disk-io.c

index fbd498aa9b994005daf82099b76477dfb03e0013..22d706e4f341f5f4b23815d5ba2482bb327ba536 100644 (file)
@@ -1661,7 +1661,7 @@ static void backup_super_roots(struct btrfs_fs_info *info)
        btrfs_set_backup_chunk_root_level(root_backup,
                               btrfs_header_level(info->chunk_root->node));
 
-       if (!btrfs_fs_compat_ro(info, BLOCK_GROUP_TREE)) {
+       if (!btrfs_fs_incompat(info, EXTENT_TREE_V2)) {
                struct btrfs_root *extent_root = btrfs_extent_root(info, 0);
                struct btrfs_root *csum_root = btrfs_csum_root(info, 0);