diff options
| author | Oleksij Rempel <bug-track@fisher-privat.net> | 2013-02-27 20:03:07 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-02-27 22:10:10 -0500 |
| commit | 6b46419b0462ae565880f02e9cd0baf9b25ea71f (patch) | |
| tree | b61bdf965ec8457a35a6174cbeff09897debdc90 | |
| parent | 899bed05e9f6bbb21776f9ebd88f5631987f987a (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.c | 8 | ||||
| -rw-r--r-- | include/uapi/linux/msdos_fs.h | 36 |
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 | ||
| 133 | struct fat_boot_fsinfo { | 153 | struct fat_boot_fsinfo { |
