Home | History | Annotate | Download | only in linux
      1 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
      2 #ifndef _LINUX_MINIX_FS_H
      3 #define _LINUX_MINIX_FS_H
      4 
      5 #include <linux/types.h>
      6 #include <linux/magic.h>
      7 
      8 /*
      9  * The minix filesystem constants/structures
     10  */
     11 
     12 /*
     13  * Thanks to Kees J Bot for sending me the definitions of the new
     14  * minix filesystem (aka V2) with bigger inodes and 32-bit block
     15  * pointers.
     16  */
     17 
     18 #define MINIX_ROOT_INO 1
     19 
     20 /* Not the same as the bogus LINK_MAX in <linux/limits.h>. Oh well. */
     21 #define MINIX_LINK_MAX	250
     22 #define MINIX2_LINK_MAX	65530
     23 
     24 #define MINIX_I_MAP_SLOTS	8
     25 #define MINIX_Z_MAP_SLOTS	64
     26 #define MINIX_VALID_FS		0x0001		/* Clean fs. */
     27 #define MINIX_ERROR_FS		0x0002		/* fs has errors. */
     28 
     29 #define MINIX_INODES_PER_BLOCK ((BLOCK_SIZE)/(sizeof (struct minix_inode)))
     30 
     31 /*
     32  * This is the original minix inode layout on disk.
     33  * Note the 8-bit gid and atime and ctime.
     34  */
     35 struct minix_inode {
     36 	__u16 i_mode;
     37 	__u16 i_uid;
     38 	__u32 i_size;
     39 	__u32 i_time;
     40 	__u8  i_gid;
     41 	__u8  i_nlinks;
     42 	__u16 i_zone[9];
     43 };
     44 
     45 /*
     46  * The new minix inode has all the time entries, as well as
     47  * long block numbers and a third indirect block (7+1+1+1
     48  * instead of 7+1+1). Also, some previously 8-bit values are
     49  * now 16-bit. The inode is now 64 bytes instead of 32.
     50  */
     51 struct minix2_inode {
     52 	__u16 i_mode;
     53 	__u16 i_nlinks;
     54 	__u16 i_uid;
     55 	__u16 i_gid;
     56 	__u32 i_size;
     57 	__u32 i_atime;
     58 	__u32 i_mtime;
     59 	__u32 i_ctime;
     60 	__u32 i_zone[10];
     61 };
     62 
     63 /*
     64  * minix super-block data on disk
     65  */
     66 struct minix_super_block {
     67 	__u16 s_ninodes;
     68 	__u16 s_nzones;
     69 	__u16 s_imap_blocks;
     70 	__u16 s_zmap_blocks;
     71 	__u16 s_firstdatazone;
     72 	__u16 s_log_zone_size;
     73 	__u32 s_max_size;
     74 	__u16 s_magic;
     75 	__u16 s_state;
     76 	__u32 s_zones;
     77 };
     78 
     79 /*
     80  * V3 minix super-block data on disk
     81  */
     82 struct minix3_super_block {
     83 	__u32 s_ninodes;
     84 	__u16 s_pad0;
     85 	__u16 s_imap_blocks;
     86 	__u16 s_zmap_blocks;
     87 	__u16 s_firstdatazone;
     88 	__u16 s_log_zone_size;
     89 	__u16 s_pad1;
     90 	__u32 s_max_size;
     91 	__u32 s_zones;
     92 	__u16 s_magic;
     93 	__u16 s_pad2;
     94 	__u16 s_blocksize;
     95 	__u8  s_disk_version;
     96 };
     97 
     98 struct minix_dir_entry {
     99 	__u16 inode;
    100 	char name[0];
    101 };
    102 
    103 struct minix3_dir_entry {
    104 	__u32 inode;
    105 	char name[0];
    106 };
    107 #endif
    108