Blame


1 0c98da8b 2005-07-13 devnull /*
2 0c98da8b 2005-07-13 devnull * An FFS file system is a sequence of cylinder groups.
3 0c98da8b 2005-07-13 devnull *
4 0c98da8b 2005-07-13 devnull * Each cylinder group is laid out as follows:
5 0c98da8b 2005-07-13 devnull *
6 0c98da8b 2005-07-13 devnull * fs superblock (Fsblk)
7 0c98da8b 2005-07-13 devnull * cylinder group block (Cgblk)
8 0c98da8b 2005-07-13 devnull * inodes
9 0c98da8b 2005-07-13 devnull * data
10 0c98da8b 2005-07-13 devnull *
11 0c98da8b 2005-07-13 devnull * The location of the fs superblock in the first cylinder
12 0c98da8b 2005-07-13 devnull * group is known. The rest of the info about cylinder group
13 0c98da8b 2005-07-13 devnull * layout can be derived from the super block.
14 0c98da8b 2005-07-13 devnull */
15 0c98da8b 2005-07-13 devnull
16 0c98da8b 2005-07-13 devnull #define daddr_t u32int
17 0c98da8b 2005-07-13 devnull #define time_t u32int
18 0c98da8b 2005-07-13 devnull
19 0c98da8b 2005-07-13 devnull typedef struct Cgblk Cgblk;
20 0c98da8b 2005-07-13 devnull typedef struct Cylgrp Cylgrp;
21 0c98da8b 2005-07-13 devnull typedef struct Cylsum Cylsum;
22 e060bc52 2005-08-11 devnull typedef struct Cylsumtotal Cylsumtotal;
23 0c98da8b 2005-07-13 devnull typedef struct Ffs Ffs;
24 0c98da8b 2005-07-13 devnull typedef struct Fsblk Fsblk;
25 e060bc52 2005-08-11 devnull typedef struct Inode1 Inode1;
26 0c98da8b 2005-07-13 devnull typedef struct Inode Inode;
27 0c98da8b 2005-07-13 devnull typedef struct Dirent Dirent;
28 0c98da8b 2005-07-13 devnull
29 0c98da8b 2005-07-13 devnull enum
30 0c98da8b 2005-07-13 devnull {
31 0c98da8b 2005-07-13 devnull BYTESPERSEC = 512,
32 0c98da8b 2005-07-13 devnull
33 0c98da8b 2005-07-13 devnull /* constants for Fsblk */
34 0c98da8b 2005-07-13 devnull FSMAXMNTLEN = 512,
35 e060bc52 2005-08-11 devnull FSMAXMNTLEN2 = 468,
36 e060bc52 2005-08-11 devnull FSMAXVOLLEN = 32, /* UFS2 */
37 e060bc52 2005-08-11 devnull FSNOCSPTRSLEN = 128-12,
38 e060bc52 2005-08-11 devnull FSNOCSPTRSLEN2 = 128-16, /* UFS2 */
39 0c98da8b 2005-07-13 devnull FSMAXSNAP = 20,
40 0c98da8b 2005-07-13 devnull FSMAGIC = 0x011954,
41 e060bc52 2005-08-11 devnull FSMAGIC2 = 0x19540119,
42 0c98da8b 2005-07-13 devnull FSCHECKSUM = 0x7c269d38,
43 fa325e9b 2020-01-10 cross
44 0c98da8b 2005-07-13 devnull /* Fsblk.inodefmt */
45 0c98da8b 2005-07-13 devnull FS42INODEFMT = -1,
46 0c98da8b 2005-07-13 devnull FS44INODEFMT = 2,
47 0c98da8b 2005-07-13 devnull
48 0c98da8b 2005-07-13 devnull /* offset and size of first boot block */
49 0c98da8b 2005-07-13 devnull BBOFF = 0,
50 0c98da8b 2005-07-13 devnull BBSIZE = 8192,
51 0c98da8b 2005-07-13 devnull
52 0c98da8b 2005-07-13 devnull /* offset and size of first super block */
53 0c98da8b 2005-07-13 devnull SBOFF = BBOFF+BBSIZE,
54 e060bc52 2005-08-11 devnull SBOFF2 = BBOFF+65536, /* UFS2 */
55 e060bc52 2005-08-11 devnull SBOFFPIGGY = BBOFF+262144, /* UFS2 */
56 0c98da8b 2005-07-13 devnull SBSIZE = 8192,
57 0c98da8b 2005-07-13 devnull
58 0c98da8b 2005-07-13 devnull /* minimum block size */
59 0c98da8b 2005-07-13 devnull MINBSIZE = 4096,
60 0c98da8b 2005-07-13 devnull
61 0c98da8b 2005-07-13 devnull /* maximum fragments per block */
62 0c98da8b 2005-07-13 devnull MAXFRAG = 8,
63 0c98da8b 2005-07-13 devnull
64 0c98da8b 2005-07-13 devnull /* constants for Cgblk */
65 0c98da8b 2005-07-13 devnull CGMAGIC = 0x090255,
66 0c98da8b 2005-07-13 devnull
67 0c98da8b 2005-07-13 devnull /* inode-related */
68 0c98da8b 2005-07-13 devnull ROOTINODE = 2,
69 0c98da8b 2005-07-13 devnull WHITEOUT = 1,
70 0c98da8b 2005-07-13 devnull
71 e060bc52 2005-08-11 devnull NXADDR = 2, /* UFS2 */
72 0c98da8b 2005-07-13 devnull NDADDR = 12,
73 0c98da8b 2005-07-13 devnull NIADDR = 3,
74 0c98da8b 2005-07-13 devnull
75 079f5e94 2020-05-19 rsc /* some systems have these defined */
76 079f5e94 2020-05-19 rsc #undef IEXEC
77 079f5e94 2020-05-19 rsc #undef IWRITE
78 079f5e94 2020-05-19 rsc #undef IREAD
79 079f5e94 2020-05-19 rsc #undef ISVTX
80 079f5e94 2020-05-19 rsc #undef ISGID
81 079f5e94 2020-05-19 rsc #undef ISUID
82 079f5e94 2020-05-19 rsc #undef IFMT
83 079f5e94 2020-05-19 rsc #undef IFIFO
84 079f5e94 2020-05-19 rsc #undef IFCHR
85 079f5e94 2020-05-19 rsc #undef IFDIR
86 079f5e94 2020-05-19 rsc #undef IFBLK
87 079f5e94 2020-05-19 rsc #undef IFREG
88 079f5e94 2020-05-19 rsc #undef IFLNK
89 079f5e94 2020-05-19 rsc #undef IFSOCK
90 079f5e94 2020-05-19 rsc #undef IFWHT
91 079f5e94 2020-05-19 rsc
92 079f5e94 2020-05-19 rsc #define IEXEC FFS_IEXEC
93 079f5e94 2020-05-19 rsc #define IWRITE FFS_IWRITE
94 079f5e94 2020-05-19 rsc #define IREAD FFS_IREAD
95 079f5e94 2020-05-19 rsc #define ISVTX FFS_ISVTX
96 079f5e94 2020-05-19 rsc #define ISGID FFS_ISGID
97 079f5e94 2020-05-19 rsc #define ISUID FFS_ISUID
98 079f5e94 2020-05-19 rsc #define IFMT FFS_IFMT
99 079f5e94 2020-05-19 rsc #define IFIFO FFS_IFIFO
100 079f5e94 2020-05-19 rsc #define IFCHR FFS_IFCHR
101 079f5e94 2020-05-19 rsc #define IFDIR FFS_IFDIR
102 079f5e94 2020-05-19 rsc #define IFBLK FFS_IFBLK
103 079f5e94 2020-05-19 rsc #define IFREG FFS_IFREG
104 079f5e94 2020-05-19 rsc #define IFLNK FFS_IFLNK
105 079f5e94 2020-05-19 rsc #define IFSOCK FFS_IFSOCK
106 079f5e94 2020-05-19 rsc #define IFWHT FFS_IFWHT
107 079f5e94 2020-05-19 rsc
108 0c98da8b 2005-07-13 devnull /* permissions in Inode.mode */
109 0c98da8b 2005-07-13 devnull IEXEC = 00100,
110 0c98da8b 2005-07-13 devnull IWRITE = 0200,
111 0c98da8b 2005-07-13 devnull IREAD = 0400,
112 0c98da8b 2005-07-13 devnull ISVTX = 01000,
113 0c98da8b 2005-07-13 devnull ISGID = 02000,
114 0c98da8b 2005-07-13 devnull ISUID = 04000,
115 0c98da8b 2005-07-13 devnull
116 0c98da8b 2005-07-13 devnull /* type in Inode.mode */
117 0c98da8b 2005-07-13 devnull IFMT = 0170000,
118 0c98da8b 2005-07-13 devnull IFIFO = 0010000,
119 0c98da8b 2005-07-13 devnull IFCHR = 0020000,
120 0c98da8b 2005-07-13 devnull IFDIR = 0040000,
121 0c98da8b 2005-07-13 devnull IFBLK = 0060000,
122 0c98da8b 2005-07-13 devnull IFREG = 0100000,
123 0c98da8b 2005-07-13 devnull IFLNK = 0120000,
124 0c98da8b 2005-07-13 devnull IFSOCK = 0140000,
125 0c98da8b 2005-07-13 devnull IFWHT = 0160000,
126 0c98da8b 2005-07-13 devnull
127 0c98da8b 2005-07-13 devnull /* type in Dirent.type */
128 0c98da8b 2005-07-13 devnull DTUNKNOWN = 0,
129 0c98da8b 2005-07-13 devnull DTFIFO = 1,
130 0c98da8b 2005-07-13 devnull DTCHR = 2,
131 0c98da8b 2005-07-13 devnull DTDIR = 4,
132 0c98da8b 2005-07-13 devnull DTBLK = 6,
133 0c98da8b 2005-07-13 devnull DTREG = 8,
134 0c98da8b 2005-07-13 devnull DTLNK = 10,
135 0c98da8b 2005-07-13 devnull DTSOCK = 12,
136 cbeb0b26 2006-04-01 devnull DTWHT = 14
137 0c98da8b 2005-07-13 devnull };
138 0c98da8b 2005-07-13 devnull
139 0c98da8b 2005-07-13 devnull struct Cylsum
140 0c98da8b 2005-07-13 devnull {
141 0c98da8b 2005-07-13 devnull u32int ndir;
142 0c98da8b 2005-07-13 devnull u32int nbfree;
143 0c98da8b 2005-07-13 devnull u32int nifree;
144 0c98da8b 2005-07-13 devnull u32int nffree;
145 0c98da8b 2005-07-13 devnull };
146 0c98da8b 2005-07-13 devnull
147 e060bc52 2005-08-11 devnull struct Cylsumtotal
148 e060bc52 2005-08-11 devnull {
149 e060bc52 2005-08-11 devnull u64int ndir;
150 e060bc52 2005-08-11 devnull u64int nbfree;
151 e060bc52 2005-08-11 devnull u64int nifree;
152 e060bc52 2005-08-11 devnull u64int nffree;
153 e060bc52 2005-08-11 devnull u64int numclusters;
154 e060bc52 2005-08-11 devnull u64int unused[3];
155 e060bc52 2005-08-11 devnull };
156 e060bc52 2005-08-11 devnull
157 e060bc52 2005-08-11 devnull /* Fields beginning with underscore are deprecated in UFS2 */
158 0c98da8b 2005-07-13 devnull struct Fsblk
159 0c98da8b 2005-07-13 devnull {
160 0c98da8b 2005-07-13 devnull u32int unused0;
161 0c98da8b 2005-07-13 devnull u32int unused1;
162 0c98da8b 2005-07-13 devnull daddr_t sfragno; /* fragment address of super block in file system */
163 0c98da8b 2005-07-13 devnull daddr_t cfragno; /* fragment address if cylinder block in file system */
164 0c98da8b 2005-07-13 devnull daddr_t ifragno; /* fragment offset of inode blocks in file system */
165 0c98da8b 2005-07-13 devnull daddr_t dfragno; /* fragment offset of data blocks in cg */
166 e060bc52 2005-08-11 devnull u32int _cgoffset; /* block (maybe fragment?) offset of Cgblk in cylinder */
167 e060bc52 2005-08-11 devnull u32int _cgmask;
168 e060bc52 2005-08-11 devnull time_t _time;
169 e060bc52 2005-08-11 devnull u32int _nfrag; /* number of blocks in fs * fragsperblock */
170 e060bc52 2005-08-11 devnull u32int _ndfrag;
171 0c98da8b 2005-07-13 devnull u32int ncg; /* number of cylinder groups in fs */
172 0c98da8b 2005-07-13 devnull u32int blocksize; /* block size in fs */
173 0c98da8b 2005-07-13 devnull u32int fragsize; /* frag size in fs */
174 0c98da8b 2005-07-13 devnull u32int fragsperblock; /* fragments per block: blocksize / fragsize */
175 0c98da8b 2005-07-13 devnull u32int minfree; /* ignored by us */
176 0c98da8b 2005-07-13 devnull u32int rotdelay; /* ... */
177 0c98da8b 2005-07-13 devnull u32int rps;
178 0c98da8b 2005-07-13 devnull u32int bmask;
179 0c98da8b 2005-07-13 devnull u32int fmask;
180 0c98da8b 2005-07-13 devnull u32int bshift;
181 0c98da8b 2005-07-13 devnull u32int fshift;
182 0c98da8b 2005-07-13 devnull u32int maxcontig;
183 0c98da8b 2005-07-13 devnull u32int maxbpg;
184 0c98da8b 2005-07-13 devnull u32int fragshift;
185 0c98da8b 2005-07-13 devnull u32int fsbtodbshift;
186 e060bc52 2005-08-11 devnull u32int sbsize; /* size of super block */
187 0c98da8b 2005-07-13 devnull u32int unused2; /* more stuff we don't use ... */
188 0c98da8b 2005-07-13 devnull u32int unused3;
189 0c98da8b 2005-07-13 devnull u32int nindir;
190 0c98da8b 2005-07-13 devnull u32int inosperblock; /* inodes per block */
191 e060bc52 2005-08-11 devnull u32int _nspf;
192 0c98da8b 2005-07-13 devnull u32int optim;
193 e060bc52 2005-08-11 devnull u32int _npsect;
194 e060bc52 2005-08-11 devnull u32int _interleave;
195 e060bc52 2005-08-11 devnull u32int _trackskew;
196 0c98da8b 2005-07-13 devnull u32int id[2];
197 e060bc52 2005-08-11 devnull daddr_t _csaddr; /* blk addr of cyl grp summary area */
198 e060bc52 2005-08-11 devnull u32int cssize; /* size of cyl grp summary area */
199 e060bc52 2005-08-11 devnull u32int cgsize; /* cylinder group size */
200 e060bc52 2005-08-11 devnull u32int _trackspercyl; /* tracks per cylinder */
201 e060bc52 2005-08-11 devnull u32int _secspertrack; /* sectors per track */
202 e060bc52 2005-08-11 devnull u32int _secspercyl; /* sectors per cylinder */
203 e060bc52 2005-08-11 devnull u32int _ncyl; /* cylinders in fs */
204 e060bc52 2005-08-11 devnull u32int _cylspergroup; /* cylinders per group */
205 0c98da8b 2005-07-13 devnull u32int inospergroup; /* inodes per group */
206 0c98da8b 2005-07-13 devnull u32int fragspergroup; /* data blocks per group * fragperblock */
207 e060bc52 2005-08-11 devnull Cylsum _cstotal; /* more unused... */
208 0c98da8b 2005-07-13 devnull u8int fmod;
209 0c98da8b 2005-07-13 devnull u8int clean;
210 0c98da8b 2005-07-13 devnull u8int ronly;
211 e060bc52 2005-08-11 devnull u8int _flags;
212 e060bc52 2005-08-11 devnull /* char fsmnt[512]; in UFS1 */
213 e060bc52 2005-08-11 devnull char fsmnt[FSMAXMNTLEN2];
214 e060bc52 2005-08-11 devnull char volname[FSMAXVOLLEN];
215 e060bc52 2005-08-11 devnull u64int swuid;
216 e060bc52 2005-08-11 devnull u32int pad;
217 0c98da8b 2005-07-13 devnull u32int cgrotor;
218 e060bc52 2005-08-11 devnull uchar ocsp[FSNOCSPTRSLEN]; /* last 4 bytes is contigdirs in UFS2 */
219 e060bc52 2005-08-11 devnull u32int contigdirs; /* csp in UFS2 */
220 e060bc52 2005-08-11 devnull u32int csp; /* maxcluster in UFS2 */
221 e060bc52 2005-08-11 devnull u32int maxcluster; /* active in UFS2 */
222 e060bc52 2005-08-11 devnull u32int _cpc;
223 e060bc52 2005-08-11 devnull /* u16int opostbl[16][8]; in UFS1 */
224 e060bc52 2005-08-11 devnull u32int maxbsize;
225 e060bc52 2005-08-11 devnull u64int spare64[17];
226 e060bc52 2005-08-11 devnull u64int sblockloc;
227 e060bc52 2005-08-11 devnull Cylsumtotal cstotal;
228 e060bc52 2005-08-11 devnull u64int time;
229 e060bc52 2005-08-11 devnull u64int nfrag;
230 e060bc52 2005-08-11 devnull u64int ndfrag;
231 e060bc52 2005-08-11 devnull u64int csaddr;
232 e060bc52 2005-08-11 devnull u64int pendingblocks;
233 e060bc52 2005-08-11 devnull u32int pendinginodes;
234 0c98da8b 2005-07-13 devnull u32int snapinum[FSMAXSNAP];
235 0c98da8b 2005-07-13 devnull u32int avgfilesize;
236 0c98da8b 2005-07-13 devnull u32int avgfpdir;
237 e060bc52 2005-08-11 devnull /* u32int sparecon[26], pendingblocks, pendinginodes; in UFS1 */
238 e060bc52 2005-08-11 devnull u32int savecgsize;
239 e060bc52 2005-08-11 devnull u32int sparecon[26];
240 e060bc52 2005-08-11 devnull u32int flags;
241 0c98da8b 2005-07-13 devnull u32int contigsumsize;
242 0c98da8b 2005-07-13 devnull u32int maxsymlinklen;
243 e060bc52 2005-08-11 devnull u32int _inodefmt; /* format of on-disk inodes */
244 0c98da8b 2005-07-13 devnull u64int maxfilesize; /* maximum representable file size */
245 0c98da8b 2005-07-13 devnull u64int qbmask;
246 0c98da8b 2005-07-13 devnull u64int qfmask;
247 0c98da8b 2005-07-13 devnull u32int state;
248 e060bc52 2005-08-11 devnull u32int _postblformat;
249 e060bc52 2005-08-11 devnull u32int _nrpos;
250 e060bc52 2005-08-11 devnull u32int _postbloff;
251 e060bc52 2005-08-11 devnull u32int _rotbloff;
252 e060bc52 2005-08-11 devnull u32int magic; /* FSMAGIC or FSMAGIC2 */
253 0c98da8b 2005-07-13 devnull };
254 0c98da8b 2005-07-13 devnull
255 0c98da8b 2005-07-13 devnull /*
256 0c98da8b 2005-07-13 devnull * Cylinder group block for a file system.
257 0c98da8b 2005-07-13 devnull */
258 0c98da8b 2005-07-13 devnull struct Cgblk
259 0c98da8b 2005-07-13 devnull {
260 0c98da8b 2005-07-13 devnull u32int unused0;
261 e060bc52 2005-08-11 devnull u32int magic; /* CGMAGIC */
262 0c98da8b 2005-07-13 devnull u32int time; /* time last written */
263 e060bc52 2005-08-11 devnull u32int num; /* we are cg #cgnum */
264 0c98da8b 2005-07-13 devnull u16int ncyl; /* number of cylinders in gp */
265 e060bc52 2005-08-11 devnull u16int nino; /* number of inodes */
266 e060bc52 2005-08-11 devnull u32int nfrag; /* number of fragments */
267 0c98da8b 2005-07-13 devnull Cylsum csum;
268 0c98da8b 2005-07-13 devnull u32int rotor;
269 0c98da8b 2005-07-13 devnull u32int frotor;
270 0c98da8b 2005-07-13 devnull u32int irotor;
271 0c98da8b 2005-07-13 devnull u32int frsum[MAXFRAG]; /* counts of available frags */
272 0c98da8b 2005-07-13 devnull u32int btotoff;
273 0c98da8b 2005-07-13 devnull u32int boff;
274 0c98da8b 2005-07-13 devnull u32int imapoff; /* offset to used inode map */
275 0c98da8b 2005-07-13 devnull u32int fmapoff; /* offset to free fragment map */
276 0c98da8b 2005-07-13 devnull u32int nextfrag; /* next free fragment */
277 0c98da8b 2005-07-13 devnull u32int csumoff;
278 0c98da8b 2005-07-13 devnull u32int clusteroff;
279 0c98da8b 2005-07-13 devnull u32int ncluster;
280 0c98da8b 2005-07-13 devnull u32int sparecon[13];
281 0c98da8b 2005-07-13 devnull };
282 0c98da8b 2005-07-13 devnull
283 0c98da8b 2005-07-13 devnull struct Cylgrp
284 0c98da8b 2005-07-13 devnull {
285 0c98da8b 2005-07-13 devnull /* these are block numbers not fragment numbers */
286 e060bc52 2005-08-11 devnull u64int bno; /* disk block address of start of cg */
287 e060bc52 2005-08-11 devnull u64int ibno; /* disk block address of first inode */
288 e060bc52 2005-08-11 devnull u64int dbno; /* disk block address of first data */
289 e060bc52 2005-08-11 devnull u64int cgblkno;
290 0c98da8b 2005-07-13 devnull };
291 0c98da8b 2005-07-13 devnull
292 0c98da8b 2005-07-13 devnull /*
293 0c98da8b 2005-07-13 devnull * this is the on-disk structure
294 0c98da8b 2005-07-13 devnull */
295 e060bc52 2005-08-11 devnull struct Inode1
296 0c98da8b 2005-07-13 devnull {
297 0c98da8b 2005-07-13 devnull u16int mode;
298 0c98da8b 2005-07-13 devnull u16int nlink;
299 0c98da8b 2005-07-13 devnull u32int unused;
300 0c98da8b 2005-07-13 devnull u64int size;
301 0c98da8b 2005-07-13 devnull u32int atime;
302 0c98da8b 2005-07-13 devnull u32int atimensec;
303 0c98da8b 2005-07-13 devnull u32int mtime;
304 0c98da8b 2005-07-13 devnull u32int mtimensec;
305 0c98da8b 2005-07-13 devnull u32int ctime;
306 0c98da8b 2005-07-13 devnull u32int ctimensec;
307 0c98da8b 2005-07-13 devnull /* rdev is db[0] */
308 0c98da8b 2005-07-13 devnull u32int db[NDADDR];
309 0c98da8b 2005-07-13 devnull u32int ib[NIADDR];
310 0c98da8b 2005-07-13 devnull u32int flags;
311 0c98da8b 2005-07-13 devnull u32int nblock;
312 0c98da8b 2005-07-13 devnull u32int gen;
313 0c98da8b 2005-07-13 devnull u32int uid;
314 0c98da8b 2005-07-13 devnull u32int gid;
315 0c98da8b 2005-07-13 devnull u32int spare[2];
316 0c98da8b 2005-07-13 devnull };
317 0c98da8b 2005-07-13 devnull
318 e060bc52 2005-08-11 devnull struct Inode
319 e060bc52 2005-08-11 devnull {
320 e060bc52 2005-08-11 devnull u16int mode;
321 e060bc52 2005-08-11 devnull u16int nlink;
322 e060bc52 2005-08-11 devnull u32int uid;
323 e060bc52 2005-08-11 devnull u32int gid;
324 e060bc52 2005-08-11 devnull u32int blksize;
325 e060bc52 2005-08-11 devnull u64int size;
326 e060bc52 2005-08-11 devnull u64int nblock;
327 e060bc52 2005-08-11 devnull u64int atime;
328 e060bc52 2005-08-11 devnull u64int mtime;
329 e060bc52 2005-08-11 devnull u64int ctime;
330 e060bc52 2005-08-11 devnull u64int btime;
331 e060bc52 2005-08-11 devnull u32int atimensec;
332 e060bc52 2005-08-11 devnull u32int mtimensec;
333 e060bc52 2005-08-11 devnull u32int ctimensec;
334 e060bc52 2005-08-11 devnull u32int btimensec;
335 e060bc52 2005-08-11 devnull u32int gen;
336 e060bc52 2005-08-11 devnull u32int kernflags;
337 e060bc52 2005-08-11 devnull u32int flags;
338 e060bc52 2005-08-11 devnull u32int extsize;
339 e060bc52 2005-08-11 devnull u64int ext[NXADDR];
340 e060bc52 2005-08-11 devnull u64int db[NDADDR];
341 e060bc52 2005-08-11 devnull u64int ib[NIADDR];
342 e060bc52 2005-08-11 devnull u64int spare[3];
343 e060bc52 2005-08-11 devnull };
344 e060bc52 2005-08-11 devnull
345 0c98da8b 2005-07-13 devnull struct Dirent
346 0c98da8b 2005-07-13 devnull {
347 0c98da8b 2005-07-13 devnull u32int ino;
348 0c98da8b 2005-07-13 devnull u16int reclen;
349 0c98da8b 2005-07-13 devnull u8int type;
350 0c98da8b 2005-07-13 devnull u8int namlen;
351 0c98da8b 2005-07-13 devnull char name[1];
352 0c98da8b 2005-07-13 devnull };
353 0c98da8b 2005-07-13 devnull
354 0c98da8b 2005-07-13 devnull /*
355 0c98da8b 2005-07-13 devnull * main file system structure
356 0c98da8b 2005-07-13 devnull */
357 0c98da8b 2005-07-13 devnull struct Ffs
358 0c98da8b 2005-07-13 devnull {
359 e060bc52 2005-08-11 devnull int ufs;
360 0c98da8b 2005-07-13 devnull int blocksize;
361 e060bc52 2005-08-11 devnull u64int nblock;
362 0c98da8b 2005-07-13 devnull int fragsize;
363 0c98da8b 2005-07-13 devnull int fragsperblock;
364 0c98da8b 2005-07-13 devnull int inosperblock;
365 e060bc52 2005-08-11 devnull u64int blockspergroup;
366 e060bc52 2005-08-11 devnull u64int fragspergroup;
367 0c98da8b 2005-07-13 devnull int inospergroup;
368 0c98da8b 2005-07-13 devnull
369 e060bc52 2005-08-11 devnull u64int nfrag;
370 e060bc52 2005-08-11 devnull u64int ndfrag;
371 0c98da8b 2005-07-13 devnull
372 0c98da8b 2005-07-13 devnull int ncg;
373 0c98da8b 2005-07-13 devnull Cylgrp *cg;
374 0c98da8b 2005-07-13 devnull
375 0c98da8b 2005-07-13 devnull Disk *disk;
376 0c98da8b 2005-07-13 devnull };