fat: add extended fileds to struct fat_boot_sector
authorOleksij Rempel <bug-track@fisher-privat.net>
Thu, 28 Feb 2013 01:03:07 +0000 (17:03 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 28 Feb 2013 03:10:10 +0000 (19:10 -0800)
Later we will need "state" field to check if volume was cleanly unmounted.

Signed-off-by: Oleksij Rempel <bug-track@fisher-privat.net>
Signed-off-by: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
fs/fat/inode.c
include/uapi/linux/msdos_fs.h

index f8f4916..4b4d4ef 100644 (file)
@@ -1298,17 +1298,17 @@ int fat_fill_super(struct super_block *sb, void *data, int silent, int isvfat,
        sbi->prev_free = FAT_START_ENT;
        sb->s_maxbytes = 0xffffffff;
 
-       if (!sbi->fat_length && b->fat32_length) {
+       if (!sbi->fat_length && b->fat32.length) {
                struct fat_boot_fsinfo *fsinfo;
                struct buffer_head *fsinfo_bh;
 
                /* Must be FAT32 */
                sbi->fat_bits = 32;
-               sbi->fat_length = le32_to_cpu(b->fat32_length);
-               sbi->root_cluster = le32_to_cpu(b->root_cluster);
+               sbi->fat_length = le32_to_cpu(b->fat32.length);
+               sbi->root_cluster = le32_to_cpu(b->fat32.root_cluster);
 
                /* MC - if info_sector is 0, don't multiply by 0 */
-               sbi->fsinfo_sector = le16_to_cpu(b->info_sector);
+               sbi->fsinfo_sector = le16_to_cpu(b->fat32.info_sector);
                if (sbi->fsinfo_sector == 0)
                        sbi->fsinfo_sector = 1;
 
index 996719f..b9f1245 100644 (file)
@@ -120,14 +120,34 @@ struct fat_boot_sector {
        __le32  hidden;         /* hidden sectors (unused) */
        __le32  total_sect;     /* number of sectors (if sectors == 0) */
 
-       /* The following fields are only used by FAT32 */
-       __le32  fat32_length;   /* sectors/FAT */
-       __le16  flags;          /* bit 8: fat mirroring, low 4: active fat */
-       __u8    version[2];     /* major, minor filesystem version */
-       __le32  root_cluster;   /* first cluster in root directory */
-       __le16  info_sector;    /* filesystem info sector */
-       __le16  backup_boot;    /* backup boot sector */
-       __le16  reserved2[6];   /* Unused */
+       union {
+               struct {
+                       /*  Extended BPB Fields for FAT16 */
+                       __u8    drive_number;   /* Physical drive number */
+                       __u8    state;          /* undocumented, but used
+                                                  for mount state. */
+                       /* other fiealds are not added here */
+               } fat16;
+
+               struct {
+                       /* only used by FAT32 */
+                       __le32  length;         /* sectors/FAT */
+                       __le16  flags;          /* bit 8: fat mirroring,
+                                                  low 4: active fat */
+                       __u8    version[2];     /* major, minor filesystem
+                                                  version */
+                       __le32  root_cluster;   /* first cluster in
+                                                  root directory */
+                       __le16  info_sector;    /* filesystem info sector */
+                       __le16  backup_boot;    /* backup boot sector */
+                       __le16  reserved2[6];   /* Unused */
+                       /* Extended BPB Fields for FAT32 */
+                       __u8    drive_number;   /* Physical drive number */
+                       __u8    state;          /* undocumented, but used
+                                                  for mount state. */
+                       /* other fiealds are not added here */
+               } fat32;
+       };
 };
 
 struct fat_boot_fsinfo {