From: H. Peter Anvin Date: Mon, 25 Jan 2010 19:34:33 +0000 (-0800) Subject: FAT: deal with non-mirrored FATs for FAT32 X-Git-Tag: syslinux-4.00-pre11~3 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=217683b7fca9672293d997829fdbc25d7f667e79;p=platform%2Fupstream%2Fsyslinux.git 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 --- diff --git a/core/fs/fat/fat.c b/core/fs/fat/fat.c index c89ed78..b036ead 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;