]> glassweightruler.freedombox.rocks Git - Ventoy.git/commitdiff
Support ext4 fs with checksum seed feature.
authorlongpanda <admin@ventoy.net>
Sun, 19 May 2024 04:14:02 +0000 (12:14 +0800)
committerlongpanda <admin@ventoy.net>
Sun, 19 May 2024 04:14:02 +0000 (12:14 +0800)
GRUB2/MOD_SRC/grub-2.04/grub-core/fs/ext2.c

index 8e5b38b0aa8ba2f333e62a0576824c41953c46dd..0a69a96e6f9c47c6a8b3bbbfac85fe701f132052 100644 (file)
@@ -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,9 +124,16 @@ 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. But it must
+ *                 be removed from this list if that 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
@@ -723,10 +731,11 @@ grub_ext2_read_symlink (grub_fshelp_node_t node)
   if (! symlink)
     return 0;
 
-  /* If the filesize of the symlink is bigger than
-     60 the symlink is stored in a separate block,
-     otherwise it is stored in the inode.  */
-  if (grub_le_to_cpu32 (diro->inode.size) <= sizeof (diro->inode.symlink))
+  /*
+   * If the filesize of the symlink is equal to or bigger than 60 the symlink
+   * is stored in a separate block, otherwise it is stored in the inode.
+   */
+  if (grub_le_to_cpu32 (diro->inode.size) < sizeof (diro->inode.symlink))
     grub_memcpy (symlink,
                 diro->inode.symlink,
                 grub_le_to_cpu32 (diro->inode.size));