zones = version == 2 ? sb->s_zones : sb->s_nzones;
/* sanity checks to be sure that the FS is really minix */
if (sb->s_imap_blocks * MINIX_BLOCK_SIZE * 8 < sb->s_ninodes + 1) return -1;
if (sb->s_zmap_blocks * MINIX_BLOCK_SIZE * 8 < zones - sb->s_firstdatazone + 1) return -1;
The data overlaps beyond the start of the ext4 blocks group descriptor, so the value of s_ninodes is not obvious to me.
struct minix_super_block struct ext4_group_desc
uint16_t s_ninodes; /* before the ext4_group_desc */
For a filesystem that fails, can you attach the first 10K of the partition?
sudo dd if=/dev/sda1 of=/tmp/10k.data bs=10k count=1
The minix sanity checks are failing:
sb = blkid_probe_ get_sb( pr, mag, struct minix_super_block);
return -1;
if (!sb || sb->s_imap_blocks == 0 || sb->s_zmap_blocks == 0)
/* sanity checks to be sure that the FS is really minix */
return -1;
return -1;
if (sb->s_imap_blocks * MINIX_BLOCK_SIZE * 8 < sb->s_ninodes + 1)
if (sb->s_zmap_blocks * MINIX_BLOCK_SIZE * 8 < zones - sb->s_firstdatazone + 1)
The data overlaps beyond the start of the ext4 blocks group descriptor, so the value of s_ninodes is not obvious to me.
struct minix_super_block struct ext4_group_desc
uint16_t s_ninodes; /* before the ext4_group_desc */
uint16_t s_nzones; __le32 bg_block_bitmap_lo; /* Blocks bitmap block */
uint16_t s_imap_blocks;
uint16_t s_zmap_blocks; __le32 bg_inode_bitmap_lo; /* Inodes bitmap block */
uint16_t s_firstdatazone;
uint16_t s_log_zone_size; __le32 bg_inode_table_lo; /* Inodes table block */ blocks_ count_lo; /* Free blocks count */
uint32_t s_max_size; __le16 bg_free_
uint16_t s_magic; __le16 bg_free_ inodes_ count_lo; /* Free inodes count */
...