| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 | #ifndef _LINUX_SYSV_FS_H | 
 | 2 | #define _LINUX_SYSV_FS_H | 
 | 3 |  | 
| Robert P. J. Day | dddfbaf | 2008-04-29 01:03:26 -0700 | [diff] [blame] | 4 | #define __packed2__	__attribute__((packed, aligned(2))) | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 5 |  | 
 | 6 |  | 
 | 7 | #ifndef __KERNEL__ | 
 | 8 | typedef u16 __fs16; | 
 | 9 | typedef u32 __fs16; | 
 | 10 | #endif | 
 | 11 |  | 
 | 12 | /* inode numbers are 16 bit */ | 
 | 13 | typedef __fs16 sysv_ino_t; | 
 | 14 |  | 
 | 15 | /* Block numbers are 24 bit, sometimes stored in 32 bit. | 
 | 16 |    On Coherent FS, they are always stored in PDP-11 manner: the least | 
 | 17 |    significant 16 bits come last. */ | 
 | 18 | typedef __fs32 sysv_zone_t; | 
 | 19 |  | 
 | 20 | /* 0 is non-existent */ | 
 | 21 | #define SYSV_BADBL_INO	1	/* inode of bad blocks file */ | 
 | 22 | #define SYSV_ROOT_INO	2	/* inode of root directory */ | 
 | 23 |  | 
 | 24 |  | 
 | 25 | /* Xenix super-block data on disk */ | 
 | 26 | #define XENIX_NICINOD	100	/* number of inode cache entries */ | 
 | 27 | #define XENIX_NICFREE	100	/* number of free block list chunk entries */ | 
 | 28 | struct xenix_super_block { | 
 | 29 | 	__fs16		s_isize; /* index of first data zone */ | 
 | 30 | 	__fs32		s_fsize __packed2__; /* total number of zones of this fs */ | 
 | 31 | 	/* the start of the free block list: */ | 
 | 32 | 	__fs16		s_nfree;	/* number of free blocks in s_free, <= XENIX_NICFREE */ | 
 | 33 | 	sysv_zone_t	s_free[XENIX_NICFREE]; /* first free block list chunk */ | 
 | 34 | 	/* the cache of free inodes: */ | 
 | 35 | 	__fs16		s_ninode; /* number of free inodes in s_inode, <= XENIX_NICINOD */ | 
 | 36 | 	sysv_ino_t	s_inode[XENIX_NICINOD]; /* some free inodes */ | 
 | 37 | 	/* locks, not used by Linux: */ | 
 | 38 | 	char		s_flock;	/* lock during free block list manipulation */ | 
 | 39 | 	char		s_ilock;	/* lock during inode cache manipulation */ | 
 | 40 | 	char		s_fmod;		/* super-block modified flag */ | 
 | 41 | 	char		s_ronly;	/* flag whether fs is mounted read-only */ | 
 | 42 | 	__fs32		s_time __packed2__; /* time of last super block update */ | 
 | 43 | 	__fs32		s_tfree __packed2__; /* total number of free zones */ | 
 | 44 | 	__fs16		s_tinode;	/* total number of free inodes */ | 
 | 45 | 	__fs16		s_dinfo[4];	/* device information ?? */ | 
 | 46 | 	char		s_fname[6];	/* file system volume name */ | 
 | 47 | 	char		s_fpack[6];	/* file system pack name */ | 
 | 48 | 	char		s_clean;	/* set to 0x46 when filesystem is properly unmounted */ | 
 | 49 | 	char		s_fill[371]; | 
 | 50 | 	s32		s_magic;	/* version of file system */ | 
 | 51 | 	__fs32		s_type;		/* type of file system: 1 for 512 byte blocks | 
 | 52 | 								2 for 1024 byte blocks | 
 | 53 | 								3 for 2048 byte blocks */ | 
 | 54 | 								 | 
 | 55 | }; | 
 | 56 |  | 
 | 57 | /* | 
 | 58 |  * SystemV FS comes in two variants: | 
 | 59 |  * sysv2: System V Release 2 (e.g. Microport), structure elements aligned(2). | 
 | 60 |  * sysv4: System V Release 4 (e.g. Consensys), structure elements aligned(4). | 
 | 61 |  */ | 
 | 62 | #define SYSV_NICINOD	100	/* number of inode cache entries */ | 
 | 63 | #define SYSV_NICFREE	50	/* number of free block list chunk entries */ | 
 | 64 |  | 
 | 65 | /* SystemV4 super-block data on disk */ | 
 | 66 | struct sysv4_super_block { | 
 | 67 | 	__fs16	s_isize;	/* index of first data zone */ | 
 | 68 | 	u16	s_pad0; | 
 | 69 | 	__fs32	s_fsize;	/* total number of zones of this fs */ | 
 | 70 | 	/* the start of the free block list: */ | 
 | 71 | 	__fs16	s_nfree;	/* number of free blocks in s_free, <= SYSV_NICFREE */ | 
 | 72 | 	u16	s_pad1; | 
 | 73 | 	sysv_zone_t	s_free[SYSV_NICFREE]; /* first free block list chunk */ | 
 | 74 | 	/* the cache of free inodes: */ | 
 | 75 | 	__fs16	s_ninode;	/* number of free inodes in s_inode, <= SYSV_NICINOD */ | 
 | 76 | 	u16	s_pad2; | 
 | 77 | 	sysv_ino_t     s_inode[SYSV_NICINOD]; /* some free inodes */ | 
 | 78 | 	/* locks, not used by Linux: */ | 
 | 79 | 	char	s_flock;	/* lock during free block list manipulation */ | 
 | 80 | 	char	s_ilock;	/* lock during inode cache manipulation */ | 
 | 81 | 	char	s_fmod;		/* super-block modified flag */ | 
 | 82 | 	char	s_ronly;	/* flag whether fs is mounted read-only */ | 
 | 83 | 	__fs32	s_time;		/* time of last super block update */ | 
 | 84 | 	__fs16	s_dinfo[4];	/* device information ?? */ | 
 | 85 | 	__fs32	s_tfree;	/* total number of free zones */ | 
 | 86 | 	__fs16	s_tinode;	/* total number of free inodes */ | 
 | 87 | 	u16	s_pad3; | 
 | 88 | 	char	s_fname[6];	/* file system volume name */ | 
 | 89 | 	char	s_fpack[6];	/* file system pack name */ | 
 | 90 | 	s32	s_fill[12]; | 
 | 91 | 	__fs32	s_state;	/* file system state: 0x7c269d38-s_time means clean */ | 
 | 92 | 	s32	s_magic;	/* version of file system */ | 
 | 93 | 	__fs32	s_type;		/* type of file system: 1 for 512 byte blocks | 
 | 94 | 								2 for 1024 byte blocks */ | 
 | 95 | }; | 
 | 96 |  | 
 | 97 | /* SystemV2 super-block data on disk */ | 
 | 98 | struct sysv2_super_block { | 
 | 99 | 	__fs16	s_isize; 		/* index of first data zone */ | 
 | 100 | 	__fs32	s_fsize __packed2__;	/* total number of zones of this fs */ | 
 | 101 | 	/* the start of the free block list: */ | 
 | 102 | 	__fs16	s_nfree;		/* number of free blocks in s_free, <= SYSV_NICFREE */ | 
 | 103 | 	sysv_zone_t s_free[SYSV_NICFREE];	/* first free block list chunk */ | 
 | 104 | 	/* the cache of free inodes: */ | 
 | 105 | 	__fs16	s_ninode;		/* number of free inodes in s_inode, <= SYSV_NICINOD */ | 
 | 106 | 	sysv_ino_t     s_inode[SYSV_NICINOD]; /* some free inodes */ | 
 | 107 | 	/* locks, not used by Linux: */ | 
 | 108 | 	char	s_flock;		/* lock during free block list manipulation */ | 
 | 109 | 	char	s_ilock;		/* lock during inode cache manipulation */ | 
 | 110 | 	char	s_fmod;			/* super-block modified flag */ | 
 | 111 | 	char	s_ronly;		/* flag whether fs is mounted read-only */ | 
 | 112 | 	__fs32	s_time __packed2__;	/* time of last super block update */ | 
 | 113 | 	__fs16	s_dinfo[4];		/* device information ?? */ | 
 | 114 | 	__fs32	s_tfree __packed2__;	/* total number of free zones */ | 
 | 115 | 	__fs16	s_tinode;		/* total number of free inodes */ | 
 | 116 | 	char	s_fname[6];		/* file system volume name */ | 
 | 117 | 	char	s_fpack[6];		/* file system pack name */ | 
 | 118 | 	s32	s_fill[14]; | 
 | 119 | 	__fs32	s_state;		/* file system state: 0xcb096f43 means clean */ | 
 | 120 | 	s32	s_magic;		/* version of file system */ | 
 | 121 | 	__fs32	s_type;			/* type of file system: 1 for 512 byte blocks | 
 | 122 | 								2 for 1024 byte blocks */ | 
 | 123 | }; | 
 | 124 |  | 
 | 125 | /* V7 super-block data on disk */ | 
 | 126 | #define V7_NICINOD     100     /* number of inode cache entries */ | 
 | 127 | #define V7_NICFREE     50      /* number of free block list chunk entries */ | 
 | 128 | struct v7_super_block { | 
 | 129 | 	__fs16 s_isize;        /* index of first data zone */ | 
 | 130 | 	__fs32 s_fsize __packed2__; /* total number of zones of this fs */ | 
 | 131 | 	/* the start of the free block list: */ | 
 | 132 | 	__fs16 s_nfree;        /* number of free blocks in s_free, <= V7_NICFREE */ | 
 | 133 | 	sysv_zone_t s_free[V7_NICFREE]; /* first free block list chunk */ | 
 | 134 | 	/* the cache of free inodes: */ | 
 | 135 | 	__fs16 s_ninode;       /* number of free inodes in s_inode, <= V7_NICINOD */ | 
 | 136 | 	sysv_ino_t      s_inode[V7_NICINOD]; /* some free inodes */ | 
 | 137 | 	/* locks, not used by Linux or V7: */ | 
 | 138 | 	char    s_flock;        /* lock during free block list manipulation */ | 
 | 139 | 	char    s_ilock;        /* lock during inode cache manipulation */ | 
 | 140 | 	char    s_fmod;         /* super-block modified flag */ | 
 | 141 | 	char    s_ronly;        /* flag whether fs is mounted read-only */ | 
 | 142 | 	__fs32  s_time __packed2__; /* time of last super block update */ | 
 | 143 | 	/* the following fields are not maintained by V7: */ | 
 | 144 | 	__fs32  s_tfree __packed2__; /* total number of free zones */ | 
 | 145 | 	__fs16  s_tinode;       /* total number of free inodes */ | 
 | 146 | 	__fs16  s_m;            /* interleave factor */ | 
 | 147 | 	__fs16  s_n;            /* interleave factor */ | 
 | 148 | 	char    s_fname[6];     /* file system name */ | 
 | 149 | 	char    s_fpack[6];     /* file system pack name */ | 
 | 150 | }; | 
 | 151 |  | 
 | 152 | /* Coherent super-block data on disk */ | 
 | 153 | #define COH_NICINOD	100	/* number of inode cache entries */ | 
 | 154 | #define COH_NICFREE	64	/* number of free block list chunk entries */ | 
 | 155 | struct coh_super_block { | 
 | 156 | 	__fs16		s_isize;	/* index of first data zone */ | 
 | 157 | 	__fs32		s_fsize __packed2__; /* total number of zones of this fs */ | 
 | 158 | 	/* the start of the free block list: */ | 
 | 159 | 	__fs16 s_nfree;	/* number of free blocks in s_free, <= COH_NICFREE */ | 
 | 160 | 	sysv_zone_t	s_free[COH_NICFREE] __packed2__; /* first free block list chunk */ | 
 | 161 | 	/* the cache of free inodes: */ | 
 | 162 | 	__fs16		s_ninode;	/* number of free inodes in s_inode, <= COH_NICINOD */ | 
 | 163 | 	sysv_ino_t	s_inode[COH_NICINOD]; /* some free inodes */ | 
 | 164 | 	/* locks, not used by Linux: */ | 
 | 165 | 	char		s_flock;	/* lock during free block list manipulation */ | 
 | 166 | 	char		s_ilock;	/* lock during inode cache manipulation */ | 
 | 167 | 	char		s_fmod;		/* super-block modified flag */ | 
 | 168 | 	char		s_ronly;	/* flag whether fs is mounted read-only */ | 
 | 169 | 	__fs32		s_time __packed2__; /* time of last super block update */ | 
 | 170 | 	__fs32		s_tfree __packed2__; /* total number of free zones */ | 
 | 171 | 	__fs16		s_tinode;	/* total number of free inodes */ | 
 | 172 | 	__fs16		s_interleave_m;	/* interleave factor */ | 
 | 173 | 	__fs16		s_interleave_n; | 
 | 174 | 	char		s_fname[6];	/* file system volume name */ | 
 | 175 | 	char		s_fpack[6];	/* file system pack name */ | 
 | 176 | 	__fs32		s_unique;	/* zero, not used */ | 
 | 177 | }; | 
 | 178 |  | 
 | 179 | /* SystemV/Coherent inode data on disk */ | 
 | 180 | struct sysv_inode { | 
 | 181 | 	__fs16 i_mode; | 
 | 182 | 	__fs16 i_nlink; | 
 | 183 | 	__fs16 i_uid; | 
 | 184 | 	__fs16 i_gid; | 
 | 185 | 	__fs32 i_size; | 
 | 186 | 	u8  i_data[3*(10+1+1+1)]; | 
 | 187 | 	u8  i_gen; | 
 | 188 | 	__fs32 i_atime;	/* time of last access */ | 
 | 189 | 	__fs32 i_mtime;	/* time of last modification */ | 
 | 190 | 	__fs32 i_ctime;	/* time of creation */ | 
 | 191 | }; | 
 | 192 |  | 
 | 193 | /* SystemV/Coherent directory entry on disk */ | 
 | 194 | #define SYSV_NAMELEN	14	/* max size of name in struct sysv_dir_entry */ | 
 | 195 | struct sysv_dir_entry { | 
 | 196 | 	sysv_ino_t inode; | 
 | 197 | 	char name[SYSV_NAMELEN]; /* up to 14 characters, the rest are zeroes */ | 
 | 198 | }; | 
 | 199 |  | 
 | 200 | #define SYSV_DIRSIZE	sizeof(struct sysv_dir_entry)	/* size of every directory entry */ | 
 | 201 |  | 
 | 202 | #endif /* _LINUX_SYSV_FS_H */ |