Mounting of a FAT32-formatted file system fails on IA-64. Same works on IA-32. (use fdisk to make one big sdb1 partition, 18GB or so) mkdosfs -F 32 /dev/sdb1 mount /dev/sdb1 /mnt/fat32-1 On IA-64, I get the following error: Directory 1: bad FAT (from linux/fs/fat/inode.c) File system panic (dev 08:11) FAT error (from linux/fs/fat/misc.c) File system has been set read-only. If the file system previously existed (created by any other tool), after the (read-only) mount, I can only see garbage.
kernel 2.4.0-0.34 (2.4.0-test9) is where this fails.
Persists in 2.4.0-test10.
Works in test11 on an ia32 box. Oddly, the filesystem was made on an ia32, so it's not a problem with mkdosfs.
I've never seen this fail on IA-32, regardless of kernel.
Sizeof(fat_boot_sector,fat_boot_fsinfo,msdos_dir_entry,msdos_dir_slot) are all identical between IA-32 and IA-64. vfat_slot_info is different, but only because loff_t changes size, but that isn't stored on-disk (I don't think). #define MODULE #define __KERNEL__ #define MODVERSIONS #include <linux/module.h> #include <linux/modversions.h> #include <linux/config.h> #include <linux/fs.h> #include <linux/kernel.h> #include <linux/string.h> #include <linux/msdos_fs.h> int init_module(void) { printk("sizeof(struct fat_boot_sector) = %d\n", sizeof(struct fat_boot_sector) ); printk("sizeof(struct fat_boot_fsinfo) = %d\n", sizeof(struct fat_boot_fsinfo) ); printk("sizeof(struct msdos_dir_entry) = %d\n", sizeof(struct msdos_dir_entry) ); printk("sizeof(struct msdos_dir_slot) = %d\n", sizeof(struct msdos_dir_slot)); printk("sizeof(struct vfat_slot_info) = %d\n", sizeof(struct vfat_slot_info)); return 0; } void cleanup_module(void) { }
Fixed in kernel24-2.4.0-0.41 (and 2.2.18pre23, FWIW).