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[];
101  };
102  
103  struct minix3_dir_entry {
104  	__u32 inode;
105  	char name[];
106  };
107  #endif
108