61 lines
2.6 KiB
Diff
61 lines
2.6 KiB
Diff
Patch-Source: https://git.savannah.gnu.org/cgit/grub.git/patch/?id=2e9fa73a040462b81bfbfe56c0bc7ad2d30b446b
|
|
useful to support the large_dir ext4 feature
|
|
--
|
|
From 2e9fa73a040462b81bfbfe56c0bc7ad2d30b446b Mon Sep 17 00:00:00 2001
|
|
From: Theodore Ts'o <tytso@mit.edu>
|
|
Date: Tue, 30 Aug 2022 22:41:59 -0400
|
|
Subject: fs/ext2: Ignore the large_dir incompat feature
|
|
|
|
Recently, ext4 added the large_dir feature, which adds support for
|
|
a 3 level htree directory support.
|
|
|
|
The GRUB supports existing file systems with htree directories by
|
|
ignoring their existence, and since the index nodes for the hash tree
|
|
look like deleted directory entries (by design), the GRUB can simply do
|
|
a brute force O(n) linear search of directories. The same is true for
|
|
3 level deep htrees indicated by large_dir feature flag.
|
|
|
|
Hence, it is safe for the GRUB to ignore the large_dir incompat feature.
|
|
|
|
Fixes: https://savannah.gnu.org/bugs/?61606
|
|
|
|
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
|
|
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
|
|
---
|
|
grub-core/fs/ext2.c | 10 +++++++++-
|
|
1 file changed, 9 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/grub-core/fs/ext2.c b/grub-core/fs/ext2.c
|
|
index 0989e26..e1cc5e6 100644
|
|
--- a/grub-core/fs/ext2.c
|
|
+++ b/grub-core/fs/ext2.c
|
|
@@ -104,6 +104,7 @@ GRUB_MOD_LICENSE ("GPLv3+");
|
|
#define EXT4_FEATURE_INCOMPAT_MMP 0x0100
|
|
#define EXT4_FEATURE_INCOMPAT_FLEX_BG 0x0200
|
|
#define EXT4_FEATURE_INCOMPAT_CSUM_SEED 0x2000
|
|
+#define EXT4_FEATURE_INCOMPAT_LARGEDIR 0x4000 /* >2GB or 3 level htree */
|
|
#define EXT4_FEATURE_INCOMPAT_ENCRYPT 0x10000
|
|
|
|
/* The set of back-incompatible features this driver DOES support. Add (OR)
|
|
@@ -129,10 +130,17 @@ GRUB_MOD_LICENSE ("GPLv3+");
|
|
* 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.
|
|
+ * large_dir: Not back-incompatible given that the GRUB ext2 driver does
|
|
+ * not implement EXT2_FEATURE_COMPAT_DIR_INDEX. If the GRUB
|
|
+ * eventually supports the htree feature (aka dir_index)
|
|
+ * it should support 3 level htrees and then move
|
|
+ * EXT4_FEATURE_INCOMPAT_LARGEDIR to
|
|
+ * EXT2_DRIVER_SUPPORTED_INCOMPAT.
|
|
*/
|
|
#define EXT2_DRIVER_IGNORED_INCOMPAT ( EXT3_FEATURE_INCOMPAT_RECOVER \
|
|
| EXT4_FEATURE_INCOMPAT_MMP \
|
|
- | EXT4_FEATURE_INCOMPAT_CSUM_SEED)
|
|
+ | EXT4_FEATURE_INCOMPAT_CSUM_SEED \
|
|
+ | EXT4_FEATURE_INCOMPAT_LARGEDIR)
|
|
|
|
#define EXT3_JOURNAL_MAGIC_NUMBER 0xc03b3998U
|
|
|
|
--
|
|
cgit v1.1
|