diff --git a/e2fsprogs-1.40.4-blkid-ext4dev.patch b/e2fsprogs-1.40.4-blkid-ext4dev.patch new file mode 100644 index 0000000..63fa6a6 --- /dev/null +++ b/e2fsprogs-1.40.4-blkid-ext4dev.patch @@ -0,0 +1,82 @@ +Index: e2fsprogs-1.40.4/lib/blkid/probe.c +=================================================================== +--- e2fsprogs-1.40.4.orig/lib/blkid/probe.c ++++ e2fsprogs-1.40.4/lib/blkid/probe.c +@@ -148,6 +148,38 @@ static void get_ext2_info(blkid_dev dev, + set_uuid(dev, es->s_uuid, 0); + } + ++static int probe_ext4(struct blkid_probe *probe, ++ struct blkid_magic *id __BLKID_ATTR((unused)), ++ unsigned char *buf) ++{ ++ struct ext2_super_block *es; ++ es = (struct ext2_super_block *)buf; ++ ++ /* Distinguish between jbd and ext2/3/4 fs */ ++ if (blkid_le32(es->s_feature_incompat) & ++ EXT3_FEATURE_INCOMPAT_JOURNAL_DEV) ++ return -BLKID_ERR_PARAM; ++ ++ /* Distinguish between ext3/4 and ext2 */ ++ if (!(blkid_le32(es->s_feature_compat) & ++ EXT3_FEATURE_COMPAT_HAS_JOURNAL)) ++ return -BLKID_ERR_PARAM; ++ ++ /* Distinguish between ext4 and ext3 */ ++ if (!(blkid_le32(es->s_feature_ro_compat) & ++ EXT4_FEATURES_RO_COMPAT) && ++ !(blkid_le32(es->s_feature_incompat) & ++ EXT4_FEATURES_INCOMPAT)) ++ return -BLKID_ERR_PARAM; ++ ++ get_ext2_info(probe->dev, buf); ++ ++ if ((es->s_feature_compat & EXT3_FEATURE_COMPAT_HAS_JOURNAL) && ++ !uuid_is_null(es->s_journal_uuid)) ++ set_uuid(probe->dev, es->s_journal_uuid, "EXT_JOURNAL"); ++ ++ return 0; ++} + static int probe_ext3(struct blkid_probe *probe, + struct blkid_magic *id __BLKID_ATTR((unused)), + unsigned char *buf) +@@ -833,6 +865,7 @@ static struct blkid_magic type_array[] = + { "oracleasm", 0, 32, 8, "ORCLDISK", probe_oracleasm }, + { "ntfs", 0, 3, 8, "NTFS ", probe_ntfs }, + { "jbd", 1, 0x38, 2, "\123\357", probe_jbd }, ++ { "ext4dev", 1, 0x38, 2, "\123\357", probe_ext4 }, + { "ext3", 1, 0x38, 2, "\123\357", probe_ext3 }, + { "ext2", 1, 0x38, 2, "\123\357", probe_ext2 }, + { "reiserfs", 8, 0x34, 8, "ReIsErFs", probe_reiserfs }, +Index: e2fsprogs-1.40.4/lib/blkid/probe.h +=================================================================== +--- e2fsprogs-1.40.4.orig/lib/blkid/probe.h ++++ e2fsprogs-1.40.4/lib/blkid/probe.h +@@ -88,6 +88,26 @@ struct ext2_super_block { + #define EXT3_FEATURE_INCOMPAT_RECOVER 0x00000004 + #define EXT3_FEATURE_INCOMPAT_JOURNAL_DEV 0x00000008 + ++#define EXT4_FEATURE_RO_COMPAT_HUGE_FILE 0x0008 ++#define EXT4_FEATURE_RO_COMPAT_GDT_CSUM 0x0010 ++#define EXT4_FEATURE_RO_COMPAT_DIR_NLINK 0x0020 ++#define EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE 0x0040 ++ ++#define EXT4_FEATURE_INCOMPAT_EXTENTS 0x0040 /* extents support */ ++#define EXT4_FEATURE_INCOMPAT_64BIT 0x0080 ++#define EXT4_FEATURE_INCOMPAT_MMP 0x0100 ++#define EXT4_FEATURE_INCOMPAT_FLEX_BG 0x0200 ++ ++#define EXT4_FEATURES_RO_COMPAT (EXT4_FEATURE_RO_COMPAT_HUGE_FILE| \ ++ EXT4_FEATURE_RO_COMPAT_GDT_CSUM| \ ++ EXT4_FEATURE_RO_COMPAT_DIR_NLINK| \ ++ EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE) ++ ++#define EXT4_FEATURES_INCOMPAT (EXT4_FEATURE_INCOMPAT_EXTENTS| \ ++ EXT4_FEATURE_INCOMPAT_64BIT| \ ++ EXT4_FEATURE_INCOMPAT_MMP| \ ++ EXT4_FEATURE_INCOMPAT_FLEX_BG) ++ + struct xfs_super_block { + unsigned char xs_magic[4]; + __u32 xs_blocksize;