aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOleksij Rempel <bug-track@fisher-privat.net>2013-02-27 20:03:07 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2013-02-27 22:10:10 -0500
commit6b46419b0462ae565880f02e9cd0baf9b25ea71f (patch)
treeb61bdf965ec8457a35a6174cbeff09897debdc90
parent899bed05e9f6bbb21776f9ebd88f5631987f987a (diff)
fat: add extended fileds to struct fat_boot_sector
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>
-rw-r--r--fs/fat/inode.c8
-rw-r--r--include/uapi/linux/msdos_fs.h36
2 files changed, 32 insertions, 12 deletions
diff --git a/fs/fat/inode.c b/fs/fat/inode.c
index f8f491677a4a..4b4d4ef910f3 100644
--- a/fs/fat/inode.c
+++ b/fs/fat/inode.c
@@ -1298,17 +1298,17 @@ int fat_fill_super(struct super_block *sb, void *data, int silent, int isvfat,
1298 sbi->prev_free = FAT_START_ENT; 1298 sbi->prev_free = FAT_START_ENT;
1299 sb->s_maxbytes = 0xffffffff; 1299 sb->s_maxbytes = 0xffffffff;
1300 1300
1301 if (!sbi->fat_length && b->fat32_length) { 1301 if (!sbi->fat_length && b->fat32.length) {
1302 struct fat_boot_fsinfo *fsinfo; 1302 struct fat_boot_fsinfo *fsinfo;
1303 struct buffer_head *fsinfo_bh; 1303 struct buffer_head *fsinfo_bh;
1304 1304
1305 /* Must be FAT32 */ 1305 /* Must be FAT32 */
1306 sbi->fat_bits = 32; 1306 sbi->fat_bits = 32;
1307 sbi->fat_length = le32_to_cpu(b->fat32_length); 1307 sbi->fat_length = le32_to_cpu(b->fat32.length);
1308 sbi->root_cluster = le32_to_cpu(b->root_cluster); 1308 sbi->root_cluster = le32_to_cpu(b->fat32.root_cluster);
1309 1309
1310 /* MC - if info_sector is 0, don't multiply by 0 */ 1310 /* MC - if info_sector is 0, don't multiply by 0 */
1311 sbi->fsinfo_sector = le16_to_cpu(b->info_sector); 1311 sbi->fsinfo_sector = le16_to_cpu(b->fat32.info_sector);
1312 if (sbi->fsinfo_sector == 0) 1312 if (sbi->fsinfo_sector == 0)
1313 sbi->fsinfo_sector = 1; 1313 sbi->fsinfo_sector = 1;
1314 1314
diff --git a/include/uapi/linux/msdos_fs.h b/include/uapi/linux/msdos_fs.h
index 996719f82e28..b9f12450efe8 100644
--- a/include/uapi/linux/msdos_fs.h
+++ b/include/uapi/linux/msdos_fs.h
@@ -120,14 +120,34 @@ struct fat_boot_sector {
120 __le32 hidden; /* hidden sectors (unused) */ 120 __le32 hidden; /* hidden sectors (unused) */
121 __le32 total_sect; /* number of sectors (if sectors == 0) */ 121 __le32 total_sect; /* number of sectors (if sectors == 0) */
122 122
123 /* The following fields are only used by FAT32 */ 123 union {
124 __le32 fat32_length; /* sectors/FAT */ 124 struct {
125 __le16 flags; /* bit 8: fat mirroring, low 4: active fat */ 125 /* Extended BPB Fields for FAT16 */
126 __u8 version[2]; /* major, minor filesystem version */ 126 __u8 drive_number; /* Physical drive number */
127 __le32 root_cluster; /* first cluster in root directory */ 127 __u8 state; /* undocumented, but used
128 __le16 info_sector; /* filesystem info sector */ 128 for mount state. */
129 __le16 backup_boot; /* backup boot sector */ 129 /* other fiealds are not added here */
130 __le16 reserved2[6]; /* Unused */ 130 } fat16;
131
132 struct {
133 /* only used by FAT32 */
134 __le32 length; /* sectors/FAT */
135 __le16 flags; /* bit 8: fat mirroring,
136 low 4: active fat */
137 __u8 version[2]; /* major, minor filesystem
138 version */
139 __le32 root_cluster; /* first cluster in
140 root directory */
141 __le16 info_sector; /* filesystem info sector */
142 __le16 backup_boot; /* backup boot sector */
143 __le16 reserved2[6]; /* Unused */
144 /* Extended BPB Fields for FAT32 */
145 __u8 drive_number; /* Physical drive number */
146 __u8 state; /* undocumented, but used
147 for mount state. */
148 /* other fiealds are not added here */
149 } fat32;
150 };
131}; 151};
132 152
133struct fat_boot_fsinfo { 153struct fat_boot_fsinfo {