From 217683b7fca9672293d997829fdbc25d7f667e79 Mon Sep 17 00:00:00 2001 From: "H. Peter Anvin" Date: Mon, 25 Jan 2010 11:34:33 -0800 Subject: FAT: deal with non-mirrored FATs for FAT32 FAT32 has the option of non-mirrored FATs, used to improve atomicity of some operations. If we have non-mirrored FATs, we need to make sure to read the one FAT which is currently marked active. Signed-off-by: H. Peter Anvin --- core/fs/fat/fat.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/core/fs/fat/fat.c b/core/fs/fat/fat.c index c89ed78a..b036ead4 100644 --- a/core/fs/fat/fat.c +++ b/core/fs/fat/fat.c @@ -743,8 +743,14 @@ static int vfat_fs_init(struct fs_info *fs) sbi->fat_type = FAT16; } else { sbi->fat_type = FAT32; + if (clusters > 0x0ffffff4) clusters = 0x0ffffff4; /* Maximum possible */ + + if (fat.fat32.extended_flags & 0x80) { + /* Non-mirrored FATs, we need to read the active one */ + sbi->fat += (fat.fat32.extended_flags & 0x0f) * sectors_per_fat; + } } sbi->clusters = clusters; -- cgit v1.2.1