Subject: [PATCH] gnu: grub: Ignore metadata-csum-seed feature of ext4.

From: Lars-Dominik Braun <[email-masked]>
Date: Sun, 26 May 2024 17:19:12 +0200

* gnu/packages/patches/grub-ignore-metadata-csum-seed.patch: New file.
* gnu/local.mk: Register it.
* gnu/packages/bootloaders.scm (grub): Use it.

Change-Id: I3bfed24b38ecf31b85ed4ac654399fca2d2e12f6
---

This patch fixes issue 70480. Validated using the root-unmount system test.

 gnu/local.mk                                  |  1 +
 gnu/packages/bootloaders.scm                  |  3 +-
 .../grub-ignore-metadata-csum-seed.patch      | 54 +++++++++++++++++++
 3 files changed, 57 insertions(+), 1 deletion(-)
 create mode 100644 gnu/packages/patches/grub-ignore-metadata-csum-seed.patch

diff --git a/gnu/local.mk b/gnu/local.mk
index 502e97ecd5..7e9e1ebcf0 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1415,6 +1415,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/groovy-add-exceptionutilsgenerator.patch	\
   %D%/packages/patches/grub-efi-fat-serial-number.patch		\
   %D%/packages/patches/grub-setup-root.patch			\
+  %D%/packages/patches/grub-ignore-metadata-csum-seed.patch			\
   %D%/packages/patches/guile-1.8-cpp-4.5.patch			\
   %D%/packages/patches/guile-2.2-skip-oom-test.patch            \
   %D%/packages/patches/guile-2.2-skip-so-test.patch             \
diff --git a/gnu/packages/bootloaders.scm b/gnu/packages/bootloaders.scm
index 20af6fcee1..f37344c25b 100644
--- a/gnu/packages/bootloaders.scm
+++ b/gnu/packages/bootloaders.scm
@@ -113,7 +113,8 @@ (define-public grub
                 "1qbycnxkx07arj9f2nlsi9kp0dyldspbv07ysdyd34qvz55a97mp"))
               (patches (search-patches
                         "grub-efi-fat-serial-number.patch"
-                        "grub-setup-root.patch"))
+                        "grub-setup-root.patch"
+                        "grub-ignore-metadata-csum-seed.patch"))
               (modules '((guix build utils)))
               (snippet
                '(begin
diff --git a/gnu/packages/patches/grub-ignore-metadata-csum-seed.patch b/gnu/packages/patches/grub-ignore-metadata-csum-seed.patch
new file mode 100644
index 0000000000..cd9b897aa6
--- /dev/null
+++ b/gnu/packages/patches/grub-ignore-metadata-csum-seed.patch
@@ -0,0 +1,54 @@
+commit 7fd5feff97c4b1f446f8fcf6d37aca0c64e7c763
+Author: Javier Martinez Canillas <[email-masked]>
+Date:   Fri Jun 11 21:36:16 2021 +0200
+
+    fs/ext2: Ignore checksum seed incompat feature
+    
+    This incompat feature is used to denote that the filesystem stored its
+    metadata checksum seed in the superblock. This is used to allow tune2fs
+    changing the UUID on a mounted metdata_csum filesystem without having
+    to rewrite all the disk metadata. However, the GRUB doesn't use the
+    metadata checksum at all. So, it can just ignore this feature if it
+    is enabled. This is consistent with the GRUB filesystem code in general
+    which just does a best effort to access the filesystem's data.
+    
+    The checksum seed incompat feature has to be removed from the ignore
+    list if the support for metadata checksum verification is added to the
+    GRUB ext2 driver later.
+    
+    Suggested-by: Eric Sandeen <[email-masked]>
+    Suggested-by: Lukas Czerner <[email-masked]>
+    Signed-off-by: Javier Martinez Canillas <[email-masked]>
+    Reviewed-by: Lukas Czerner <[email-masked]>
+    Reviewed-by: Daniel Kiper <[email-masked]>
+
+diff --git a/grub-core/fs/ext2.c b/grub-core/fs/ext2.c
+index e7dd78e66..4953a1591 100644
+--- a/grub-core/fs/ext2.c
++++ b/grub-core/fs/ext2.c
+@@ -103,6 +103,7 @@ GRUB_MOD_LICENSE ("GPLv3+");
+ #define EXT4_FEATURE_INCOMPAT_64BIT		0x0080
+ #define EXT4_FEATURE_INCOMPAT_MMP		0x0100
+ #define EXT4_FEATURE_INCOMPAT_FLEX_BG		0x0200
++#define EXT4_FEATURE_INCOMPAT_CSUM_SEED		0x2000
+ #define EXT4_FEATURE_INCOMPAT_ENCRYPT          0x10000
+ 
+ /* The set of back-incompatible features this driver DOES support. Add (OR)
+@@ -123,10 +124,15 @@ GRUB_MOD_LICENSE ("GPLv3+");
+  * mmp:            Not really back-incompatible - was added as such to
+  *                 avoid multiple read-write mounts. Safe to ignore for this
+  *                 RO driver.
++ * checksum seed:  Not really back-incompatible - was added to allow tools
++ *                 such as tune2fs to change the UUID on a mounted metadata
++ *                 checksummed filesystem. Safe to ignore for now since the
++ *                 driver doesn't support checksum verification. However, it
++ *                 has to be removed from this list if the support is added later.
+  */
+ #define EXT2_DRIVER_IGNORED_INCOMPAT ( EXT3_FEATURE_INCOMPAT_RECOVER \
+-				     | EXT4_FEATURE_INCOMPAT_MMP)
+-
++				     | EXT4_FEATURE_INCOMPAT_MMP \
++				     | EXT4_FEATURE_INCOMPAT_CSUM_SEED)
+ 
+ #define EXT3_JOURNAL_MAGIC_NUMBER	0xc03b3998U
+ 

base-commit: 83fc6c7f72fcab3a68c82dd02f872429d632a2c0
prerequisite-patch-id: f5b496d7bc4037f90bafa2f243ec14cc4440fb70
-- 
2.44.1