Skip to content

Commit

Permalink
fat: add extended fileds to struct fat_boot_sector
Browse files Browse the repository at this point in the history
Later we will need "state" field to check if volume was cleanly unmounted.

Signed-off-by: Oleksij Rempel <[email protected]>
Signed-off-by: OGAWA Hirofumi <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
  • Loading branch information
olerem authored and torvalds committed Feb 28, 2013
1 parent 899bed0 commit 6b46419
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 12 deletions.
8 changes: 4 additions & 4 deletions fs/fat/inode.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down
36 changes: 28 additions & 8 deletions include/uapi/linux/msdos_fs.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down

0 comments on commit 6b46419

Please sign in to comment.