FAT32X is superset of FAT32, it is used to support partitions larger
than 8gigs on IDE drives. It has been present since Win95 OSR2. I have
not been able to get any details on how the fsinfo structure has changed.
If anyone has the information I'd love to implement a 'real' fix. Otherwise,
I'll try my hand at the raw filesystem and see if I can 'reverse engineer'
the differences. (But I would REALLY REALLY prefer not to do that) My
current problem is that I only have one drive partitioned as FAT32X and
I can't 'spare' it for testing.
Well, here's the patch and I'd appreciate any further information
anyone has...
Max Cohan
mcohan@adnc.net
diff -Naur linux/fs/fat/inode.c linux.new/fs/fat/inode.c
--- linux/fs/fat/inode.c Mon Jan 4 10:08:28 1999
+++ linux.new/fs/fat/inode.c Fri Feb 12 03:01:50 1999
@@ -371,12 +371,23 @@
}
fsinfo = (struct fat_boot_fsinfo *)
&bh->b_data[MSDOS_SB(sb)->fsinfo_offset];
- if (CF_LE_L(fsinfo->signature) != 0x61417272) {
- printk("fat_read_super: Did not find valid FSINFO "
- "signature. Found 0x%x\n",
- CF_LE_L(fsinfo->signature));
- } else {
+
+/* (MC) Determine if we know signature, otherwise set readonly mode */
+ if (CF_LE_L(fsinfo->signature) == 0x61417272) {
+ /* FAT32 - <8gig */
MSDOS_SB(sb)->free_clusters = CF_LE_L(fsinfo->free_clusters);
+ } elsif (CF_LE_L(fsinfo->signature) == 0x534F4453) {
+ /* FAT32X - >8gig */
+ printk("fat_read_super: FAT32X not supported yet.\n"
+ "fat_read_super: Forcing read-only mode.\n");
+ sb->s_flags |= MS_RDONLY;
+ } else {
+ /* Unknown FAT32 signature */
+ printk("fat_read_super: Did not find valid FSINFO "
+ "signature. Found 0x%x\n"
+ "fat_read_super: Forcing read-only mode.\n",
+ CF_LE_L(fsinfo->signature));
+ sb->s_flags |= MS_RDONLY;
}
} else {
fat32 = 0;
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/