| 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 */ |