VFAT/FAT32 Patch - Request for Info.

Max Cohan (mcohan@adnc.net)
Mon, 15 Feb 1999 15:52:54 -0800


I have a quick patch for 2.2.x that cleans up the error reported
when the fat fs encounters a FAT32X partition. However, I've had
very little luck in finding the details of the filesystem.

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/