master
  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 */
 35struct 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 */
 51struct 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 */
 66struct 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 */
 82struct 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
 98struct minix_dir_entry {
 99	__u16 inode;
100	char name[];
101};
102
103struct minix3_dir_entry {
104	__u32 inode;
105	char name[];
106};
107#endif