Index: e2fsprogs-1.39+1.40_WIP_20061114/lib/blkid/probe.c =================================================================== --- e2fsprogs-1.39+1.40_WIP_20061114.orig/lib/blkid/probe.c +++ e2fsprogs-1.39+1.40_WIP_20061114/lib/blkid/probe.c @@ -148,6 +148,39 @@ 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 fs */ + if (blkid_le32(es->s_feature_incompat) & + EXT3_FEATURE_INCOMPAT_JOURNAL_DEV) + return -BLKID_ERR_PARAM; + + /* Distinguish between ext3 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_incompat) & + EXT3_FEATURE_INCOMPAT_EXTENTS)) + return -BLKID_ERR_PARAM; + + get_ext2_info(probe->dev, buf); + + if ((es->s_feature_incompat & EXT3_FEATURE_COMPAT_HAS_JOURNAL) && + !uuid_is_null(es->s_journal_uuid)) + set_uuid(probe->dev, es->s_journal_uuid, "EXT_JOURNAL"); + + blkid_set_tag(probe->dev, "SEC_TYPE", "ext2", sizeof("ext2")); + + return 0; +} + static int probe_ext3(struct blkid_probe *probe, struct blkid_magic *id __BLKID_ATTR((unused)), unsigned char *buf) @@ -710,6 +743,7 @@ static struct blkid_magic type_array[] = /* type kboff sboff len magic probe */ { "oracleasm", 0, 32, 8, "ORCLDISK", probe_oracleasm }, { "ntfs", 0, 3, 8, "NTFS ", 0 }, + { "ext4dev", 1, 0x38, 2, "\123\357", probe_ext4 }, { "jbd", 1, 0x38, 2, "\123\357", probe_jbd }, { "ext3", 1, 0x38, 2, "\123\357", probe_ext3 }, { "ext2", 1, 0x38, 2, "\123\357", probe_ext2 }, Index: e2fsprogs-1.39+1.40_WIP_20061114/lib/blkid/probe.h =================================================================== --- e2fsprogs-1.39+1.40_WIP_20061114.orig/lib/blkid/probe.h +++ e2fsprogs-1.39+1.40_WIP_20061114/lib/blkid/probe.h @@ -87,6 +87,8 @@ struct ext2_super_block { #define EXT3_FEATURE_COMPAT_HAS_JOURNAL 0x00000004 #define EXT3_FEATURE_INCOMPAT_RECOVER 0x00000004 #define EXT3_FEATURE_INCOMPAT_JOURNAL_DEV 0x00000008 +#define EXT3_FEATURE_INCOMPAT_EXTENTS 0x00000040 + struct xfs_super_block { unsigned char xs_magic[4];