Commit 6b46419b0462ae565880f02e9cd0baf9b25ea71f
Committed by
Linus Torvalds
1 parent
899bed05e9
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>
Showing 2 changed files with 32 additions and 12 deletions Side-by-side Diff
fs/fat/inode.c
... | ... | @@ -1298,17 +1298,17 @@ |
1298 | 1298 | sbi->prev_free = FAT_START_ENT; |
1299 | 1299 | sb->s_maxbytes = 0xffffffff; |
1300 | 1300 | |
1301 | - if (!sbi->fat_length && b->fat32_length) { | |
1301 | + if (!sbi->fat_length && b->fat32.length) { | |
1302 | 1302 | struct fat_boot_fsinfo *fsinfo; |
1303 | 1303 | struct buffer_head *fsinfo_bh; |
1304 | 1304 | |
1305 | 1305 | /* Must be FAT32 */ |
1306 | 1306 | sbi->fat_bits = 32; |
1307 | - sbi->fat_length = le32_to_cpu(b->fat32_length); | |
1308 | - sbi->root_cluster = le32_to_cpu(b->root_cluster); | |
1307 | + sbi->fat_length = le32_to_cpu(b->fat32.length); | |
1308 | + sbi->root_cluster = le32_to_cpu(b->fat32.root_cluster); | |
1309 | 1309 | |
1310 | 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 | 1312 | if (sbi->fsinfo_sector == 0) |
1313 | 1313 | sbi->fsinfo_sector = 1; |
1314 | 1314 |
include/uapi/linux/msdos_fs.h
... | ... | @@ -120,14 +120,34 @@ |
120 | 120 | __le32 hidden; /* hidden sectors (unused) */ |
121 | 121 | __le32 total_sect; /* number of sectors (if sectors == 0) */ |
122 | 122 | |
123 | - /* The following fields are only used by FAT32 */ | |
124 | - __le32 fat32_length; /* sectors/FAT */ | |
125 | - __le16 flags; /* bit 8: fat mirroring, low 4: active fat */ | |
126 | - __u8 version[2]; /* major, minor filesystem version */ | |
127 | - __le32 root_cluster; /* first cluster in root directory */ | |
128 | - __le16 info_sector; /* filesystem info sector */ | |
129 | - __le16 backup_boot; /* backup boot sector */ | |
130 | - __le16 reserved2[6]; /* Unused */ | |
123 | + union { | |
124 | + struct { | |
125 | + /* Extended BPB Fields for FAT16 */ | |
126 | + __u8 drive_number; /* Physical drive number */ | |
127 | + __u8 state; /* undocumented, but used | |
128 | + for mount state. */ | |
129 | + /* other fiealds are not added here */ | |
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 | |
133 | 153 | struct fat_boot_fsinfo { |