FAILED: patch "[PATCH] btrfs: properly flag filesystem with" failed to apply to 5.4-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 5.4-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From e26b04c4c91925dba57324db177a24e18e2d0013 Mon Sep 17 00:00:00 2001
From: Nikolay Borisov <[email protected]>
Date: Thu, 23 Jun 2022 10:55:47 +0300
Subject: [PATCH] btrfs: properly flag filesystem with
BTRFS_FEATURE_INCOMPAT_BIG_METADATA
Commit 6f93e834fa7c seemingly inadvertently moved the code responsible for flagging the filesystem as having BIG_METADATA to a place where setting the flag was essentially lost. This means that filesystems created with kernels containing this bug (starting with 5.15) can potentially be mounted by older (pre-3.4) kernels. In reality chances for this happening are low because there are other incompat flags introduced in the mean time. Still the correct behavior is to set INCOMPAT_BIG_METADATA flag and persist this in the superblock.
fs/btrfs/disk-io.c +11 -10
@@ -3484,16 +3484,6 @@ int __cold open_ctree(struct super_block *sb, struct btrfs_fs_devices *fs_device*/ fs_info->compress_type =BTRFS_COMPRESS_ZLIB ; -/* -* Flag our filesystem as having big metadata blocks if they are bigger -* than the page size. -*/ -if (btrfs_super_nodesize (disk_super) >PAGE_SIZE ) { -if (!(features &BTRFS_FEATURE_INCOMPAT_BIG_METADATA )) -btrfs_info (fs_info, -"flagging fs with big metadata feature" ); - features |=BTRFS_FEATURE_INCOMPAT_BIG_METADATA ; - }/* Set up fs_info before parsing mount options */ nodesize =btrfs_super_nodesize (disk_super);
@@ -3534,6 +3524,17 @@ int __cold open_ctree(struct super_block *sb, struct btrfs_fs_devices *fs_deviceif (features &BTRFS_FEATURE_INCOMPAT_SKINNY_METADATA )btrfs_info (fs_info,"has skinny extents" ); +/* +* Flag our filesystem as having big metadata blocks if they are bigger +* than the page size. +*/ +if (btrfs_super_nodesize (disk_super) >PAGE_SIZE ) { +if (!(features &BTRFS_FEATURE_INCOMPAT_BIG_METADATA )) +btrfs_info (fs_info, +"flagging fs with big metadata feature" ); + features |=BTRFS_FEATURE_INCOMPAT_BIG_METADATA ; + } +/* * mixed block groups end up with duplicate but slightly offset * extent buffers for the same range. It leads to corruptions