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 { |