diff options
author | maximilian attems <max@stro.at> | 2008-06-16 02:03:03 +0200 |
---|---|---|
committer | maximilian attems <max@stro.at> | 2008-06-16 02:15:49 +0200 |
commit | d3603182d06c177eecfc0507dc931375bdc56d4e (patch) | |
tree | 88aa8ea035c3810354b6ee88c94146ffc43dead6 | |
parent | 34a10f9b28a011e2cf42226ef260ad0d73ddc5b3 (diff) | |
download | klibc-d3603182d06c177eecfc0507dc931375bdc56d4e.tar.gz |
[klibc] fstype: fix ext4dev detectionklibc-1.5.11
ext4dev changed on disc format, cope with 2.6.26-rc6 ext4dev
using e2fsprogs 1.40.8-2
mke2fs -q -j /dev/mapper/dualvg0-foo -E test_fs
mount /dev/mapper/dualvg0-foo /mnt/ -t ext4dev
EXT4 FS on dm-12, internal journal
EXT4-fs: mounted filesystem with ordered data mode.
EXT4-fs: file extents enabled
EXT4-fs: mballoc enabled
./usr/kinit/fstype/shared/fstype /dev/mapper/dualvg0-foo
FSTYPE=ext4dev
FSSIZE=1073741824
as bonus fix ext3_super_block to latest definition.
Signed-off-by: maximilian attems <max@stro.at>
-rw-r--r-- | usr/kinit/fstype/ext3_fs.h | 39 | ||||
-rw-r--r-- | usr/kinit/fstype/fstype.c | 8 |
2 files changed, 42 insertions, 5 deletions
diff --git a/usr/kinit/fstype/ext3_fs.h b/usr/kinit/fstype/ext3_fs.h index 12d64fe5e5f0c..f958e5cd7f00b 100644 --- a/usr/kinit/fstype/ext3_fs.h +++ b/usr/kinit/fstype/ext3_fs.h @@ -6,12 +6,31 @@ */ #define EXT3_SUPER_MAGIC 0xEF53 +#define EXT2_FLAGS_TEST_FILESYS 0x0004 +#define EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER 0x0001 +#define EXT2_FEATURE_RO_COMPAT_LARGE_FILE 0x0002 +#define EXT2_FEATURE_RO_COMPAT_BTREE_DIR 0x0004 +#define EXT2_FEATURE_INCOMPAT_FILETYPE 0x0002 +#define EXT2_FEATURE_INCOMPAT_META_BG 0x0010 #define EXT3_FEATURE_COMPAT_HAS_JOURNAL 0x0004 #define EXT3_FEATURE_INCOMPAT_JOURNAL_DEV 0x0008 +#define EXT3_FEATURE_INCOMPAT_RECOVER 0x0004 + #define EXT3_FEATURE_INCOMPAT_EXTENTS 0x0040 #define EXT4_FEATURE_INCOMPAT_64BIT 0x0080 #define EXT4_FEATURE_INCOMPAT_MMP 0x0100 +#define EXT3_FEATURE_RO_COMPAT_SUPP (EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER| \ + EXT2_FEATURE_RO_COMPAT_LARGE_FILE| \ + EXT2_FEATURE_RO_COMPAT_BTREE_DIR) +#define EXT3_FEATURE_RO_COMPAT_UNSUPPORTED ~EXT3_FEATURE_RO_COMPAT_SUPP +#define EXT3_FEATURE_INCOMPAT_SUPP (EXT2_FEATURE_INCOMPAT_FILETYPE| \ + EXT3_FEATURE_INCOMPAT_RECOVER| \ + EXT2_FEATURE_INCOMPAT_META_BG) +#define EXT3_FEATURE_INCOMPAT_UNSUPPORTED ~EXT3_FEATURE_INCOMPAT_SUPP + + + /* * Structure of the super block */ @@ -93,9 +112,23 @@ struct ext3_super_block { __u32 s_last_orphan; /* start of list of inodes to delete */ __u32 s_hash_seed[4]; /* HTREE hash seed */ __u8 s_def_hash_version; /* Default hash version to use */ - __u8 s_reserved_char_pad; - __u16 s_reserved_word_pad; - __u32 s_reserved[192]; /* Padding to the end of the block */ + __u8 s_jnl_backup_type; + __u16 s_reserved_word_pad; + __u32 s_default_mount_opts; + __u32 s_first_meta_bg; + __u32 s_mkfs_time; + __u32 s_jnl_blocks[17]; + __u32 s_blocks_count_hi; + __u32 s_r_blocks_count_hi; + __u32 s_free_blocks_hi; + __u16 s_min_extra_isize; + __u16 s_want_extra_isize; + __u32 s_flags; + __u16 s_raid_stride; + __u16 s_mmp_interval; + __u64 s_mmp_block; + __u32 s_raid_stripe_width; + __u32 s_reserved[163]; }; #endif /* __EXT3_FS_H */ diff --git a/usr/kinit/fstype/fstype.c b/usr/kinit/fstype/fstype.c index eee3431402c1d..95c70a8c48ab9 100644 --- a/usr/kinit/fstype/fstype.c +++ b/usr/kinit/fstype/fstype.c @@ -115,11 +115,15 @@ static int ext4_image(const void *buf, unsigned long long *bytes) const struct ext3_super_block *sb = (const struct ext3_super_block *)buf; + /* ext4dev needs ext2 + journal + test_fs flag + one !ext3 feature */ if (sb->s_magic == __cpu_to_le16(EXT2_SUPER_MAGIC) + && (sb->s_feature_compat + & __cpu_to_le32(EXT3_FEATURE_COMPAT_HAS_JOURNAL)) + && (sb->s_flags & __cpu_to_le32(EXT2_FLAGS_TEST_FILESYS)) && (sb->s_feature_incompat - & __cpu_to_le32(EXT3_FEATURE_INCOMPAT_EXTENTS) + & __cpu_to_le32(EXT3_FEATURE_RO_COMPAT_SUPP) || sb->s_feature_incompat - & __cpu_to_le32(EXT4_FEATURE_INCOMPAT_64BIT) + & __cpu_to_le32(EXT3_FEATURE_INCOMPAT_UNSUPPORTED) || sb->s_feature_incompat & __cpu_to_le32(EXT4_FEATURE_INCOMPAT_MMP))) { *bytes = (unsigned long long)__le32_to_cpu(sb->s_blocks_count) |